五子棋(命令行版本)

五子棋:命令行版本五子棋,用户输入当前棋子坐标,将棋子放入棋盘中。
解析
1、首先创建一个棋盘,建立二维数组,将数组的值赋予“+”;
2、打印棋盘;
3、创建一个下棋的函数,黑方棋子为“o”,白方棋子为“x”;黑白棋子交替,我们用奇数偶数分别代表黑方、白方;
4、判别输赢,对每个方向的棋子都要判断是否有5个连续一样的,有则游戏结束。
判断棋子
本应该判断8个方向的棋子,但是每5个棋子的头和尾可以调换,所以我们只需要找其4个方向就可以了(如下图所示)。
在这里插入图片描述

import java.util.*;
class Wuziqi{
    public static String[][] board=null;        //创建全局二维数组
    public static Scanner scanner=new Scanner(System.in);
    public static void main(String[] args){
       //创建棋盘
       initBoard();
       //打印出棋盘 
       printBoard();
       //开始下棋
       startGame();
    }
    public static void startGame(){
        int player=0;
        while(!isGameOver()){   //当游戏不结束时继续执行
            if(player%2==0){//黑方
                if(!xiaqi("o")){
                    continue;
                }
            }else{//白方
                if(!xiaqi("x")){
                    continue;
                }
            }
            player++;
        }
        System.out.println("Game over!");   
    }
    public static boolean isGameOver(){
        for(int i=0;i<board.length;i++){    //遍历棋盘
            for(int j=0;j<board.length;j++){
                if(!board[i][j].equals("+")){       //当前棋盘位置不是+号时
                    //向右  判断是否有相同五颗棋子
                    if(i<11){
                        boolean flag=true;
                        for(int deltx=1;deltx<=4;deltx++){
                            if(board[i][j]!=board[i][j+deltx]){  //对比向右连续5个格子
                                flag=false;
                                break;
                            }
                        }
                        if(flag){       //判断结果是break出来的还是走完循环的
                            return true;
                        }
                    }
                    //向下  判断是否有相同五颗棋子
                    if(j<11){
                        boolean flag=true;
                        for(int delty=1;delty<=4;delty++){
                            if(board[i][j]!=board[i+delty][j]){     //对比向下连续5个格子
                                flag=false;
                                break;
                            }
                        }
                        if(flag){       //判断结果是break出来的还是走完循环的
                            return true;
                        }
                    }
                    //向右上    判断是否有相同五颗棋子
                    if(i>3&&j<11){
                        boolean flag=true;
                        for(int delt=1;delt<=4;delt++){
                            if(board[i][j]!=board[i-delt][j+delt]){     //对比向右上连续5个格子
                                flag=false;
                                break;
                            }
                        }
                        if(flag){       //判断结果是break出来的还是走完循环的
                            return true;
                        }
                    }
                    //向右下    判断是否有相同五颗棋子
                    if(i<11&&j<11){
                        boolean flag=true;
                        for(int delt=1;delt<=4;delt++){
                            if(board[i][j]!=board[i+delt][j+delt]){     //对比向右下连续5个格子
                                flag=false;
                                break;
                            }
                        }
                        if(flag){       //判断结果是break出来的还是走完循环的
                            return true;
                        }
                    }
                }
            }
        }
        return false;
    }
    public static boolean xiaqi(String chess){      //玩家输入下棋的位置
        System.out.print(">>>请输入x坐标:");
        int x=scanner.nextInt()-1;
        System.out.print(">>>请输入y坐标:");
        int y=scanner.nextInt()-1;
        if(board[x][y].equals("+")){       //如果当前位置为+  则放入棋子
            board[x][y]=chess;
            printBoard();   //下棋后 刷新一下棋盘
            return true;
        }else{      //否则打印棋子已存在
            System.out.println("棋子已存在,请重新下棋!");
            return false;
        }
    }
    public static void initBoard(){     创建棋盘
        board=new String[15][15];
        for(int i=0;i<board.length;i++){    //遍历二维数组 将每一个位置赋予“+” 
            for(int j=0;j<board.length;j++){
                board[i][j]="+";
            }
        }       
    }
    public static void printBoard(){        //打印棋盘
        System.out.print("   ");    //在第一行数字前打印三个空格
        for(int i=1;i<=15;i++){
            System.out.printf("%-3d",i);    //格式化输出i
        }
        System.out.println();
        for(int i=0;i<board.length;i++){        //遍历二维数组 打印当前状态棋盘
            System.out.printf("%-3d",i+1); 
            for(int j=0;j<board.length;j++){
                System.out.print(board[i][j]+"  ");
            }
            System.out.println();
        }
    }
}
发布了46 篇原创文章 · 获赞 39 · 访问量 1452
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览