《软件基础》大作业Word文档格式.docx
- 文档编号:4069916
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:9
- 大小:20.42KB
《软件基础》大作业Word文档格式.docx
《《软件基础》大作业Word文档格式.docx》由会员分享,可在线阅读,更多相关《《软件基础》大作业Word文档格式.docx(9页珍藏版)》请在冰点文库上搜索。
2.1开发环境与软件………………………………4
2.2项目任务书……………………………………4
三、软件设计制作说明
3.1总体方案……………………………..………..4
3.2详细方案…………….………………………..5
3.3工程进度……………………………………….9
四、测试报告…………….……………………………10
五、个人总结……………….…………………………11
单副扑克双人双电脑升级游戏需求分析
开发背景
本项目名称是单副扑克双人双电脑升级游戏
本项目的提出者是卫颜俊老师,开发者是电气210游戏技术研发小组(本组成员)
纵观世界,电脑的普及已是大势之所趋,不可抵挡。
随着电脑技术的飞速发展。
原来的普通扑克游戏,已经可以在电脑上轻松实现全真模拟。
世界科技浪潮的冲击下,高级语言的开发技术已经席卷全球。
使用高级语言编写程序已经是每一个使用电脑的人的必修课了。
VsualC++是一种面向对象的可视化程序,是在Windows环境下最强大、最流行的程序设计语言之一。
本游戏的玩家只需了解基本的电脑操作知识,就可以轻松的玩。
项目目标
在电脑上实现升级游戏,使玩家有完全真实的打牌的感觉。
运行环境
硬件:
CPU:
IntelPentium3800MHz内存:
64M
软件:
Windows98/2ooo/xp/2003
参考资料
《软件技术基础》冯博琴主编人民邮电出版社
《VisualC++与面向对象程序设计教程》(第二版)
吕军等编高等教育出版社
游戏开发技术路线
开发软件
VisualC++6.0版
开发环境
Windows2003Server
任务分配
本小组由组长连飞峰召开会议,经过民主讨论,结合每个成员对VC++的掌握水平,确定了每个成员的工作。
连飞峰:
确定程序总体方案,研究确定程序的算法,做出游戏规则
江波:
收集资料,初始化数据,实现叫主功能
廉哲:
制定程序界面,导入位图,实现位图显示
总体方案
本软件包括初始化数据、显示界面、鼠标操作、设计规则四个模块。
四个模块通过可视化程序相互联系。
初始化数据是基础,完成之后才可以实现显示界面,在界面上完成鼠标操作。
最终规则设计完成整个游戏的开发。
1)收集资源,选择合适的开发语言。
2)导入图片等资源,设计程序的界面
3)结合消息机制实现操作、设计算法,出牌规则最终形成游戏过程
详细方案:
1)准备扑克游戏所需的图片资源。
在网上下载了一个拖拉机游戏程序,用exescope打开这个程序,将其中的扑克牌面图片导出到一个文件夹。
找一幅合适的背景图片,用photoshop在其上面添加必要的文字,包括:
“本局花色”、“本局主值”、“得分方”、“得分”;
并且用photoshop制作游戏过程中要显示的花色、主值和当前得分方(电脑或人),制作程序的图标。
选择VC++开发环境,新建一个文档视图程序,起名为puke。
2)将上述资源导入程序。
在View类里装入图片:
图片名称
数量
背景图
1
扑克牌背图
2
玩家标识图
当前花色图
扑克图
54
当前主值图
叫主花色图
5
在OnDraw里先显示背景图,其次是当前花色图、玩家标识图、叫主花色图、扑克图、当前主值图是根据游戏的过程而动态显示的。
修改版权,程序图标,加入菜单:
游戏菜单—〉开始、退出
选项菜单—〉速度选择、背景选择
帮助菜单—〉操作说明、版权说明
在显示扑克牌之前要把扑克随机打乱,这是个难点。
首先想到要用rand()函数,但直接用随机函数又不能抱证没有重复的扑克出现。
这就要想办法生成一个不重复的随机数列。
思路是这样的:
首先把0~53按顺序放到一个数组a[]里,让后用随机函数产生一个53范围内的数,取以这个数作为下标的a[]里面的一个数放入数组b[],同时a[]的长度减一并移动里面的数据。
如此重复下去,直到a[]数组空为止,这样数组b[]就是一个不重复的随机数列!
为了防止前后两次的随机数列一样,另外加了一个srand((unsigned)time(NULL));
以系统时间产生随机数列,系统时间不一样,随机数列也不一样。
新建一个扑克类,其中变量包括:
inthuase(扑克的花色)、intzhi(牌面值)、intfen(扑克对应的分数,5对应5分,10、K对应10分,其他的对应0分)、CBitmapbmp(扑克的位图)
定义扑克数列pukepuke[54]。
给每张扑克赋初值。
然后把54张扑克以这个随机数列打乱。
程序启动点开始后要把扑克一张一张发出来,而不能一下显示出来,所以不能用for循环来显示扑克牌。
这是第二个难点,想到要用计时器结合OnDraw可以实现,在“开始”里设定一个计时器,有个变量i自加1,i每变化一次,扑克显示一张。
直到i=11扑克发完。
这样就可以控制扑克的发牌频率。
在扑克发的过程中要能用鼠标叫主:
由于扑克是在发票之前打乱的,可以计算出当局主值在扑克序列中的位置,如果出现了当前主值,就在花色条上显示为亮。
这在OnTimer里实现,当鼠标点击下亮的花色后还要给扑克重新赋值,主花色的扑克值加13,并且重新统计各个玩家各种花色的牌有多少张。
程序的初始界面就做好了,启动程序后点开始可以发牌和叫主。
3)接着要实现鼠标的操作。
点击左键选牌,点击右键发牌。
以第一个人的操作为例说明。
首先判断鼠标是否点在第一个人牌面的范围内,如果是,则接着判断点到哪张牌上面,用鼠标的point.x做一个运算就可得出当前所点的扑克。
选择某个扑克后,这个扑克就弹起来。
为了实现再点一下这个扑克就下去还得加一个BOOL变量。
这个很容易可以实现。
在鼠标点击后要加刷新扑克所在范围内的区域。
选择好某张牌后要用点鼠标右键出牌。
如果点击左键后,点击右键被激活(用一个BOOL变量实现)。
出牌后也要刷新扑克原来位置的区域和出牌后的新位置。
鼠标的操作要结合OnDraw来实现扑克牌的位置变化。
第二个人的鼠标操作类似第一个人的。
电脑的出牌:
电脑是自动出牌的,不需要鼠标的操作。
因此要把电脑的出牌放到OnTimer里,并且要用一个BOOL变量控制他是否能出牌。
比如规定人出完牌电脑才能接着出牌。
电脑出牌同样也要结合OnDraw来实现,并且要刷新新旧两个位置的区域。
当桌面的的牌等于四张的时候需要开始新的一轮,要把上轮的牌刷掉。
在每个玩家出牌的语句后面加一个计数,如果计数的值等于4,则刷新桌面,同时计数归零。
到此人和电脑就可以出牌了。
加出牌的规则:
以一个电脑为例说明,在“开始”和叫牌后都统计过各种花色的扑克有多少张。
首先判断是否为新一轮的第一张牌,如果是新一轮的第一张牌,可以随便出,如果不是则需要判断上家所出的花色,如果自己有同样的花色则必须出同样花色,如果没有,则可以随便出一张。
在出完牌后,要把这个花色牌的个数减一,并且另这个牌的花色为-1,以免下次出这个牌。
人出牌的规则在电脑基础上还要再加一些,判断说点的牌是否为非法牌,如果是新一轮的首次出牌,则可以随便出,如果上家已经出牌了,这要判断花色是否有,是否一致,如果是非法牌,则点击鼠标左键无效。
如何判断一轮出牌的大小:
如果是新一轮的第一个出牌,则赋当轮的花色为此扑克的花色。
桌面扑克定义为puke类,zhuomianpuke[4],每出一张牌则记录所出牌的花色和面值,如果所出牌的花色是当前轮的花色或者是主的花色才参与判断大小,判断出最大的玩家,下一轮就该这个玩家首先出牌。
得分的纪录:
初始化里默认电脑为得分方。
每出一轮牌统计当轮的牌面分值,如果该轮得分方大了,则给得分方加分。
得分的显示在OnDraw里实现。
升级:
定义一个变量intcount每个玩家出一次牌count都加一。
在OnTimer里判断,如果count=48则此局结束,如果得分方得够40分,则下局该本局的得分方做主,如果得分不够,本局的主方接着做主,级数升一。
游戏的主要功能就实现了
附加功能:
选择扑克牌背,定义一个变量控制显示的图案。
选择后刷新全局。
选择速度,定义一个变量控制刷新的速度。
工程进度
1.接受任务:
9月底
2.工程开始:
10月4号,建立项目,构思整体方案
3.前两周:
计划完成资源收集处理,程序界面的完成。
实际进度:
完成计划任务。
4.三、四周:
计划加入鼠标操作并能自动出牌。
实际进度,鼠标操作的基本功能实现,没有取消选择的功能,自动出牌的一部分代码完成
5五、六周:
计划完成自动出牌,实现大小的判断。
按计划完成,并加入得分机制
6七周:
完成大部分功能。
主要是升级
7八周:
加入附加菜单、测试并解决bug
测试报告
1)发牌功能完成后的测试:
点开始后扑克可以正常显示,但没有发牌过程。
解决方案:
把显示扑克的for循环改为用计时器控制,并实现了速度的调节。
2)加入电脑自动出牌后的测试:
电脑虽然可以自动出牌了,但第二轮的时候只要有一个人出牌,两个电脑就同时除牌。
加入桌面牌的个数记录,解决了BOOL变量不能及时更新的bug。
3)加入出牌判断大小后的测试:
电脑出牌有时符合规则有时乱出。
检查程序的判断大小、电脑出牌等处的关键代码,发现一个逻辑错误电脑的扑克变量应该用判断大小以后的变量。
更改后问及解决。
4)程序点开始后最小化最大化测试:
游戏窗口只要一变化,桌面上的扑克就丢了。
这个问题很头疼。
解方案:
当牌发完后,再增加一个fou循环把扑克显示一次。
问题解决。
5)出牌后最大化最小化测试:
只要桌面上出过牌,窗口变化后,以前出的牌就都显示出来了。
给每个扑克的x、y坐标都定义一个值,放到数组里。
互不影响。
出牌后改变这个扑克的坐标值,使其不再桌面范围内。
6)一些刷新的测试:
比较多,也零碎。
回到源代码更改坐标的值。
总体测试:
在前面bug的解决基础上整体程序没出现过bug,所设计的功能都正常。
说明一下程序的不足之处:
发牌的过程不够形象,电脑的智商比较低,没有处理底牌功能。
有时候出牌频率感觉不太平均。
个人小结:
经过这个小程序的编制,我对VC有了进一步熟悉。
对文档试图程序的编写更熟悉了。
掌握了定时器的使用,东得了如何控制一个变化的过程。
编成思想有了提高,逻辑思维增强了,解决程序错误的能力也提高了。
通过其中变量相互转化的编写对数据结构也有了更深的认识。
感觉自己编的代码比较乱,没有使用很多类和函数。
以后得加强程序代码的可读性,合理使用函数和类。
江波:
通过这一个多月程序的编制,我们这组的项目也很好的完成了,总体功能符合要求.我负责的是这个扑克游戏资源的搜集,程序的初始化及叫主功能的实现,通过这次编程,不仅对理论知识有的进一步的理解并加强了实际的操作能力,及解决问题的能力。
总的来说,这次软件开发的过程,对我们每个人来说,最大的收获是学习的过程,也增强了我们的团队合作精神,我们也认识道,没有最强的个人,只有最强的团队
廉哲:
这次编程任务完美完成了。
感觉这段时间里,辛苦,有,收获也有。
要说最大的感受是什么,那就是以往的经历都不如这次给我的收获大。
在这次编程的过程中。
我们三个人充分的发挥民主,每个人都为这份程序付出了自己最大的心血。
同时,我们也感受到了集体的力量是远大于个人的。
团结是和谐的,愉快的。
这次的合作经历增加了我们的友谊。
同时,我也对VC语言有了进一步的了解,也增强了自己动手操作的能力。
在以后的工作中,也将更认真,更细致。
当然,这也会对我今后的生活产生长远的影响。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件基础 软件 基础 作业