目录
第1关:华容道小程序之模拟华容道棋盘
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 中实现模拟华容道棋盘的功能,具体要求如下:
-
在 ChessBoard.java 文件中定义了一个 ChessBoard 棋盘类,该类实现初始化棋盘的属性和输出当前棋盘状态的功能;
-
首先定义棋盘的长为 5、宽为 4(不可变);
-
定义一个二维数组来表示棋盘棋子的初始状态和位置,该数组内容如下:
"马","黄","甲","乙"
"超","忠","丙","丁"
"赵","张","关","羽"
"云","飞","曹","操"
" "," ","曹","操"
引号中没有汉字的是两个空格,用来表示该位置是空的。
-
之后我们需要重写 toString 方法,用来打印当前棋盘的状态,把二维数组的内容按以下格式输出:
|马黄甲乙|
|超忠丙丁|
|赵张关羽|
|云飞曹操|
| 曹操|
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。
测试输入:无
预期输出:
|马黄甲乙|
|超忠丙丁|
|赵张关羽|
|云飞曹操|
| 曹操|
代码实现:
public class ChessBoard {
// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
// 定义棋盘的固有属性长宽
final int length=5;
final int wide=4;
// 定义二维数组表示当前棋盘的状态
String[][] tate={
{"马","黄","甲","乙"},
{"超","忠","丙","丁"},
{"赵","张","关","羽"},
{"云","飞","曹","操"},
{" "," ","曹","操"},
};
// 重写 toSting 方法来描述打应当前棋盘的状态
@Override
public String toString(){
for(int i=0;i<length;i++){
System.out.print("|");
for(int j=0;j<wide;j++){
System.out.print(tate[i][j]);
}
System.out.println("|");
}
return "";
}
/********** End **********/
}
第2关:华容道小程序之模拟曹操
任务描述
本关任务:实现模拟华容道曹操移动的功能。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 中实现模拟华容道曹操移动的功能,具体要求如下:
-
首先在 Chess.java 中定义一个 Chess 的公开抽象类,该类用来表示华容道中的棋子;
-
该类具有棋子都有的四个属性,分别为:棋子的长度、棋子的宽度、棋子在二维数组中的横向位置、纵向位置(例如马超:(0,0),曹操(2,3));
-
该类有一个抽象方法 move(ChessBoard cb, String direction),用来移动棋子,携带两个参数,一个是棋盘、一个是移动的方向;
-
在 King.java 类中定义了一个 King 类,用来定义曹操的属性和方法;
-
该类继承 Chess 类,定义一个受保护的有参构造方法,传入两个参数,分别为曹操在二维数组中的横向位置、纵向位置,在该方法中初始化曹操的长度为 2、宽度为 2,将曹操的横向位置、纵向位置设置为传来的值;
-
重写 Chess 类的抽象方法 move,实现移动曹操的功能;
-
首先定义一个状态值,用来表示曹操是否可以往该方向移动;
-
如果 direction 的值为“上”,则判断曹操在二维数组中的正上方是否有两个位置都没有被其他棋子占用(也就是正上方的两个位置是空的),如果可以向上移动,则设置该状态值为 true,将曹操的区域向上移动,曹操原先空出的位置同样设置为两个空格,用来表示该位置是空的,最后返回该状态值;
-
如果不能移动,返回 false;
-
同理,按照上面的做法判断 direction 的值为“下/左/右”的情况。
注意:二维数组的变量名为 tate。
测试说明
平台将使用测试集运行你编写的程序代码&