小游戏——五子棋(Java)

首先介绍一下五子棋的规则:

1、参与人数为两个人;

2、一个人代表黑方,一个人代表白方;

3、先在棋盘上不管是水平、竖直、左斜、右斜的这四个方向上出现连续的五个颜色相同的棋子,表示该方获胜。

接下来再介绍在控制台是如何打印一个五子棋——

1、规定棋盘的大小为:10*10,并且用0来表示初始化的棋盘;

2、用1表示黑方,用2表示白方;

具体的代码实现如下:

import java.util.Scanner;
class Chess{
    public static Scanner input=new Scanner(System.in);
    public static int[][] chess=new int[10][10];
    public static int BLACK_CHESS=1;//黑棋
    public static int WRITE_CHESS=2;//白棋
    public static void main(String[] args){
        while(true){
            /*
            在游戏刚开始的时候,先进行一轮判断,相当于图形化界面中的
            进入游戏和退出游戏——用Y表示进入游戏,N表示退出游戏
             */
            System.out.print("游戏已经开始了,请您输入Y或N:");
            char start=input.next().charAt(0);
            if(start=='Y'){
                break;
            }else{
                continue;
            }
        }
        /*
        初始化棋盘
         */
        initChess();
        /*
        打印棋盘
         */
        printChess();
        /*
        黑白方下棋——奇黑偶数
        */
        int num=(int)(Math.random()*2);
        while(true){
            boolean flag;
            if(num%2==0){
                System.out.println("请黑方开始下棋");
                if(downChess(BLACK_CHESS)){
                    /*
                    判断输赢
                    */
                    flag=isGameOver();
                    if(flag){
                        System.out.println("黑方胜");
                        break;
                    }
                    num++;
                    /*
                    打印黑方下完更新后的棋盘
                     */
                    printChess(); 
                }
            }else{
                System.out.println("请白方开始下棋");
                if(downChess(WRITE_CHESS)){
                    /*
                    判断输赢
                    */
                    flag=isGameOver();
                    if(flag){
                        System.out.println("白方胜");
                        break;
                    }
                    num++; 
                    /*
                    打印白方下完更新后的棋盘
                     */
                    printChess();
                }
            }
            /*
           是否为平局——如果为平局,该棋盘中无一个0出现
            */
            if(isDraw()){
                System.out.println("该局为平局");
                break;
            }
        }
        
    }
    /*
    是否为平局
    */
    public static boolean isDraw(){
        boolean flag=true;
        for(int i=0;i<chess.length;i++){
            for(int j=0;j<chess[i].length;j++){
                /*
                遍历该棋盘中的每一个位置,判断该位置是否有0;
                如果有,还没到平局
                否则,平局
                 */
                if(chess[i][j]==0){
                    flag=false;
                }
            }
            System.out.println();
        }
        return flag;
    }
    /*
    判断输赢
    */
    public static boolean isGameOver(){
        boolean flag=true;
        for(int i=0;i<chess.length;i++){
            for(int j=0;j<chess[0].length;j++){
                /*
                水平
                 */
                if(j<=chess[i].length-5){
                    for(int c=j+1;c<=j+4;c++){
                        if(chess[i][j]!=chess[i][c]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
                /*
                竖直
                 */
                if(i<=chess.length-5){
                    for(int r=i+1;r<=i+4;r++){
                        if(chess[i][j]!=chess[r][j]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
                /*
                右斜
                 */
                if(i>=4&&j<=chess[0].length-5){
                    for(int r=i-1,c=j+1;c<=j+4;r--,c++){
                        if(chess[i][j]!=chess[r][c]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
                /*
                左斜
                 */
                if(i<=chess.length-5&&j<=chess[0].length-5){
                    for(int r=i+1,c=j+1;r<=i+4;r++,c++){
                        if(chess[i][j]!=chess[r][c]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
            } 
        }
        return false; 
    }
    /*
    初始化棋盘
    */
    public static void initChess(){
        for(int i=0;i<chess.length;i++){
            for(int j=0;j<chess[i].length;j++){
                chess[i][j]=0;
            }
        }
    }
    /*
    打印棋盘
    */
    public static void printChess(){
        for(int i=0;i<chess[0].length;i++){
            System.out.printf("%3d",i+1);
        }
        System.out.println();
        for(int i=0;i<chess.length;i++){
            System.out.printf("%-2d",i+1);
            for(int j=0;j<chess[i].length;j++){
                System.out.print(chess[i][j]+"  ");
            }
            System.out.println();
        }
    }
    /*
    黑白方下棋——奇黑偶数
    */
    public static boolean downChess(int num){
        boolean flag=true;
        System.out.print("输入自己想在棋盘上想要下的位置(即坐标):");
        int x=input.nextInt()-1;
        int y=input.nextInt()-1;
        if(chess[x][y]==0){
            chess[x][y]=num;
        }else{
            flag=false;
        }
        return flag;
    }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值