1.用二维数组存储五子棋棋盘
2.在控制台通过Scanner输入黑白棋坐标(例如:1,2 2,1格式 表示二维数组坐标),使用实心五角星和空心五角星表示黑白棋子.
如下图:
输入后重新输出棋盘如下图:
白棋输入后如下图
黑白棋依次重复输入下棋
3.判断棋子是否越界,棋子是否重复,判断输赢
接下来是对每个步骤的代码实现(每一步的功能我都将以一个方法来实现)
首先是前提框架的一个代码实现:
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 boolean flag=true;//true黑棋下子,flase白棋下子
1.棋盘的二维数组实现代码
//就是将+和数字连接起来
public static void init(){
int i,j;
for( i=0;i<qp.length;i++){
for( j=0;j<qp[i].length;j++){
qp[i][j]=line;
if(j==qp[i].length-1){
qp[i][j]=num[i];
}
if(i==qp.length-1){
qp[i][j]=num[j];
}
}
}
}
//在将棋盘打印
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();
}
}
}
2.输入位置
首先是黑棋先下子,之后判断位置是否合法,合法将对应的位置换为黑子,最后判断输赢
白棋也是这个过程(用一个flag来判断是黑棋还是白棋下棋)
public static void play(){
while(true){
if(flag){
System.out.println("欢迎来到五子棋");
System.out.println("黑子下棋");
System.out.println("输入行:");
int r=scanner.nextInt()-1;
System.out.println("输入列:");
int c=scanner.nextInt()-1;
//判断是否位置是否合法
boolean result=check(r,c);
if (result){
qp[r][c]=black;
print();
//判断输赢
boolean result1=isWin(black,r,c);
if(result1==true){
System.out.println("黑棋获胜!");
break;
}
flag=false;
}
else{
System.out.println("坐标越界或重复!");
}
}
else{
System.out.println("白子下棋");
System.out.println("输入行:");
int r=scanner.nextInt()-1;
System.out.println("输入列:");
int c=scanner.nextInt()-1;
//判断是否位置是否合法
boolean result=check(r,c);
if(result){
qp[r][c]=white;
print();
//判断输赢
boolean result1=isWin(white,r,c);
if(result1==true){
System.out.println("白棋获胜!");
break;
}
flag=true;
}
else{
System.out.println("坐标越界或重复!");
}
}
}
}
3.判断位置是否合法
public static boolean check(int r,int c){
if(r>qp.length || r<0 || c<0 && c>qp[1].length)//判断位置是否超出棋盘范围
{
return false;
}
else if(qp[r][c]!=line)//判断在这个位置是否已经有棋子
{
return false;
}
else{
return true;
}
}
4.判断输赢
以落子为中心,在其横轴方向,纵轴方向,左上到右下,右上到左下,四个方向判断是否有五子连在一起
public static boolean isWin(String color,int r,int c){
//横向判断
int count=1;
for(int i=c-1;i>=0&&qp[r][i]==color;i--){
count++;
}
for(int i=c+1;i<qp[1].length&&qp[r][i]==color;i++){
count++;
}
if (count >= 5){
return true;
}
//纵向判断
int count2=1;
for(int j=r-1;j>=0&&qp[j][c]==color;j--){
count2++;
}
for(int j=r+1;j< qp.length&&qp[j][c]==color;j++){
count2++;
}
if(count2>=5){
return true;
}
//左上到右下
int count3=1;
for(int i=r-1,j=c-1;i>0&&j>0&&qp[i][j]==color;i--,j--){
count3++;
}
for(int i=r+1,j=c+1;i< qp.length&&j<qp[1].length&&qp[i][j]==color;i++,j++){
count3++;
}
if(count3>=5){
return true;
}
//右上到左下
int count4=1;
for (int i = r-1,j=c+1; i >0&&j<qp[1].length&&qp[i][j]==color ; i--,j++) {
count4++;
}
for (int i = r+1,j=c-1; i < qp.length&&j>0&&qp[i][j]==color ; i++,j--) {
count4++;
}
if(count4>=5){
return true;
}
return false;
}
最后将代码整合
public static void startGame(){
init();//初始化棋盘
print();//打印
play();//开始游戏
}
功能实现的代码都在一个file里,游戏入口在另一个file,
public class StrWZQ {
public static void main(String[] args) {
WZQ.startGame();//游戏入口
}
}
代码不理解,不清楚,可以私信作者,如发现代码有错误请广大网友私信哦!!!