2048
这是一个基于Qt的2048版本,在此期间参考了逆天小学生的控制台版本。但是在处理合并时该博主的方法存在不足,本人对其进行了修改。同时在GitHub上看到一个很优质的2048Qt实现jvaelen/2048,也做了相关借鉴。
这个项目的UI并没有做得很精美,主要重心在交互游戏逻辑上。下面将对实现过程中一些主要的问题进行探讨。
整体结构:
- 将整个界面抽象为一个4*4的二维矩阵,矩阵存储当前格的数字,若为空则置0。
- 随机在空白区域产生一个随机数,有1/3的几率出现4,2/3的几率出现2.
- 根据按键输入,读入方向键。并调用合并函数进行合并。
接受键盘输入
这里使用的是Qt的void MainWindow::keyPressEvent(QKeyEvent *event)
函数。一开始很好奇传入参数event是在哪里调用的,后来发现其实这是一个监听函数,只要有输入就会创建一个QKeyEvent对象并传入相关信息。
我们可以在里面通过event->key();
获得输入的按键值,并进行相关的处理操作。这个函数通常是没有返回值的。
按方向键时的问题
由于UI中有按钮,所以在按方向键时会把焦点放在了按钮上面,这时需要将按钮的属性focusPolicy设置为NoFocus。
合并时的问题
其实合并的思路写的是有点丑的