栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java之简易版的五子棋

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java之简易版的五子棋

主要使用的就是二维数组和循环的概念,初始化棋盘的实现并不难,稍微有点困难的就是判断输赢的实现。

首先需要初始化棋盘,只有先将棋盘打印出来才能实现接下来的步骤。

 //初始化棋盘
    public static void arrayList(int n,int m,char[][] arr,char[]arrs1) {
        //设置五子棋的棋子属性
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                if (i == n) {
                    arr[n][j] = arrs1[j];
                } else if (j == m) {
                    arr[i][m] = arrs1[i];
                } else {
                    arr[i][j] = '╋';
                }

            }
        }
    }

完成棋盘初始化后,就可以写下棋的环节了。

//开始下棋子
        public static void startChess(char[][] arr){
        Scanner scanner=new Scanner(System.in);
            boolean win=false;

            boolean flag=true;
            while(true){
                //黑子下棋的顺序
                if(flag==true){
                    System.out.println("黑子下棋");
                    System.out.println("请输入x坐标:");
                    int x=scanner.nextInt();
                    System.out.println("请输入y坐标:");
                    int y=scanner.nextInt();
                    flag=isTrue(x,y,arr);
                    if(flag==false){
                        System.out.println("这个位置已被占用或为非法位置");
                        flag=true;
                        continue;
                    }
                    arr[x-1][y-1]='○';
                    win=isWinner(x,y,arr);
                    if(win==true){
                        System.out.println("黑子获得胜利");
                        break;
                    }
                    flag=false;

                }else{
                    //白子下棋的顺序
                    System.out.println("白子下棋");
                    System.out.println("请输入x坐标:");
                    int x=scanner.nextInt();
                    System.out.println("请输入y坐标:");
                    int y=scanner.nextInt();
                    flag=isTrue(x,y,arr);
                    if(flag==false){
                        System.out.println("这个位置已被占用或为非法位置");
                        continue;
                    }
                    arr[x-1][y-1]='●';
                    win=isWinner(x,y,arr);
                    if(win==true){
                        System.out.println("白子获得胜利");
                        break;
                    }
                    flag=true;
                }
                //为保证每次下棋都会打印一次
                 printList(arr);

            }
    }

在下棋的同时,需要判断棋子的位置是否正确,如不正确则返回false,正确就返回true.

//判断棋子位置是否正确
        public static boolean isTrue(int n,int m,char [][] arr){
            if(n>14||n<0||m>14||m<0){
                return false;
            }
           if(arr[n-1][m-1]!='╋'){
               return false;
           }
           return true;
        }

打印数组使用数组的遍历即可

  //打印数组
        public static void printList(char[][] arr){

            for(int i=0;i

接下来就是判断输赢了。

判断输赢的算法思路:

五子棋的规则为五个相连为胜,可以每次将每次输入的棋子作为看为原点,分为左右、上下、向左上下,向右上下。

左右可以直接固定输入的x值,用i进行遍历,为五个就返回true,否则就跳出循环,进行下一个判断,上下固定输入的y值,同样用i进行遍历,与左右相同。向左上下,先进行向左上,如果不满足五个点,回到输入的原点,不初始化计数器的值,再向左下进行遍历,计数器值相加,若为五个就返回true,向右上下同理。

   //判断输赢
    public static boolean  isWinner(int x,int y,char [][]arr){
        
        //左右
        int count=1;
        for(int i=0;i< arr[x-1].length-2;i++){
            if(arr[x-1][i]!='╋'){
                if(arr[x-1][i]==arr[x-1][i+1]){
                    count=count+1;
                }else{
                    count=1;
                    break;
                }
            }
        }
        if(count>=5){
            return true;
        }else {
            //初始化计数器
            count=1;
        }

        //上下
        for(int j=0;j< arr.length-2;j++){
            if(arr[j][y-1]!='╋'){
                if(arr[j][y-1]==arr[j+1][y-1]){
                    count=count+1;
                }else{
                    break;
                }
            }
        }
        if(count>=5){
            return true;
        }else {
            count=1;
        }

        //向左    x+1  y+1
        //左下
        int j=y-1;
        for(int i=x-1;i0;i--){
           if(i==0||j==0){
               break;
           }
           if(arr[i][j]!='╋'){
               if(arr[i][j]==arr[i-1][j-1]){
                   count++;
               }else {
                   break;
               }
           }
           j--;
       }
        if(count>=5){
            return true;
        }else {
            count=1;
        }
        //向右   x++  y--
        //右下
        j=y-1;
        for(int i=x-1;i< arr.length-1;i++){
            if(x== arr.length||j==0){
                break;
            }
            if(arr[i][j]!='╋'){
                if(arr[i][j]==arr[i+1][j-1]){
                    count=count+1;
                }else {
                    break;
                }
            }
                j--;


        }
        // 右上    x-1  y+1
        j=y-1;
        for (int i=x-1;i<0;i--){
            if(i==0||j==arr[x-1].length-1){
                break;
            }
            if(arr[i][j]!='╋'){
                if(arr[i][j]==arr[i-1][j+1]){
                    count++;
                }else {
                    break;
                }
            }
           j++;
        }
        if(count>=5){
            return true;
        }else {
            count=1;
        }
        return false;
    }

 

这个方法并不是最优的,相对来说想的比较麻烦。

public class Demo3 {
    public static void main(String[] args) {
        //完成数组的创建
        //棋盘为一个14*14的棋盘
        char [] arrs1={'⒈','⒉','⒊','⒋','⒌','⒍','⒎','⒏','⒐','⒑','⒒','⒓','⒔','⒕','⒖'};
        int a=14;
        int b=14;
        char [][] arr=new char [a+1][b+1];
        arrayList(a,b,arr,arrs1);
        startChess(arr);
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/424494.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号