Java实验—四子棋进阶

版权声明:就是码字也不容易啊 https://blog.csdn.net/qq_40946921/article/details/84444570

请参阅教材264页8.20题叙述编写一个“四子连”游戏(注:每次不仅要指定棋子的行而且还要指定列,具体效果如下图所示;此外,红黄棋手谁先下应随机生成)。

运行效果:

代码:

import java.util.Scanner;
public class JavaGame {
    int row,column;                       //行列
    String Graph[][];                       //二维棋盘
    String C[]={"红","黄"};          //棋子颜色
    int empty;                            //棋盘剩余空格
    public JavaGame(int r,int c){                  //初始化棋盘数据
        empty=r*c;
        row=r;column=c;
        Graph=new String[r][c];
        for(int i=0;i<r;i++)
            for(int j=0;j<c;j++)
                Graph[i][j]="  ";
    }
    public void show(){                            //展示棋盘
        for(int i=row-1;i>=0;i--){
            System.out.print("|");
            for(int j=0;j<column;j++)
                System.out.print(Graph[i][j]+"|");
            System.out.println();
        }
    }
    public  int Input(int x ,int y,int key){              //下棋
        System.out.println(y+" "+x);
        if(y>=column||y<0||x>=row||x<0||!Graph[x][y].equals("  ")){
            System.out.println("输入有误,请重新输入");
            return 1;
        }
        Graph[x][y]=C[key%2];
        empty--;
        return 0;
    }
    public int judge(int x,int y) {                //判断是否有人胜出
        if (search(Graph[x][y], x, y, 1,  0) + search(Graph[x][y], x, y, -1,  0) == 3|| //水平探测
                search(Graph[x][y], x, y, 1,  1) + search(Graph[x][y], x, y, -1, -1) == 3|| //对角探测
                search(Graph[x][y], x, y, 0,  1) + search(Graph[x][y], x, y,  0, -1) == 3|| //垂直探测
                search(Graph[x][y], x, y, 1, -1) + search(Graph[x][y], x, y, -1,  1) == 3)  //对角探测
            return 1;
        return 0;                          //未有人获胜
    }
    public int search(String k, int a, int b, int z, int f) {    //单向探测函数
        a += z;	b += f;
        if (b >= column || a >= row || a < 0 || b < 0||!Graph[a][b].equals(k))
            return 0;
        return search(k, a , b , z, f)+1;
    }
    public static void main(String[] args) {
        JavaGame My=new JavaGame(6,7);
        Scanner input=new Scanner(System.in);
        int x,y,key;
        My.show();
        for(int i=(int)(Math.random()*2);;){    //随机起手
            System.out.print("请在"+My.C[i%2]+"棋手输入您的棋子所在行(1-6):");
            x=input.nextInt();
            System.out.print("所在列(1-7):");
            y=input.nextInt();
            if(My.Input(x-1,y-1,i)!=0)      //出错后 执行下一循环(i没有++)
                continue;
            My.show();
            if(My.judge(x-1,y-1)==1){	//判断是否有人胜出
                System.out.println("恭喜,"+My.C[i%2]+"棋手赢!");
                break;
            }
            if(My.empty==0){					//平局
                System.out.println("Chess draw");
                break;
            }
            i++;
        }
    }
}

 

猜你喜欢

转载自blog.csdn.net/qq_40946921/article/details/84444570