五子棋游戏

本章,我将给大家展示并解析我所做的简易五子棋游戏。

首先,要做一个五子棋游戏,我们要列出流程是什么:

        1.首先,我们需要创建一个棋盘,这里我用了二维数组来创建棋盘。

        2.棋盘创建好了以后,就可以在棋盘上下棋了,所以,第二步开始游戏,黑白双方开始下棋。

        3.在每一步棋下完以后进行判断,是否有五个棋子连一起。

        4.如果某一方胜利,询问用户是否继续比赛。

 流程分析好了以后,接下来咱们就要分析如何设计程序了:

 1.首先,先将我们经常使用的常量或变量定义为全局变量,这样方便函数调用,不用给函数传参。

    public static String[][] board;  //棋盘
    public static String BLACK_CHESS="O"; //黑棋为 O
    public static String WHITE_CHESS="X"; //白棋为 X
    public static int count=0;   //count来判断是黑方下棋还是白方下棋
    public static Scanner scanner=new Scanner(System.in);//用来输入下棋的位置

  主函数:

 public static void main(String[] args){
        initBoard(); //初始化棋盘
        printBoard(); //打印棋盘
        startGame(); //开始游戏
        isReplay();
    }

 

 2.创建棋盘。这里我定义了一个二维数组,并且给数组的每行每列定义了标识,以便用户方面下棋。

 public static void initBoard(){
        board=new String[16][16];
        for(int i=0;i<=15;i++){
            for(int j=0;j<=15;j++){
                board[i][j]="+";
            }
        }
    }

 3.定义一个打印棋盘的函数,方便我们观察棋盘。

public static void printBoard(){
        //输出的列提示,用字母提示
        System.out.print("  ");
        for(int i=0;i<board[0].length;i++){
            System.out.print((char)('A'+i)+" ");
        }
        System.out.println();
         for(int i=0;i<=15;i++){
            //输入的行提示,用字母提示
            System.out.print((char)('A'+i)+" ");
            for(int j=0;j<=15;j++){
                System.out.print(board[i][j]+" ");
            }
            System.out.println();
        }

4.棋盘创建好了,游戏开始。 

public static void startGame(){
        while(true){
            //开始下棋
            if(count%2==0){
                System.out.print("请黑方下棋:");
                putDownChess(BLACK_CHESS);
            }else{
                System.out.print("请白方下棋:");
                putDownChess(WHITE_CHESS);
            }
            //判断是否结束
            if(isWin()){
                System.out.println( (count%2==0 ? "白方" : "黑方") + "胜利!");
                break;
            }
        }
    }

 5.接下来,我们来定义下棋的函数。

public static void putDownChess(String s){
        int x=scanner.next().charAt(0)-'A'; //用户输入A-P
        int y=scanner.next().charAt(0)-'A';  
        if(board[x][y]!="+"){
            return;
        }
        if(s==BLACK_CHESS){
            board[x][y]="O";
            count++;
        }else{
            board[x][y]="X";
            count++;
        }
        printBoard();
    }

6.接下来,我们就需要定义一个函数,判断是否结束游戏。

public static boolean isWin(){
        for(int i=0;i<board.length;i++){
            for(int j=0;j<board[i].length;j++){
                //判断右边
                if(j<=board.length-5&&board[i][j]!="+"){
                    boolean flag=true;
                    for(int r=j+1;r<=j+4;r++){
                        if(board[i][j]!=board[i][r]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
                //判断下边
                if(i<=board.length-5&&board[i][j]!="+"){
                    boolean flag=true;
                    for(int c=i+1;c<=i+4;c++){
                        if(board[i][j]!=board[c][j]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
                //判断右下
                if(j<=board.length-5&&i<=board.length-5&&board[i][j]!="+"){
                    boolean flag=true;
                    for(int r=j+1,c=i+1;r<=j+4;r++,c++){
                        if(board[i][j]!=board[c][r]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
                //判断右上
                if(i>=4&&j<=board.length-5&&board[i][j]!="+"){
                    boolean flag=true;
                    for(int c=i-1,r=j+1;r<=j+4;r++,c++){
                        if(board[i][j]!=board[c][r]){
                            flag=false;
                            break;
                        }
                    }
                    if(flag){
                        return true;
                    }
                }
            }
        }
        return false;
    }

7.判断是否和局。

    public static boolean peace(){
        boolean pe=true;
        for(int i=0;i<board.length;i++){
            for(int j=0;j<board[i].length;j++){
                if(board[i][j]=="+"){
                    pe=false;
                }
            }
        }
        return pe;
    }

8.询问用户是否再来一局。

public static void isReplay(){
        while(true){
            System.out.print("Do you want to play again?Please enter true or false:");
            boolean re=scanner.nextBoolean();
            if(re){
                initBoard();
                printBoard();
                startGame();
            }else{
                System.out.println("Bye! Bye!");
                return;
            }
        }
    }

我所做的五子棋游戏可能还有一些地方不够好,希望大家提出一些好的建议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值