2048Qt实现

本文介绍了使用Qt实现2048游戏的过程,重点讨论了整体结构设计、键盘输入处理、合并逻辑的优化以及游戏结束判断。在处理合并时,解决了连续数字合并不正确的问题,并确保了空格的正确处理。此外,还分享了如何避免方向键导致的焦点问题。项目代码已上传至GitHub。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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。

合并时的问题

其实合并的思路写的是有点丑的,主要解决一个问题,若在一行中出现2 2 2 2 那么最终的合并结果会是4 4, 而不是8, 这意味着合并只能是“一步”的。同时还需要处理空白格的问题。

实现的思路是先把一行

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值