前面我们学习了一维数组和二维数组,我们通过二维数组来制作一个游戏,五子棋。
分析:
棋盘:
首先五子棋需要一个棋盘,我们得想办法首先输出一个棋盘,我们通过分割发现,棋盘都是由很多个加号组成的,所以我们可以定义一个二维数组,然后把二维数组的每一个元素赋值为+号,通过输出我们发现这个加号效果其实并不好,所以我们采用输入法中的制表符中的加号。
以搜狗输入法为例:
我们通过输出发现其实效果还是不是太好,这时我们就需要调整eclipse中的字体,改为宋体:
我们首先点击eclipse上方的window,点击Preferences
进去之后搜索font
点击Basic,打开之后翻到最下面,点击Text Font
打开时候搜索宋体,点击确定就可以了。
这时我们输出的棋盘就正常了。
下棋:
我们可以利用二维数组,因为二维数组的行和列刚好可以代表棋子的位置,所以我们每一次下棋的时候就输入行坐标和列坐标,并使这个坐标上的加号变为棋子,然后下棋的时候我们是一次白子,一次黑子,我们就可以设置一个Boolean flag,当flag为true时,就是白子下,反之就是黑子下,每下棋一次,我们就输出棋盘一次,这样就能达到五子棋。
总代码如下:
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
//长度
int len = 20;
//棋盘容器
String[][] chess= new String[len][len];
//坐标的容器
String[] nums = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖","⒗","⒘","⒙","⒚","⒛"};
//棋盘符号
String add = "╋";
String black = "■";
String white = "○";
//初始化棋盘数据
for (int i = 0; i < chess.length; i++) {//i - 表示行数
for (int j = 0; j < chess[i].length; j++) {//j - 表示列数
if(j == len-1){//每一行的最后一列,设置行数的坐标
chess[i][j] = nums[i];
}else if(i == len-1){//最后一行,设置列数的坐标
chess[i][j] = nums[j];
}else{
chess[i][j] = add;
}
}
}
//打印棋盘
for (String[] ss : chess) {
for (String e : ss) {
System.out.print(e);
}
System.out.println();
}
//循环的落子
Scanner scan = new Scanner(System.in);
boolean flag = true;//true-黑子 false-白子
while(true){
//输入坐标
System.out.println("请" + ((flag)?"黑":"白") +"子输入坐标:");
int x = scan.nextInt()-1;
int y = scan.nextInt()-1;
//判断坐标是否超出棋盘范围
if(x<0 || x>len-2 || y<0 || y>len-2){
System.out.println("坐标超出棋盘范围,请重新输入...");
continue;
}
//判断坐标上是否有棋子
if(!chess[x][y].equals(add)){
System.out.println("坐标上已有棋子,请重新输入...");
continue;
}
//落子
chess[x][y] = (flag)?black:white;
//置反
flag = !flag;
//打印棋盘
for (String[] ss : chess) {
for (String e : ss) {
System.out.print(e);
}
System.out.println();
}
}
}
}