项目概述
本项目是cs61b课程开课以来的第一个项目,游戏本身非常简单。它在 4×4 的方格网格上进行,每个方格可以是空的,也可以包含一个带有整数(大于或等于 2 的 2 的幂)的图块。在第一步之前,应用程序会将一个包含 2 或 4 的图块添加到最初为空的棋盘上的随机方格中。选择 2 或 4 是随机的,选择 2 的概率为 75%,选择 4 的概率为 25%。
然后玩家通过箭头键选择一个方向来倾斜棋盘:北、南、东或西。所有方块都朝那个方向滑动,直到运动方向上没有空隙(一开始可能没有)。一个方块可能会与另一个方块合并,从而为玩家赢得积分。
在这个项目中,您将构建这款游戏的核心逻辑。也就是说,我们已经整合了所有 GUI 代码、处理按键和大量其他框架。 您的工作将是完成最重要和最有趣的部分。
具体来说,您将填写 Model.java 文件中的 4 个方法,这些方法控制用户按下某些按键后发生的情况。
三个函数(易)
要求我们实现三个测试函数emptySpaceExists(Board b)、maxTileExists(Board b)、atLeastOneMoveExists(Board b),难度不大,跟随作者的思路就能够按部就班地写下来,用时1.5h
其中第三个函数的实现要求判断上下左右能否移动,我使用的是二维数组来存(之前打竞赛有些基础),更加简洁易懂一些。
/** Returns true if at least one space on the Board is empty.
* Empty spaces are stored as null.
* */
public static boolean emptySpaceExists(Board b) {
// TODO: Fill in this function.
boolean judge = false;
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
if(b.tile(i,j) == null){
judge = true;
break;
}
}
}
return judge;
}
/**
* Returns true if any tile is equal to the maximum valid value.
* Maximum valid value is given by MAX_PIECE. Note that
* given a Tile object t, we get its value with t.value().
*/
public static boolean maxTileExists(Board b) {
// TODO: Fill in this function.
boolean judge = false;
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
if(b.tile(i,j) != null){
if(b.tile(i,j).value() == MAX_P