简单的命令行五子棋小程序
人机对战、电脑随机下棋
想写成人人对战,简单修改即可
运行截图如下:
package Gobang;
import java.time.temporal.IsoFields;
import java.util.Scanner;
public class Gobang {
//定义棋盘大小
private static int BORAD_SIZE=12;//棋盘格数
private String[][] board;//存放棋盘
char c1='○',c2='●';//黑白棋子
//判断是否五子连环(遍历每一个点的八个方向,是否有五子相连)
public boolean isFive()
{
String point;
int x,y,lenth;
for (int i = 0; i < BORAD_SIZE; i++)
{
for (int j = 0; j < BORAD_SIZE; j++)
{
if (!board[i][j].equals("+ "))
{
point=board[i][j];x=i;y=j;
for (x=i,y=j,lenth=1;lenth<6 && x>-1 && y>-1 && y<BORAD_SIZE && x<BORAD_SIZE;--x,--y,lenth++)
if (!board[x][y].equals(board[i][j]))
break;
if ( lenth==6)
return true;
//上
for (x=i,y=j,lenth=1;lenth<6 && x>-1 && y>-1 && y<BORAD_SIZE && x<BORAD_SIZE;--x,lenth++)
if (!board[x][y].equals(board[i][j]))
break;
if ( lenth==6)
return true;
//右上
for (x=i,y=j,lenth=1;lenth<6 && x>-1 && y>-1 && y<BORAD_SIZE && x<BORAD_SIZE;++y,--x,lenth++)
if (!board[x][y].equals(board[i][j]))
break;
if (lenth==6)
return true;
//右
for (x=i,y=j,lenth=1;lenth<6 && x>-1 && y>-1 && y<BORAD_SIZE && x<BORAD_SIZE;++y,lenth++)
if (!board[x][y].equals(board[i][j]))
break;
if (lenth==6)
return true;
//右下
for (x=i,y=j,lenth=1;lenth<6 && x>-1 && y>-1 && y<BORAD_SIZE && x<BORAD_SIZE;++y,++x,lenth++)
if (!board[x][y].equals(board[i][j]))
break;
if (lenth==6)
return true;
//下
for (x=i,y=j,lenth=1;lenth<6 && x>-1 && y>-1 && y<BORAD_SIZE && x<BORAD_SIZE;++x,lenth++)
if (!board[x][y].equals(board[i][j]))
break;
if (lenth==6)
return true;
//左下
for (x=i,y=j,lenth=1;lenth<6 && x>-1 && y>-1 && y<BORAD_SIZE && x<BORAD_SIZE;++x,--y,lenth++)
if (!board[x][y].equals(board[i][j]))
break;
if (lenth==6)
return true;
//左
for (x=i,y=j,lenth=1;lenth<6 && x>-1 && y>-1 && y<BORAD_SIZE && x<BORAD_SIZE;--y,lenth++)
if (!board[x][y].equals(board[i][j]))
break;
if (lenth==6)
return true;
}
}
}
return false;
}
//给棋盘增加一颗棋
public void setBoard(int user,int x,int y) {
if (user==0)
board[x][y]=""+c1+" ";
else
board[x][y]=""+c2+" ";
}
//初始化棋盘数组
public void initBoard() {
//初始化棋盘数组,
board=new String[BORAD_SIZE][BORAD_SIZE];
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
board[i][j]="+ ";
}
}
}
//输出棋盘
public void printBoard() {
for (int i = 0; i < board.length; i++) {
for (int j = 0; j < board[i].length; j++) {
System.out.print(board[i][j]);
}System.out.println();
}
}
public int isFill(int x,int y) {
if (board[x][y].equals("+ "))
{
return 0;
}
else
return 1;
}
public static void main(String[] args) {
Gobang gobang=new Gobang();//初始化
gobang.initBoard();//初始化棋盘
gobang.printBoard();//输出棋盘
int i=12;Scanner sc1=new Scanner(System.in);
boolean time=true;
while(time)
{
int x,y;
for(int j=0;;j++)
{
x=sc1.nextInt()-1 ;//读取玩家x,y
y=sc1.nextInt()-1 ;
if (x<0 || x>BORAD_SIZE-1 || y<0 || y>BORAD_SIZE-1 || gobang.isFill(x, y)==1 )//判断输入是否合法
{//包括坐标的准确性 和 该点是否已经有棋子
System.out.println("请重新输入");
continue;
}
else
break;
}
gobang.setBoard(1, x, y); // 添加玩家棋子
if (gobang.isFive()) //判断玩家是否5连
{
gobang.printBoard();
System.out.println("玩家 获胜");
break;
}
for(int j =0;;)//随机生成 x,y 并判断是否可以下棋
{
x=(int)( (BORAD_SIZE-1)*Math.random());
y=(int)( (BORAD_SIZE-1)*Math.random());
if (gobang.isFill(x, y)==1)
continue;
else
break;
}
gobang.setBoard(0, x, y);
if (gobang.isFive())
{
System.out.println("MAC 获胜");
gobang.printBoard();
break;
}
gobang.printBoard();
}
}
}