您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

用java做一个简易的五子棋

通过14天的Java学习,想分享自己的学习经验,这次想分享用java做一个简易的五子棋 

游戏规则:

(1)对局双方各执一色棋子。
(2)空棋盘开局。
(3)白先、黑后,交替下子,每次只能下一子。
(4)棋子下在棋盘的空白点上,棋子下定后,不得向其它点移动,不得从棋盘上拿掉或拿起另落别处。
(5)白方的第一枚棋子可下在棋盘任意交叉点上。
(6)任意一方达成五连子即可获胜

 

创建一个10*10的二维数组

static String[][] a = new String[10][10];

初始化数据

public static void init() {
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                System.out.println(a[i][j]);
                a[i][j] = "+";
            }
        }
    }

绘制棋盘

public static void paint() {
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
                System.out.print(a[i][j] + "" + "\t");
            }
            System.out.println();
        }
    }

双方要开始下棋了

/*

           1、两个人 

           2、如果下的位置有棋子了,就得重新

           3、两个人交替

           4、你下的坐标不能超出棋牌最大的坐标

*/

public static void XiaZi() {
        boolean flag = true;
        Scanner s = new Scanner(System.in);
        int x = 0;
        int y = 0;
        while (true) {
            if (flag) {
                System.out.println("A下");
                System.out.println("请输入x坐标");
                x = s.nextInt();
                System.out.println("请输入y坐标");
                y = s.nextInt();
                if (x > 10 || y > 10 || x < 1 || y < 1) {
                    System.out.println("请输入正确的xy坐标");
                    continue;
                }
                if (isRepeat(x, y)) {
                    a[y - 1][x - 1] = "○";
                    paint();
                } else {
                    continue;
                }
            } else {
                System.out.println("B下");
                System.out.println("请输入x坐标");
                x = s.nextInt();
                System.out.println("请输入y坐标");
                y = s.nextInt();
                if (x > 10 || y > 10 || x < 1 || y < 1) {
                    System.out.println("请输入正确的xy坐标");
                    continue;
                }
                if (isRepeat(x, y)) {
                    a[y - 1][x - 1] = "●";
                    paint();
                } else {
                    continue;
                }
            }
            flag = !flag;
            boolean l = upDown(x - 1, y - 1, a[y - 1][x - 1]);
            if (l) {
                break;
            }
            boolean p = leftRight(x - 1, y - 1, a[y - 1][x - 1]);
            if (p) {
                break;
            }
            boolean o = lurd(x - 1, y - 1, a[y - 1][x - 1]);
            if (o) {
                break;
            }
            boolean f = ruld(x - 1, y - 1, a[y - 1][x - 1]);
            if (f){
                break;
            }
        }
    }

 判断X,Y坐标是否有棋子

public static boolean isRepeat(int x, int y) {
        if (!a[y - 1][x - 1].equals("○") && !a[y - 1][x - 1].equals("●")) {
            return true;
        }
            return false;
    }

 这一步非常关键,每一次下棋都要以一个棋子判断8个方向 上,下,左,右,左上,右下,右上,左下,并且每下一次都要判断

我简单的画了一个图方便大家了解

 

 虽说是八个方向,但我们只需要判断四个,上下,左右,左上右下,右上左下

 第一个判断上下的

 public static boolean upDown(int x, int y, String s) {//上下

        int count = 1;
        int i = x;
        int k = y - 1;
        for (; k >= 0; k--) {
            if (a[k][i].equals(s)) {
                count++;
            }else{
                break;
            }
        }
        int j = y + 1;
        for (; j <= 9; j++) {
            if (a[j][i].equals(s)) {
                count++;
            }else{
                break;
            }
        }
        if (count >= 5) {
            System.out.println(s + "Win");
            return true;
        }
            return false;
    }

 第二个判断左右的

public static boolean leftRight(int x, int y, String s) {//左右
        int count = 1;
        int i = x - 1;
        int k = y;
        for (; i >= 0; i--) {
            if (a[k][i].equals(s)) {
                count++;
            }else{
                break;
            }
        }
        int j = x + 1;
        for (; j <= 9; j++) {
            if (a[k][j].equals(s)) {
                count++;
            }else{
                break;
            }
        }
        if (count >= 5) {
            System.out.println(s + "Win");
            return true;
        }
        return false;
    }

 第三个判断左上右下

public static boolean lurd(int x, int y, String s) {//左上右下
        int count = 1;
        int i = x - 1;
        int k = y - 1;
        for (; i >= 0 & k >= 0; i--, k--) {
            if (a[k][i].equals(s)) {
                count++;
            }else{
                break;
            }
        }
        int n = x + 1;
        int m = y + 1;
        for (; n <= 9 & m <= 9; n++, m++) {
            if (a[m][n].equals(s)) {
                count++;
            }else{
                break;
            }
        }
        if (count >= 5) {
            System.out.println(s + "Win");
            return true;
        }
            return false;
    }

 第四个判断右上左下

 

public  static boolean ruld(int x, int y,String s){//右上左下
        int count = 1;
        int q = x + 1;
        int e = y - 1;
        for (;q<=9&e>=0;q++,e--){
            if (a[e][q].equals(s)){
                count++;
            }else{
                break;
            }
        }
        int r = x - 1;
        int t = y + 1;
        for (;r>=0&t<=9;r--,t++){
            if (a[t][r].equals(s)){
                count++;
            }else{
                break;
            }
        }
        if (count>=5) {
            System.out.println(s+"Win");
            return true;
        }
            return  false;
    }

  写到这里,还差关键的一步,那就是main方法,把所有的方法合并就好了

 public static void main(String[] args) {
        init();
        paint();
        XiaZi();
    }

这个是棋盘的打印效果 

+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +

A下
请输入x坐标
1
请输入y坐标
2
+    +    +    +    +    +    +    +    +    +    
○    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    + 

 

   
B下
请输入x坐标
2
请输入y坐标
3
+    +    +    +    +    +    +    +    +    +    
○    +    +    +    +    +    +    +    +    +    
+    ●    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +    
+    +    +    +    +    +    +    +    +    +

打印效果如上,可以跟小伙伴一起玩咯

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进