《用VC_编小游戏_迷宫老鼠_李华英.pdf》由会员分享,可在线阅读,更多相关《用VC_编小游戏_迷宫老鼠_李华英.pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、游戏规 则迷宫(ma ze)是一个 矩 形区域,它有一个人口和一个出口。在迷宫的内部包含不能穿越 的 墙或障碍。在图1所示 的迷宫中,障碍 物沿着行和列放置,它们与迷宫的矩形 边 界 平 行。迷宫的人口在左上角,出口在 右 下角。假定 用nxm的 矩阵来描述 迷宫,位置(1,1)表 示人口,(n,m)表示 出口,n和m分别代表迷宫的行数和列数。迷宫中的每个位置都可用其行号和列号来指定。在矩阵中,当且仅当在位t(i,j)处有一个障碍 时其值为1,否则其值为O。图2给出了图1中迷宫对应 的矩阵描述。迷宫老 鼠(花tinama ze)要求寻 找 一条 从人口到出口的路径。路径 是 由一组位置构
2、成 的,每个位置 上都没有障碍,且每个位里(第一个除外)都是前一个位置的 东、南、西或北 的邻居(如图3所 示)。二、编 程 要求1.在 窗口中画出 初始时迷宫的状态,迷宫随机 生 成,并验证其合法性(可以通行的 迷宫)。2.在 自动 寻找 迷宫路径 的每一步,用 图形标示其状态。3.自动寻找 迷 宫路径可以通 过 定 时器 或多线程 的方法,每一步 的时 间 间隔可以自定,以人眼观察比较舒服 为 宜,每一步的过 程如能实现动画最好。4.定义迷宫的描述类。5.在程序中,迷宫的大小及每步移动 的时 间 间隔 可以通过对话框设置(也 应该有默认值)。6.支持暂停功和继续的功 能(在自动寻径 过 程
3、中可以暂停,并继续)。7.暂停后,可以将 当前的状态保存。8,可 以从7中保存的文件中读出某 个 状态,并继续。根据要求迷宫的数据应用矩阵来存放。对于路径的寻找采用堆栈来遍历整个迷宫矩阵。只要求找 到一条路径即可,从而降低了算法设计的难度。该题目要求能随时停止 寻找,并将 当前的状态保存,并在下次 载人进度继 续寻找。为了满足该要求,只能降低迷宫类的封装性,将 寻 找路径的代码拿到类的外部来实现。这样迷宫类的 功 能就成为存放迷宫矩阵的数据及 相关的参数,如行数、列数等。进度的存取用 到 的MFC的序列化。三、算法的设计该算法用到了一个堆栈CeUS ta ck。它的 是用来保存已经 到过 的单
4、元。每个单元 用一个Ce ll结构来描述。其中含有该单元所处的位置,其上、下、左、右四个位置哪些是可行的,哪些是障碍,以及该单元是 否 为障碍等。该结构的描述在文件“c en.h”中。设当前位于第y行,第x列 的单元 中(当然该单元是可行的)。先判断当前位置是否为迷宫的左下角,即第n列,第m行。若不 是,则按下 面的规则寻长 可能的路径。由于规定了迷 宫 的人口在左上角,出口在右下角,所以寻找的顺序选 为 右、下、左、上。按照该顺序试 探当前单元 的四个方向的单元,当发 现一个可行 的单元后,将 当前的单元放入堆栈中,将下一个可行的单元放入当前 位置p os-no w;若寻找了一圈没 有可行的
5、单元(实际上是三个方向,因为来 的方向一 定 是可行 的,否则是不会到 达当前 单元的。但来路已被 放 人堆栈中,为了防 止程序进人恶性循环,在到达 当前位置 时,就将来时的方向设置为不可行)。则放弃该位 置,从堆栈中弹 出上一个位置。弹出一个元素后,应检查堆栈是否为空。若为 空,则说明当前位置 为 人口位置。此时 查看该位置的右、下两 个 位置是否 可行,若不 可行,则说明所有的可行位置已被试探过了,没有可行的通路,此 时 即可停止循环。此时说明该矩阵是不合法的(即没 有 通路的)。若 当前位置 不是入口,再按上面 的方法寻找可行的路径。该算法 的程序流 程 图如图l所示。在程序的实现上,我
6、设 计了迷宫类CMa ze。该类的作用主要是保存迷宫矩阵的数据及 相关参数。迷宫的表示为:矩 阵中值为0的位置 为障碍,非0的位置为可行的。该类中的矩阵为一个 二维数表,但在C+中并没有 针对二维数据结构的理想的数据类型。当然二维数组 是 一个选择,但其动态 生成和维 护不是很容易。因此我选择了使用线性表来表示二维表的方式。线 性 表 中 的a lk 的k同二维表 中的b lm,n 中 的m、n的对应关系为:k=n*Colsi韶+m这 样 在类中的矩阵保存为 线性表,之后为该类定 义 两个函数GetAt(intRow,in tCol)和S et At(e el ldata,intRow,int
7、Col)。这两个函数用来提取和保存第Ro w行,第Co l列的元素。这样使用起来 就 同二维表一样,而数据 的 维 护却变得轻松了。迷宫的四个 边 在 写程 序 时 不象中间 的位置那样 容易 判断。因此 在迷宫矩阵的四周各 加上 一 行(列)O元素表示障碍,这 样 迷宫中的各位置都可以用 同一方式来判断了。Ce l l结构 中的d ir ect io n【4 就 是 用来存放四个 方 向 上 的位置 中哪 些是可行的。如d i-r ec t io n【0 二l说明当前 位置的右 侧的位置可行,若d ir ec t io n11二O,说明当前位置的下方的位置 不可行。由于题目要求矩阵 随机生成
8、,所以其构 造函数只要 两个参数:矩阵的行和列。当指定了行和列数后,自动将行和 列各 加2(在四周各加 一行/列)。m防t a IRow=Row+2:m-T心以Co ful l m=Co lul nn十2;之后分配m-To回Ro w*m-Tota1Co lun i n个单元。将第一行、第一列、最后一行、最后一列 赋 成O。之 后将其它位置的值赋成随机数,这样 就 随机生成了一个迷宫矩阵。但由于当0和l为等概率时,成生的 迷宫很难存在 通路,因此将O(障碍)的概率降低一 些,这样的 迷宫矩阵比较容易有通路。所以使用以下代码:其 中r a nd()产生 的随机 数为0一32767,当 大于 1 2
9、0 00时,l和0的概率比大 约 为2比1。有了迷 宫描述类,下 一步 就是写寻找 迷宫路径的代码了。题目要求可视化的效果,因 此采用定时器来控制步速。定时器的时 间 常数由用 户 指 定,将上述 寻 找路径 的算法放人On Ti me r()中即可。但On Time r()中的代码除了寻 找路径外,还有一项重要 的任务就是将寻 找路径的过 程反映到用 户窗口去。该 功 能的 实 现是调用Inva lidateR eet(rejo w);调 用该函数后,OnDr aw()便根据当前 的状态 对 窗口进行重绘。为了避 免屏幕的闪烁,使用玩va l ida teRe ct(),而 不是I nv曲d
10、a te()。此时只是 重绘r o一o w指定的矩形区域,而 不重绘其它区域,所以以前 到过 的区域并没有被重绘,直到有其它窗口班盖 此窗口时,才会导致整个窗口的重绘,使以前的状态消失。程 序的使用 方法如下:打开 程序后,程序 自行生成一 个6*6的迷宫。用 户可设置迷 宫 的行数和列数,之后按“重新生成迷宫”按钮来重新随 机生成一个迷宫。该迷宫只是随机生成的,没有考虑其合法性(即有可能 没 有 通路)。选择 寻 找路径的步速,单位 为毫秒。之后按“搜索”去搜 索路径。在搜索过 程 中该按 钮会变 成“停止”,即再按下此按钮后会 停止搜索。用户可随时保存迷 宫及其状态。但该程序还 有 一个问
11、题就是 不能在本次保存后 打开保存的文件,只能在程序标题栏中显示“无标题”时才能打开。四、游戏程序用VC十十编 程 如 下:娜佑谕岩端娜黔三、为用户大规模部署ou tlo ok外 接 程序发布Oui lo ok外接 程 序(Oui lo ok插件)的 方式有 两 种途径,即:a)为ou i lo ok外 接程序建立 安 装 程序,即将此P st文件打包,发 布 给用户安装,当 然也可 以通 过SMSs er ve r部署,这里不再 赞 述。b)在域 中的A D控 制 器上建立用户登陆 脚本,脚本所执行 的 内容是将放 置于服 务器上 的动 态库文件(*.d l l)拷贝至本 地,并 使用Reg
12、s vr32.e xe外部命 令在 客 户 端注册此o udo ok插件。登陆脚本的 内容可以采用如下格式:这样就部署完毕了,当用户每次启动ou tl o ok时,就会提示 用户当前的P st文件 路径和大 小了,也会记录在数据库中,可以通过网 页发布给公司 的其他网管和相关用户,达 到保护P st文件的目的。(收稿日期:200 5年l月20日)(上接 第8 1页)索路径。在搜索过 程 中该按 钮会变成“停止”,即再按下此按钮后会停止搜索。该迷宫只是 随机生成的,没有考虑其合法性(即有可能没有通路)。如果有通路,就会找 到通路并以蓝色标示。(收稿日期:20()5年2月20日)ePa ss10
13、00 N De ee eUSBK ey产品新趋势日前,领先的智能身份认证产品提供商北 京飞天诚信科技 有 限公司成功推出了新 一代无驱型U SB Ke yePa ssl(X)OND。eP as。1000 N D是飞 天公司在国内推出极 早,使用极 广的 存储型USBKe y产品ePa ss l00 O的无驱 升 级版 本。ePas。100 0N D全面兼容eP as s1000的编程接口,并 在e Pa ss1000的基 础上 增 加了硬 件 加 密 算 法几A算法。ePa ssl(X)OND在Windows98SE及以上操作系统使用时无需 安 装 驱 动 程序,极 大 地方便了最终用 户 的
14、使用 和发 行商的维 护。eP as sl00 0N D硬 件 实 现TH MAC一M D S算法,支持基于冲激 响 应 的 墙 双因子 认证,并提供CSP和P KCS#l1接口,经 简单配置就可直 接 应 用于Mi c功so f touUo ok/OutlookExpr ess、Inter netExplor er中,开发商可以利用 飞 天公司提供的 软件 开 发包将ePa ssI00 0ND集成 到其它 的应 用中。eP as s100()N D内 置安 全文件系统,确 保保存在eP as s 10OOND中的个人密钥和 证 书 安全的不 会受到黑客、病毒及其它 形式的攻 击和威胁。eP as sl的OND可广 泛 应用于电子 政 务、电子商务安全 系 统。查肠ePa ss10 00ND产品详细伯息