JAVA实现五子棋小游戏,简陋版本

JAVA实现简单五子棋小游戏,简陋版本

源代码

package com.hhb.chapter04五子棋;

import java.io.BufferedReader;
import java.io.InputStreamReader;

//五子棋简单游戏
public class Gobang {
    
    

    public static final String WHITE_CHESS="○";
    public static final String BLACK_CHESS="●";
    //棋盘的大小
    private static int BOARD_SIZE = 15;
    //二维数组充当棋盘
    private String[][] board;

    //初始化棋盘数组
    public void initBoard()
    {
    
    
        board = new String[BOARD_SIZE][BOARD_SIZE];

        for (int i = 0; i < BOARD_SIZE; i++) {
    
    
            for (int j = 0; j < BOARD_SIZE; j++) {
    
    
                board[i][j]="+";
            }
        }
    }

    //绘制输出棋盘
    public void printBoard()
    {
    
    
        for (int i = 0; i < BOARD_SIZE; i++) {
    
    
            for (int j = 0; j < BOARD_SIZE; j++) {
    
    

                System.out.print(board[i][j]);
                System.out.print("  ");
            }

            System.out.print("\n");
        }
    }

    //判断是否超出棋盘范围
    public void isOutRange(int x,int y) throws Exception
    {
    
    
        if(x>15||y>15||x<0||y<0)
        {
    
    
            throw new Exception();
        }
    }

    //判断是否重复下棋
    public void isRepetition(int x,int y) throws Exception
    {
    
    
        if(this.board[x-1][y-1]!="+")
        {
    
    
            throw new Exception();
        }
    }


    //判断游戏是否结束
    public boolean isGameOver(int x,int y)
    {
    
    
        int x1=x-1;
        int y1=y-1;
        boolean[] flag={
    
    false,false,false,false,false};//建立flag数组

        try{
    
    
            //从该下棋位置向上判断是否五子连珠
            for (int i = 0; i < 5; i++) {
    
    
                if(x1-i<0)
                {
    
    
                    continue;
                }
                if(board[x1-i][y1].equals(board[x1][y1]))
                {
    
    
                    flag[i]=true;
                }
            }
            if(flag[0]&&flag[1]&&flag[2]&&flag[3]&&flag[4])
            {
    
    
                return true;
            }
            //从该下棋位置向下判断是否五子连珠
            for (int i = 0; i < 5; i++) {
    
    
                if(x1+i>14)
                {
    
    
                    continue;
                }
                if(board[x1+i][y1].equals(board[x1][y1]))
                {
    
    
                    flag[i]=true;
                }
            }
            if(flag[0]&&flag[1]&&flag[2]&&flag[3]&&flag[4])
            {
    
    
                return true;
            }
            //从该下棋位置向左判断是否五子连珠
            for (int i = 0; i < 5; i++) {
    
    
                if(y1-i<0)
                {
    
    
                    continue;
                }
                if(board[x1][y1-i].equals(board[x1][y1]))
                {
    
    
                    flag[i]=true;
                }
            }
            if(flag[0]&&flag[1]&&flag[2]&&flag[3]&&flag[4])
            {
    
    
                return true;
            }
            //从该下棋位置向右判断是否五子连珠
            for (int i = 0; i < 5; i++) {
    
    
                if(y1+i>14)
                {
    
    
                    continue;
                }
                if(board[x1][y1+i].equals(board[x1][y1]))
                {
    
    
                    flag[i]=true;
                }
            }
            if(flag[0]&&flag[1]&&flag[2]&&flag[3]&&flag[4])
            {
    
    
                return true;
            }
            //从该下棋位置向左上方判断是否五子连珠
            for (int i = 0; i < 5; i++) {
    
    
                if(x1-i<0||y1-i<0)
                {
    
    
                    continue;
                }
                if (board[x1-i][y1-i].equals(board[x1][y1]))
                {
    
    
                    flag[i]=true;
                }
            }
            if(flag[0]&&flag[1]&&flag[2]&&flag[3]&&flag[4])
            {
    
    
                return true;
            }
            //从该下棋位置向右上方判断是否五子连珠
            for (int i = 0; i < 5; i++) {
    
    
                if(x1-i<0||y1+i>14)
                {
    
    
                    continue;
                }
                if(board[x1-i][y1+i].equals(board[x1][y1]))
                {
    
    
                    flag[i]=true;
                }
            }
            if(flag[0]&&flag[1]&&flag[2]&&flag[3]&&flag[4])
            {
    
    
                return true;
            }
            //从该下棋位置向左下方判断是否五子连珠
            for (int i = 0; i < 5; i++) {
    
    
                if(x1+i>14||y1-i<0)
                {
    
    
                    continue;
                }
                if(board[x1+i][y1-i].equals(board[x1][y1]))
                {
    
    
                    flag[i]=true;
                }
            }
            if(flag[0]&&flag[1]&&flag[2]&&flag[3]&&flag[4])
            {
    
    
                return true;
            }
            //从该下棋位置向右下方判断是否五子连珠
            for (int i = 0; i < 5; i++) {
    
    
                if(x1+i>14||y1+i>14){
    
    
                    continue;
                }
                if(board[x1+i][y1+i].equals(board[x1][y1]))
                {
    
    
                    flag[i]=true;
                }
            }
            if(flag[0]&&flag[1]&&flag[2]&&flag[3]&&flag[4])
            {
    
    
                return true;
            }
        }catch (Exception e)
        {
    
    
            return false;
        }
        return false;
    }


    public static void main(String[] args) throws Exception
    {
    
    
        int play=1; //判断黑方或者白方下棋
                    //play=1,黑方下棋
                    //play=-1,白方下棋
        int xPos=0;   //旗子的x坐标
        int yPos=0;   //旗子的y坐标

        Gobang gb = new Gobang();
        gb.initBoard();
        gb.printBoard();

        //获取键盘输入
        BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
        String inputStr=null;

        //判断黑方或者白方下棋
        if(play>0)
        {
    
    
            System.out.println(">>>黑方下棋,请输入下棋的坐标,格式为x,y:");
        }else{
    
    
            System.out.println(">>>白方下棋,请输入下棋的坐标,格式为x,y:");
        }

        while ((inputStr=br.readLine())!=null)
        {
    
    
            //将用户输入的字符串以逗号作为分隔符
            try{
    
    
                String[] posString = inputStr.split(",");
                //将两个字符串转换成用户下棋的坐标
                xPos = Integer.parseInt(posString[0]);
                yPos = Integer.parseInt(posString[1]);

                //判断是否超出棋盘范围
                gb.isOutRange(xPos,yPos);

                //判断是否重复下棋
                gb.isRepetition(xPos,yPos);

                //把对应的数组元素赋值为⭕或●
                if(play>0)
                {
    
    
                    gb.board[xPos-1][yPos-1]=BLACK_CHESS;
                }else{
    
    
                    gb.board[xPos-1][yPos-1]=WHITE_CHESS;
                }
                //判断游戏是否结束
                if(gb.isGameOver(xPos,yPos))//如果游戏结束
                {
    
    
                    gb.printBoard();
                    break;
                }
                //对方准备下棋
                play=-play;


            }catch (Exception e){
    
    
                System.out.println("输入的坐标不符合标准,重新输入!");
            }

            gb.printBoard();

            //判断黑方或者白方下棋
            if(play>0)
            {
    
    
                System.out.println(">>>黑方下棋,请输入下棋的坐标,格式为x,y:");
            }else{
    
    
                System.out.println(">>>白方下棋,请输入下棋的坐标,格式为x,y:");
            }
        }
        if (play>0)
        {
    
    
            System.out.println("黑方获胜!");
        }else {
    
    
            System.out.println("白方获胜!");
        }
    }
}


运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/hhb442/article/details/108015804
今日推荐