用Qt 编写黑白棋程序
前言:这是继三天学习c++后,学习了两天Qt 做的项目。
软件设计开发流程:
瀑布模型:
可行性分析
时间:
共8天(其中前两天学习Qt3.1 与Qt4.3.5,中间编程,最后的两天用来移植到arm板上运行)
经济:
无任何经济问题
技术:
学过三天c++,两天的Qt
借助Qt 的assistant ,应该没有什么大的问题
需求分析
基本功能:1、下棋;2、计数;3、提示该谁下棋;4、跳过;5、棋子、背景图片;6、胜负判断;7、重新开始;
扩展功能:8、音效;9、背景音乐;10、人机对战;11、联网;13、难度设置;14、历史记录;15、窗口菜单;16、游戏大厅;17、计时;;18、双方起名;19、重新开始;20、游戏说明;21、开场动画;22、悔棋;23、游戏存盘;
概要设计
棋盘类
提示类
整体类
详细设计
提示类:
Class movie
{
构造函数:
初始化QTimer *timer
设置先画红棋子或蓝棋子的标志flag = 0
连接信号timer和槽update()
Slot:Myslot(int FLAG)
根据传进的FLAG判断该哪个棋子在走
该红棋子走时,
红白开始闪烁
蓝白停止闪烁
该蓝棋子走时
红白停止闪烁
蓝白开始闪烁
绘图函数paintevent
flag = 0 时画红旗子或蓝棋子(再根据color决定到底画蓝还是红),画完 flag 置 1
flag = 1时画白棋子,画完置 0
私有成员 int color :
color = 0表示画红旗子,color = 1 画蓝棋子
}
棋盘类:
class chessboard
{
构造函数:
初始化棋盘,在期盼中间画上四个棋子
设置红方先走
设置默认情况是人与人之间的对战
设置棋盘的背景颜色
paintevent :
paintChessboard()
画棋盘,棋盘大小能随窗口的改变而改变:分窗口的高比宽长和 高比宽短两种情况;
intichessboard()
测试,先在棋盘上画棋子
同样由窗口的宽和高分两种情况,同时根据数组chessnum【8】【8】的值分情况画上棋子:值为1 代表红棋子,2 代表蓝棋子,0 代表此处为空。
鼠标事件(下棋)mousepressevent()
取得鼠标点击处的屏幕坐标
根据屏幕坐标计算相应的chessnum【】【】数组的下标,也分宽高的长短不同两种情况
调用下棋规则函数,若能在此处下棋,下棋,把标志flag 置给对方
统计此时双方的棋子个数,发射信号到相应的lcd上
判断游戏是否结束,弹出最终的胜负信息
slot:
restartgame()
再次初始化棋盘,设好各相应的标志
skip()
跳过功能,己方无棋子可走时把下棋的标志置给对方
同时改变相应的提示信息
playwithpc()
人机对战
signals:
redNumChanged()
发射红棋子数量
blueNumChanged()
发射蓝棋子数量
成员函数:
redChessmanNum()
统计红棋子数量,发给相应的lcd 显示
blueChessNum()
统计蓝棋子的数量,发给相应的lcd
playChess(int i, int j, int FLAG) , 其中i, j , FLAG 分别代表横坐标,纵坐标,棋子的标志位
下棋规则
分八个方向判断此处是否能下棋
playWithPC()
人机对战
遍历数组,取出值为0 的元素,根据下棋规则判断此处能否下棋,能则下,把下棋标志置给人,返回
对象成员QMessageBox
结束时弹出相应的胜负消息
整体类
class gameboard
{
棋盘上的两侧放上两个计数的lcd;
lcd下方
棋盘的下方放quit 、skip、playwithPC、newgame 分别代表 退出、跳过、人机对战、重 新开始的四个按钮
棋盘中间的两侧放上提示的棋子,闪烁方下棋
棋盘放在中间
}
编码
测试
维护
程序源代码 链接:
http://download.csdn.net/source/1237678
环境:
RedHat 9.0
Qt 4.3.5
g++ RedHat--linux 3.2.2-5
vi 6.1.320