CS61B学习笔记_Project0

发布时间 2023-03-22 22:18:41作者: 想养狗想得发疯

1 Game Rules

1. 4x4网格,每个位置为空或者填有带有一个2的正整数次幂数字的贴图;

2. 第一次移动前,随机选择一个空位填入带有数字2或4的贴图,其中填充2的概率为75%,填充4的概率为25%;

3.用户可以通过方向键选择一个方向(上下左右)来倾斜(tilt)该网格,所有的贴图都在这个方向上滑动,直到在运动方向上没有任何空间(可能一开始就没有)。一个贴图可以与另一个贴图合并(merge),从而获得玩家点数。合并的具体规则如下:

    △ 两个相同的贴图合并成一个,数值变为原值的2倍;

    △ 本次tilt时合并得到的结果不会再发生合并,例如[x,2,2,4]向左时变为[4,4,x,x],而不是继续继续变为[8,x,x,x];

    △ 当运动方向上三个相邻的贴图有相同的值时,在运动方向上前面的两个贴图合并。eg: [x,2,2,2]向左变为[4,2,x,x]而非[2,4,x,x]; 当有四个相邻相同贴图时同理,前两个合并,后两个合并。

    △ 使用Score记录分数,每次移动后更新分数,每次合并记一分。

    △ 当当前玩家没有可用的移动(没有倾斜可以改变棋盘),或者移动形成包含2048的贴图时,游戏结束。代码将负责检测游戏何时结束。

    △ “最大分数”是用户在该游戏回合中所获得的最大分数。直到游戏结束它才会更新,所以这就是为什么在整个动画GIF示例中它保持为0的原因。

 

2. 实验操作

1.实验中遇到了game2048中文件均为橙色J图标,无法识别的问题

解决方案参考了 https://blog.csdn.net/qq_40492436/article/details/104871704

2. TestMaxTileExists刚开始测试5/8没有通过,后来发现是因为tile为null时无法取value(),修改后测试全部通过