华容道游戏实验报告-Read.PDFVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
华容道游戏实验报告-Read

华容道游戏实验报告 李文 说明: 此华容道游戏是我在 2004 年大一下学期学习数据结构时所写,使用 Microsoft Visual C++ 6.0 Win32 Application 平台完成。当时由于时间紧迫,仅完成代码,未及写清注释和报 告阐释程序。时隔两年,重温代码,颇有感慨。因课程要求,本欲将其改作MFC 程序,但 看过一遍代码后,感觉并无必要,不如省出时间留与他用,遂注上注释,并写此报告,以详 细说明此游戏的设计思路和算法原理。程序为两年前初学编程所做,设计中难免有许多不妥, 可优化处甚多,报告仅在解释当时的设计思路,如阅读报告时发现设计的不妥,请略过。在 报告的最后,我对此程序做了一些评价和总结,如有疑问,请来信交流☺。 游戏简述: 华容道是中国经典的古老游戏之一,以其变化多端、百玩不厌的特点名闻古今。游戏取 自著名的三国故事,曹操赤壁大战败走华容道,诸葛料定曹操必走此道,且夜观天象见曹操 不当身亡,遂遣关云长把守华容道,留个人情与关羽做。关羽为了报答曹操对他的恩情,明 逼实让,放曹操逃出了华容道。华容道游戏就是依照“曹瞒兵败走华容,正与关公狭路逢。 只为当初恩义重,放开金锁走蛟龙”这一故事情节,通过移动各个棋子,帮助曹操从逃走。 游戏有一个带二十个小方格的棋盘,代表华容道。棋盘上共摆有十个大小不一样的棋子, 它们分别代表曹操、张飞、赵云、马超、黄忠和关羽,还有四个卒。棋盘下方有一个两方格 边长的出口,供曹操逃走。棋盘上仅有两个小方格空着,要求玩家移动各个棋子,不允许跨 越棋子,设法设法用最少的步数把曹操移到出口。 华容道有几十种布阵方法,如“横刀立马”、“近在咫尺”、“勇闯五关”、“水泄不通”、 “小燕出巢”等等。游戏最大的特点是:走出难,最少的步数走出更难。You can have a try☺。 程序功能: 在 Win32 下以图形界面提供给用户游戏平台,从易到难提供六关经典棋局。用户可通 过鼠标选择棋子进行移动,程序对用户走子进行记步,成功走出时给出提示,并自动进 入下一关。用户可以自由选关进行游戏。 提供自动求解功能,当用户游戏到任何时刻,都可以求助于程序求出从此刻开始的一种 步数最少的解法。程序自动演示移动过程,并在演示完毕后回到用户的游戏状态。 设计思路: 在设计思路上将从用户操作模块设计和计算机自动求解模块设计两个方面来说明: 1. 用户操作模块设计: 在用户操作部分,比较关键的问题在于数据表示和操作控制两个方面: 第1 页 共9 页 1-1. 数据表示: 华容道游戏中有 10 个大小棋子,四兵五将一曹操,其中将子可横可竖。游戏有几十种 不同布局,如何表示出各种棋局和棋局中的棋子是首先需要考虑的问题。 以华容道中最常见的“横刀立马”局为例: 图1 布局示例 显然,棋盘上共有20 个不同的位置,故考虑将棋盘分成5*4 大小的20 个块。游戏中, 兵将不同棋子要显示不同的图片,故需要用不同的数字来标志不同的棋子。考虑将子可横可 竖以及,故共有 16 个不同的棋子,故最初的想法可以考虑对每个棋子设定一个标号,因此 上图可表示为: 图2 用户控制图示例 但这种表示方法会存在一些问题,如果我们把2 号子移动到下方,如下图所示: 第2 页 共9 页 图3 移动后棋局 这时候如果用户想移动9 号子到下方,在判断是否可行时,我们无法知道空格上方的9 是左半边的还是右半边的,这样在每次判断9 号子下方是否全为空格时,我们都要对挨近空 格的9 号子左右两格进行判断,其他将子和曹操均要如此,且不考虑效率问题,仅从程序编 写的角度来看,就将复杂性提高了一倍以上。因此,为了准确区分大棋子的每一个部分,我 们采用对每一个部分均进行编号的策略。在对棋子编号时,可以指定任意数字,本程序采取 如下策略: 0 表示空格单元 1-4 用来表示4 个1*1 的棋子(兵)。 10-29 表示5 种1*2 大小棋子(将)的横竖两种不同状态。每个

文档评论(0)

ldj215322 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档