- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
vb黑白棋游戏课程设计报告
计算机实习报告
姓名:
班级:
学号:
系部:
专业方向:
指导老师 :
电子科技学院
2006年9月18
一: 选题需求分析
题目要求:设计一个图形工作方式下的10*10黑白棋棋盘,模仿两个棋手对弈的过程,并报告最终输赢结果。
题目分析:设计黑白棋为人机对弈,人执白旗,计算机执黑棋,轮流走棋,人所执白棋落定后,计算机(执黑棋)选择最优摆子点摆子,每方都试图在游戏结束前让自己棋子的数目多于对方,棋子多者胜。
据选题要求将棋盘设计为10*10格,初始状态在棋盘中央交叉排放黑白旗各两枚,为统计棋子个数,有一个棋子记一分,人执白棋,计算机执黑棋,且白棋先走。下棋时,棋子的位置必须是以自己的棋子能包围住对手一个或多个棋子,被包围的对手棋子将变成自己的棋子。包围的方向可以使上下左右斜线共8个方向,只要能连成一条线即可。当一方摆子,但没有可以包围对手棋子的位置时,该方必须听步,通过放弃一子让对手走棋,直到该方可以走子为止。当棋盘上有一方的棋子为0(也就是被对方吃完)或下满100格,游戏结束,旗子少者输。
二:程序设计
1:设计思路
从程序界面,考虑此为一个二维平面图,所以可以用数组形式表示棋盘上的位置。则该程序接收到棋手按键操作,既棋手放子,就判定是不是有效位置,也就是能不能包围住对方棋子,如果能,便对棋子所在的位置往上下,左右,左上,左下,右上,右下8个方向寻找被包围住的所有棋子(必须是连续的,中间不能有空格),将这些被包围住的对手棋子都变成自己的棋子。当白棋落定后,计算机(执黑棋)选择最优摆子点摆子并吃掉白子即将其变为黑子。如果没有这样的位置可以落子,则停步,让对方走棋,重复上述步骤,直到游戏结束。然后对当前棋盘中的黑白棋个数进行统计并输出结果。如果想提前终止游戏,可以提前按退出。
2.设计流程图
3.设计流程及测试结果
定义变量
定义使用到的常数、全局变量等。如游戏的时间、状态、黑白棋子的个数等。
Form_Load()设置游戏的初始界面
首先设置窗口的位置,检测程序是否正在运行以防止多次打开程序。再设置‘后退’按键不可按,‘放弃一子’键不可按,且黑白英雄榜不可见。最后调用drawnewqp 画棋盘表格。即可得到游戏初始界面如下所示:
在游戏一栏中包含开始游戏、载入游戏、保存游戏、退出及黑白棋英雄榜几个按钮。在帮助一栏中有游戏规则及关于按钮。
(3)drawnewqp()画棋盘表格
设置棋盘的可用的区域,剩余区域用于显示时间、坐标、黑白棋计数显示、提示棋手所执棋子为白色以及工具栏(包括游戏开始、载入、推出、放弃棋子、后退和游戏规则等)。然后画10*10的表格线,再设置线条宽度等。如上图所示。
(4)窗体的设置
窗体的设置中包含了游戏窗体以及黑白英雄榜中各个按钮控件的设置在属性窗口中可设置它们的属性。设计出的窗体如下图所示:
(4)开始新游戏()
在窗口工具栏的游戏中按下开始游戏键,游戏开始,此时在棋盘中央交叉处已排放黑白棋子各两枚,则显示‘白棋先有2子’及‘黑棋现有2子’且可以计数,时间开始计时,坐标值随鼠标移动而改变,‘放弃一子’键可按。该函数在调用时都将清空棋盘以及将游戏时间清零,这样在按下开始游戏键后游戏自动进入新一局。开始时的界面如下所示:
(5)放子()
1〉首先判断是否可以放子:从上下、左右、左上、左下、右上、右下8个方向判断是否可以放子。放置棋子的位置必须是以自己的棋子能包围住对手一个或多个棋子,包围的方向可以使上下左右斜线共8个方向,只要能连成一条线即可满足要求。若放子位置有棋则无效。
2〉调用qp_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)用于提示棋手鼠标所在处是否可以放子,如果鼠标所在区域可以放子,则鼠标为“十字”图标,否则为“禁止”图标。
3〉若有多处可以放子,则可选最优位置放子;如若整个棋盘有空格但不符合放子要求,即无棋可走,则需放弃此步,让对方下棋。
(6)翻转棋子()
当一方棋子落定后,就要分别往8个方向判断是否包围住对方棋子,如果是,则改变棋子颜色,也就是棋盘上黑白棋子的个数要发生变化。i代表行,j代表列,对于10*10的棋盘,它们的值为0-9,如果j8,往右边判断,从当前位置开始,用循环语句判断判断右边是否有一个或连续多个对手的棋子,遇到自己的棋子或空格
文档评论(0)