01-JAVA基础—>赏金任务—>五子棋(面向对象)

做个记录
在这里插入图片描述
方便复制粘贴

Checkerboard
Chess_player
Referee
Main

// 棋盘类

// 棋盘类
public class Checkerboard {
    /**
     * 显示棋盘
     *             X轴 y轴 对边框进行轴叙述
     *             对初始棋盘
     *             棋局开始后接收棋手的落子
     *             归环境类管,受裁判监控
     *
     * 显示棋子
     */
    private int Vertical=16; //纵经
    private int horizontal=16; //横纬
    public int getVertical() {return Vertical; }
    public int getHorizontal() { return horizontal; }

    //建立五子棋双重数组
    public int[][] chess = new int[this.horizontal][this.Vertical];

    //棋盘初始化方法
    public   void initialization(){

        // 对边框进行轴叙述
        for (int  i = 0; i<16; i++){
            /*chess[0][i]= String.valueOf(i);
            chess[i][0]= String.valueOf(i);*/
            chess[0][i] = i;
            chess[i][0] = i;

        }

        //对初始棋盘进行归零处理
        for(int i = 1;i<16;i++) {
            for(int j =1;j<16;j++) {
//                chess[i][j]="┼";
                chess[i][j] = 0;
            }
        }
    }
    //棋盘呈现方法
    public void present(){
        //打印出棋盘
        for(int i = 0;i<16;i++) {
            for(int j =0;j<16;j++) {
                if((i==0&&j>=10)||(i>=10&&j==0)) {
                    System.out.print(chess[i][j]+" ");
                }else {
                    System.out.print(chess[i][j]+"  ");
                }
            }
            System.out.println("");
        }
    }

    //获得棋盘对象中的棋盘二维数组
    public int[][] getChessboard(){
        return this.chess;
    }

   /* public static void main(String[] args) {
        //产生一个棋盘
        Checkerboard c = new Checkerboard();
        c.initialization();
        c.present();
        c.chess[3][3] = 2;
        c.present();
    }*/

}

// 棋手类

// 棋手类
public class Chess_player {
    /**
     * 下棋
     *         选择非零幸运数字(1,2,3,4,5,6,7,8,9)
     *         悔棋  3次机会
     *         认输
     *         记住自己下的每一步
     */

    //下棋
    public static void press(int[][] chess,int who,int x,int y){
        // 1 黑 2 白
        if (who == 1){
            chess[x][y] = 1;
        }else {
            chess[x][y] = 2;
        }
    }
}

// 裁判类

import java.util.Random;

// 裁判类
public class Referee {
    /**
     * 有一个棋盘
     * 判断先手,确定黑白
     *         限时指定谁下,超时犯规,对方赢
     *         怎么算犯规
     *             下棋的地方有棋子
     *             下棋的地方越界
     *         判断谁赢
     *
     *         记录棋手可选择幸运数字(1,2,3,4,5,6,7,8,9)
     *         记录回合数(最多(15*15)/2=112个回合)
     */
    //建立校正X,Y范围是否合理的变量

    //裁判心里有数
    int x;
    int y;

    //建立黑方和白方的X,Y轴数据变量
    int blackYInput = 0;
    int blackXInput = 0;
    int whiteYInput = 0;
    int whiteXInput = 0;

    //猜先
    public  int   caixian(){
        // 1 黑先 2 白先
        Random r = new Random();
        int a = r.nextInt(100);
        if (a<49){return 1; }else { return 2; }
    }
    //限时棋手轮下
    public  void time() {
        int time = 60;
        while (time > 0) {
            time--;
            try {
                Thread.sleep(1000);
                int hh = time / 60 / 60 % 60;
                int mm = time / 60 % 60;
                int ss = time % 60;
                System.out.println("还剩" + ss + "秒");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
    //犯规
    public  boolean fangui(int [][] chess, int who, int x, int y){
        //判断越界
        if (x<1 | x>15 | y<1 | y>15){
            System.out.println("手别抖啊,都下出界了");
            return false;
        }
        //判断有子,谁的子
        if (chess[x][y] == 1 ){
            if(who == 1){
                System.out.println("黑哥,这里自己下过的自己不知道??");
                return false;
            }else {
                System.out.println("白哥,这里已经有黑子了。。。");
                return false;
            }

        }else if(chess[x][y] == 2){
            if(who == 2){
                System.out.println("白哥,这里自己下过的自己不知道??");
                return false;
            }else {
                System.out.println("黑哥,这里已经有黑子了。。。");
                return false;
            }
        }
        else {
            return true;
        }

    }
    //判赢
    public  boolean panying(int[][] chess,int who,int x,int y){
        int nums =1;
        int a=0;
        String p = "";
        if (who==1){
            p = "黑子赢";
            a = who; } else {
            p = "白子赢";
            a =2; }
        //横向五个连续棋子
        for(int i = 1;i<16;i++) {
            for(int j =1;j<15;j++) {
                if(chess[i][j]==a&&chess[i][j+1]==a) {
                    nums++;
                    if(nums == 5) {
                        System.out.println(p);
                        return true;
                    }
                }else {
                    nums = 1;
                }
            }
        }
        nums = 1;
        //纵向五个连续棋子
        for(int j = 1;j<16;j++) {
            for(int i =1;i<15;i++) {
                if(chess[i][j]==a &&chess[i+1][j]== a ) {
                    nums++;
                    if(nums == 5) {
                        System.out.println(p);
                        return true;
                    }
                }else {
                    nums = 1;
                }
            }
        }
        nums = 1;
        //右上斜5个棋子
        for (int i = 1; i < 15; i++) {
            for (int j = 1; j < 16 ; j++) {
                judge:for(int k = 1;k<5;k++) {
                    if((j-k)>0&&(i+k)<16) {
                        if(chess[j][i]== a &&chess[j-k][i+k]== a ) {
                            nums++;
                        }else {
                            nums=1;
                            break judge;}
                    }else break judge;
                }
                if(nums==5) {
                    System.out.println(p);
                    return true;
                }
            }
        }
        nums = 1;
        //左上斜五个棋子
        for (int i = 1; i < 15; i++) {
            for (int j = 1; j < 16 ; j++) {
                judge:for(int k = 1;k<5;k++) {
                    if((j-k)>0&&(i-k)>0) {
                        if(chess[j][i]== a &&chess[j-k][i-k]== a ) {
                            nums++;
                        }else {
                            nums=1;
                            break judge;}
                    }else break judge;
                }
                if(nums==5) {
                    System.out.println(p);
                    return true;
                }
            }
        }
        return false;
    }


    /*public static void main(String[] args) {
        System.out.println(caixian());
        time();
    }*/

}

Main 环境类

import java.util.Scanner;
public class Main {
    //自己和自己下
//    private static int[][] c;

    public static void main(String[] args) {
        //产生一个棋盘
        Checkerboard c = new Checkerboard();
        //产生一个棋手   下子权限
        Chess_player player = new Chess_player();
        //产生一个裁判   棋盘所有权限
        Referee referee = new Referee();

        //游戏开始
        System.out.println("游戏开始!");
        c.initialization();
        c.present();
//        int[][] chess = c.getChessboard();

        System.out.println("棋盘就位,棋手就位,裁判就位,请猜先。");
        int a = referee.caixian();
        int p1,p2 = 0;
        String s1,s2 = "";
        if (a == 1){
            p1 = 1;p2 = 2;s1 = "黑选手";s2 = "白选手";
            System.out.println("黑先。");
        }else {
            p1 = 2;p2 = 1;s1 = "白选手";s2 = "黑选手";
            System.out.println("白先。");
        }
        System.out.println("准备好了? 开始");
        //建立回合变量step
        int step = 1;
        //建立输入变量
        Scanner input = new Scanner(System.in);
        //开始回合循环
        win:do {
            System.out.println('请' + s1 + "输入x坐标");
            referee.x = input.nextInt();
            System.out.println('请' + s1 +"输入y坐标");
            referee.y = input.nextInt();
            if (referee.fangui(c.chess,p1,referee.x, referee.y)){
                player.press(c.chess,p1,referee.x, referee.y);
                c.present();
                if(referee.panying(c.chess,p1,referee.x, referee.y)){
                    System.out.println("比赛结束、、");
                    break ;
                }
            }
            System.out.println('请' + s2 +"输入x坐标");
            referee.x = input.nextInt();
            System.out.println('请' + s2 +"输入y坐标");
            referee.y = input.nextInt();
            if (referee.fangui(c.chess,p2,referee.x, referee.y)){
                player.press(c.chess,p2,referee.x, referee.y);
                c.present();
                if(referee.panying(c.chess,p2,referee.x, referee.y)){
                    System.out.println("比赛结束、、");
                    break ;
                }
            }

            //一回合结束,step+1
            step++;
        }while(step<112);
        /*
         *注:因为共有15*15=225个棋子位,一轮下来黑方和白方共下两个棋子,
         *	  故准备(15*15)/2=112个回合。
         */
    }
}
说明文档

checkerboard    棋盘类
        显示棋盘
            X轴 y轴 对边框进行轴叙述
            对初始棋盘进行归零处理
            棋局开始后接收棋手的落子
            归环境类管,受裁判监控

        显示棋子

chess_player    棋手类
        下棋
        选择非零幸运数字(1,2,3,4,5,678,9)
        悔棋
        认输
        记住自己下的每一步

referee         裁判类
        判断先手,确定黑白
        限时指定谁下,超时犯规,对方赢
        怎么算犯规
            下棋的地方有棋子
            下棋的地方越界
        判断谁赢
        提供棋手可选择幸运数字(1,2,3,4,5,678,9)
        记录回合数(最多(15*15/2=112个回合)


Main            环境类
        一个棋盘
        一个裁判
        两个棋手
        
有的地方有BUG
可以考虑加一个倒计时
没有机器人
没有智能棋盘(棋盘+裁判)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高高飞起的勇敢麦当

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值