Skip to content

wang-jiahao/2048

Repository files navigation

2048 Games

编译环境

我使用的Qt编译套件:Desktop Qt 6.5.8 MinGW 64-bit(只要是Qt6框架即可)

Qt Creator版本:Qt Creator 15.0.0 (Enterprise)

注:Qt5框架在播放背景音乐时可能出现问题,因为Qt5中的setMedia在Qt6中改成了setSource

运行步骤

exe运行

将build/Desktop_Qt_6_5_8_MinGW_64_bit-Release/release文件夹中的exe文件下载下来,直接双击2048.exe文件运行即可(需要Qt6框架)

若没有qt框架,可以将整个release文件夹下载下来,在文件夹里面运行exe文件。

注:可能出现的2个问题:
1.弹窗显示找不到Qt6Core.dll。要么是Qt框架太老,要么是没有将Qt编译器加载到环境变量
2.一直在加载。正常情况,因为wav音频文件比较大,并且打包了所有依赖环境,耐心等待即可🥹

Qt编译运行

  1. 克隆到本地:
git clone [email protected]:wang-jiahao/2048.git
  1. 删除2048.pro.user文件与build文件夹。

  2. Qt Creator打开项目,选择文件2048.pro,然后按默认步骤build即可。

  3. 打开main.cpp,运行即可。(build时间可能较长,因为wav音频文件比较大)

选题原因

2048是一款很火的小游戏。2048在4×4的网格上进行。玩家可以使用上、下、左、右四个方向键移动所有方块。游戏开始时,网格上会出现两个数值为2或4的方块。每次移动后,另一个数值为2或4的新方块会随机出现在空方格上。方块会沿着指定的方向滑动,直到被其它方块或网格边缘阻挡。如果两个相同数值的方块碰撞,它们将合并成一个方块,其数值等于两个方块的数值之和。玩家获取胜利的条件是获得数值为2048的方块。当玩家没有合法的移动方法时,即出现了网格上没有空方格,且相邻方块的数值均不相同的情况,游戏就直接结束。

因为最近在自学21spring的CS61B,其中作业的proj0就是2048,而我前不久刚好用Java写了这个项目,看到课程的项目要求,索性就自学Qt,用C++重新写了功能更丰富的2048,增加了音乐,新游戏等功能。

开发流程

  1. 先参考助教建议视频自学qt。
  2. 下载最新版本的Qt Creator及其套件。
  3. 创建通过qmake管理的项目。
  4. 先在Qt的设计页面中增加对象,调整参数,得到美观的ui界面。
  5. 再在mainwindow.h文件中定义需要实现的函数等。
  6. 再在mainwindow.cpp文件中具体实现头文件中的函数,不会实现的功能通过google/StackOverflow/qt帮助文档/ChatGPT解决。
  7. 最后再main.cpp中调用。
  8. 通过得到的exe文件不断发现问题(比如音乐,重新开始,回退功能等),不断重复5-7步骤。

项目预期

  1. 游戏流畅
  2. 玩家与单位交互流畅
  3. 用户交互界面完整美观
  4. 设计交互方式
  5. 用户操作反馈明确
  6. 实现存档功能
  7. 设计数值等机制
  8. git提交规范
  9. 体现C++面向对象特性
  10. 多文件编程
  11. 难度适中,游玩体验好
  12. 游戏界面设计美观
  13. 有与游戏内容相符的背景音乐

最终完成度及得分点

基础功能(65分)

游戏逻辑(20分)

  • 游戏场景(10分):游戏流畅,无卡顿,提供了try again与new game2个选项,满分
  • 角色或单位(10分):该游戏中的单位为包含数字的方块,最初为2个,最高有16个,满分

交互界面(25分)

  • 完整界面(15分):用户交互界面(ui)完整美观,按钮提示明确,满分
  • 交互方式(5分):设计了2种键盘交互方式,通过WSAD或↑↓←→控制方块的移动,满分
  • 操作反馈(5分):用户操作反馈明确,按下方向键后画面变化流畅,满分

其他功能(20分)

  • 存档功能(10分):关闭游戏后再次打开从存档点可以继续游戏(如果是第一次打开,则为新游戏);将存档保存在build/debug/savegame.json文件中,可以直接修改实现进度调整。满分
  • 数值或升级机制(10分):设计分数这一数值机制,每次合并得到更大的数字,分数就会加上该数字,5分

代码管理(20分)

  • git提交规范(10分):最开始初始化项目,之后不断优化,提交十余次,且提交合理,满分
  • 体现C++面向对象特性(5分):代码封装了许多不同的类,如QApplication,MainWindow等,其中MainWindow继承自QMainWindow。满分
  • 多文件编程(5分):2048.pro文件定义如何编译、链接以及生成最终的可执行文件或库,main.cpp文件用于管理主线程,mainwindow.h用于定义主窗口(MainWindow)的功能(包括事件处理,界面更新等),mainwindow.cpp用于实现主窗口的功能,resources.qrc用于管理资源文件(如音乐等)。代码注释清晰、变量名表意明确。满分

选做内容(15分)

  • 玩家游戏体验(5分):难度适中,设计的键盘交互方式符合操作逻辑(如W或↑代表上移等),游玩体验好,满分
  • 酷炫UI(5分):游戏界面设计美观,用户每次按下方向键都有方块移动的动态效果,界面元素合理,满分
  • 背景音乐(5分):使用C418的Subwoofer Lullaby(minecraft的背景音乐之一),与游戏内容相符,让人怀旧,涤荡心灵,满分

Releases

No releases published

Packages

No packages published