五子棋要求如下
1.使用二维数组存储五子棋棋盘
如下图
2.在控制台通过Scanner输入黑白棋坐标(例如:1,2 2,1格式 表示二维数组坐标),使用实心五角星和空心五角星表示黑白棋子.
如下图:
白棋输入后如下图
黑白棋依次重复输入下棋
3.判断棋子是否越界,棋子是否重复,判断输赢
解题思路
1.打印棋盘
利用二维数组,和for循环,将每个位置初始化,到15行和列就打印数字,然后打印棋盘
2.黑、白子下棋
创建两个方法,一个控制白子下棋,一个控制黑子下棋。创建横纵,坐标,将黑白棋打印在棋盘上
3.判断是否重复和超界
判断所下黑白棋子是否已经是黑色和白色进行判断,
判断所下黑白棋子横纵坐标是否超过15个位置
4.判断输赢
第一种方法:判断每个位置是否有相邻的5个同样颜色的棋子。
第二种方法:判断所下棋子位置是否有相邻的5个同色棋子。
代码如下:
import java.util.Scanner;
public class demo2 {
//在全局定义黑白棋子和棋盘
static String white = "☆";
static String black = "★";
static String[][] qp = new String[15][15];
static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
static String line = "十";
static Scanner scanner=new Scanner(System.in);
//定义下棋所要用的行和列
static int i,j;
//用来判断黑子下棋或白子下棋
static int flag=0;
/**
* 开始下棋
* */
public static void start() {
//初始化棋盘
inti();
//开始打印棋盘
print();
//判断是否胜利如果没有胜利则继续动子;
while(true)
{
if(jugewin()==1)
{
System.out.println("白子赢了");
start();
return;
}
if(jugewin()==0)
{
System.out.println("黑子赢了");
start();
return;
}
if(flag==0)
{
setBlack();
}
else if(flag==1)
{
setWhite();
}
}
}
/**
* 初始化棋盘
* */
public static void inti() {
for (int i=0;i< qp.length;i++)
{
for (int j=0;j< qp[i].length;j++)
{
if(j== qp.length-1)
{
qp[i][j]=num[i];
}
else if(i== qp.length-1)
{
qp[i][j]=num[j];
}
else {
qp[i][j]=line;
}
}
}
}
/**
* 打印棋盘
* */
public static void print() {
for (int i=0;i< qp.length;i++)
{
for (int j=0;j< qp[i].length;j++)
{
System.out.print(qp[i][j]);
}
System.out.println();
}
}
/**
* 黑子开始下棋
* */
public static void setBlack()
{
System.out.println("请黑子下");
//黑子的行和列
i = scanner.nextInt();
j = scanner.nextInt();
//黑棋限制边界
if(i>=15||j>=15)
{
setBlack();
return;
}
//默认该白子下棋
flag=1;
//判断是否重复,重复的话黑子重新下棋
if(jugeRepeat()==true)
{
flag=0;
}
qp[i-1][j-1] =black;
//打印棋盘
print();
}
/**
* 白子开始下棋
* */
public static void setWhite()
{
System.out.println("请白子下");
//白子的行和列
i = scanner.nextInt();
j = scanner.nextInt();
//白子是否超出界限
if(i>=15||j>=15)
{
setWhite();
return;
}
flag=0;
//判断是否重复
if(jugeRepeat()==true)
{
flag=1;
}
qp[i-1][j-1]=white;
//打印棋盘
print();
}
/**
* 判断是否重复的方法
* */
public static boolean jugeRepeat() {
//如果要下的棋子所在的位置已经是黑子或白子
if (qp[i-1][j-1] == white || qp[i-1][j-1] == black) {
System.out.println("请重下");
return true;
}
return false;
}
/**
* 判断是否胜利
* */
public static int jugewin()
{
//判断每个位置是否达到胜利条件
for (int i=0;i< qp.length;i++)
{
for (int j=0;j< qp[i].length;j++)
{
if (qp[i][j]==black&&qp[i+1][j]==black&&qp[i+2][j]==black&&qp[i+3][j]==black&&qp[i+4][j]==black)
{
//黑子胜利代表0
return 0;
}
else if(qp[i][j]==black&&qp[i][j+1]==black&&qp[i][j+2]==black&&qp[i][j+3]==black&&qp[i][j+4]==black)
{
return 0;
}
else if(qp[i][j]==black&&qp[i+1][j+1]==black&&qp[i+2][j+2]==black&&qp[i+3][j+3]==black&&qp[i+4][j+4]==black)
{
return 0;
}
else if(qp[i][j]==white&&qp[i+1][j]==white&&qp[i+2][j]==white&&qp[i+3][j]==white&&qp[i+4][j]==white)
{
//白子胜利代表1;
return 1;
}
else if(qp[i][j]==white&&qp[i][j+1]==white&&qp[i][j+2]==white&&qp[i][j+3]==white&&qp[i][j+4]==white)
{
return 1;
}
else if(qp[i][j]==white&&qp[i+1][j+1]==white&&qp[i+2][j+2]==white&&qp[i+3][j+3]==white&&qp[i+4][j+4]==white)
{
return 1;
}
}
}
return 3;
}
public static void main(String[] args) {
start();
}
}
测试结果:
1.黑子下
2.白子下
3.黑子赢
4.白子重复
5. 白子超界