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("白方获胜!");
}
}
}
运行结果