今天1024哇,正好这会不想看书,写一篇文章表示一下,其实这篇文章早就该写了。9月初做的课程设计实验,过了两周后老师才有空检查,国庆期间写了1w多字实验报告,到今天写在博客上。时间线拉的有点太长了,不应该总是看着过去,应该向前看哇!
因为自己确实想通过这段时间学一学怎么做UI,所以选择了这个题目,经大佬推荐,我选择了Qt来编写这个程序。所以我自己完全是从零开始学习,边学边做的。编写程序前后大概花了10天时间叭,前两天各种找入门资料,开1.5倍速看教学视频。然后花了3天时间编写核心代码,最后几天时间在扩展游戏的功能,优化界面。
学习不难,难在开始,更难在深入。
一、引言
这篇文章以展示为主吧,会放代码链接(CSDN上),所以有需要的小伙伴可以去下载源代码,直接读程序即可。这里就不具体介绍如何如何实现的了,界面都是使用的Qt的各种类去实现的,界面以外的就比较简单了。想学习Qt的话最好跟着教程学,视频文字都可以。先去了解Qt的特点,框架,用法和机制,等需要具体设计时,再去针对性地查找资料,去详细地了解。
二、界面展示
那就直接放图吧,这种有UI的程序,直接看图应该就能了解大致的功能了。
1.界面
2.棋盘界面点击按钮的对话框
3.消息对话框
三、功能介绍
直接抄实验报告。
1.基本功能
本游戏设置有图形化交互界面,游戏模式为人人对战。游戏开始后,会显示一个带有行列号的19×19的棋盘,玩家根据执棋方(下一步由哪一方走)的提示知晓该轮到哪一方下棋,玩家可通过鼠标来控制棋子在棋盘中的摆放位置。
落子后,黑棋或白棋会显示在棋盘上。当有至少五个相同颜色的棋子相连成线时,游戏会弹框显示哪方获胜。当棋盘已下满却未能分出胜负,会弹框显示游戏和局。
2.计时功能
计时双方下棋时的等待时间,并在用户界面的右上角显示。玩家1落子后,在玩家2落子前会记录玩家2所用时间。
3.重新开始
清空棋盘,重置执棋方,重置双方时间。
4.键盘输入
除了鼠标点击下棋,玩家也可以通过键盘输入所下棋子在棋盘中的横纵坐标来确定棋子在棋盘中的摆放位置。根据棋盘行列号,依次输入落子位置的x和y坐标。
5.悔棋
玩家落子后,可悔棋清除已下棋子,以重新选择落子位置。棋盘无子时悔棋无效,且玩家只能悔棋到上一步。
6.存档读档
游戏进行中,可存档,保存当前棋盘信息,执棋方和双方的用时时间。在主界面中可以选择读档开始游戏,游戏会还原最近一次的存档情况,包括棋盘信息,执棋方和双方的用时时间。
7.游戏设置
a.棋盘大小默认为19×19,玩家可选择棋盘大小,游戏根据用户输入的数字可以重新绘制新的规模的棋盘。b.游戏默认先手执白棋,玩家可选择先手执白棋还是黑棋。c.游戏默认背景为无背景,玩家可选择喜欢的背景来开始游戏。
游戏设置完成,会清空棋盘上的棋子,重置双方用时,按照所设置的棋盘大小,执棋方和背景图片重新显示游戏界面。
8.声音功能
落子时会播放“啪”的声音,玩家胜利时会播放胜利音频,和局时会播放失败音频。
四、程序不足
界面跳转是非模态的,即打开新窗口后,仍然可以操作原窗口,会影响程序性能。
界面设计是代码和ui结合的,有点混乱。
调整棋盘大小的设计不太合理,而且调整后的显示不合理。
信号和槽函数,我只会用connect的lambda表达式,比较局限。
读档界面,虽然有三个存档窗口,但只有第一个可以用。
五、最后
因为是边学边编,所以等到后面学到新的内容后,某些设计的不太合理的东西也不太方便更改了。
然后你所看到的界面都是用Qt做出来的,包含了挺多内容的,我也没有太多时间去一一介绍,也不太方便直接把实验报告贴出来,所以我还是建议直接去看源代码吧哈哈,其实就是赚赚积分嘿嘿。
源代码下载地址:https://download.csdn.net/download/jason_tbwh/11916149
如果哈,如果,以后会更多学习Qt开发的话,再来看更多的博客内容吧。