| 域名空间 下载中心 社区论坛 信息公告 my小屋 |
![]() |
联系我们 设为首页 加入收藏 |
|
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿 论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图 专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版 社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务 |
| 新版上线![旧版] | |||||
注:打开慢时请稍等
五子棋游戏的制作(1)http://www.iyit.net 日期:2006-5-29 8:55:08 来源:网络转载 点击: |
五子连珠,在民间俗称”五子棋”,是一种流传很广的益智棋类游戏,游戏规则非常简单,适合各个年龄段的朋友玩,相信大家以前也一定玩过此游戏,下面我们就来学习使用director来制作一个简单的五子棋个游戏。 本文分为三个部分来介绍,界面比较简单,主要是和大家讨论一下制作的思路。 1.. 从游戏的玩法开始讨论游戏的制作思路。 2.. lingo 代码的设计,移子走棋,以及判断游戏胜负后。 3.. lingo 代码的设计,棋子布置和后悔按钮的代码设计。 一.游戏制作思路 我们这里介绍的的是一种最简单的五子棋游戏,玩法很简单,黑白双方交替用鼠标拖动棋子来下棋,看谁先摆好连续的五粒,包括水平方向,垂直方向和倾斜方向(45度和135度),但是不能有拐点,必须是一条直线,哪一方先连好,则胜利。画面如图: ![]() 之所以简单是因为我们这里没有涉及到人和电脑下,没有人工智能(ai),如果要涉及到ai,算法就会麻烦一点,而没有ai的话,主要就是扫描检测了. 现在就和大家一起讨论制作思路: 1..首先要有一个交叉点列表(loclist)棋盘上每个交叉点的坐标值,我们这里为18*18的棋盘(每个格子宽20个象素)完成记录。 2..由于需要游戏过程中判断该位置是否有棋子,所以还需要一个同样是二维的列表(onlist)来记录棋子信息,为了方便我们没有棋子的地方为0,黑子为1,白子为-1,初始化时全部为0。 上面的代码均在电影脚本中书写: global loclist,onlist on startmovie loclist=[] onlist=[] repeat with i= 1 to 18 tlist=[] ttlist=[] repeat with j= 1 to 18 add tlist, point ( 20 *j, 20 *i) add ttlist, 0 end repeat add loclist,tlist add onlist,ttlist end repeat end 这段代码让我们得到并初始化了两个关键的二维列表(两个全局变量) loclist 和 onlist 分别记录交叉点位置信息 和 棋子信息。 我们可以在message窗口中用put命令查看它们的内容和规律,就会理解,这将为后面的走棋和判断胜负做准备。 put loclist [[point(20, 20), point(40, 20), point(60, 20), point(80, 20), point(100, 20), point(120, 20), point(140, 20), point(160, 20), point(180, 20), point(200, 20), …… point(340, 360), point(360, 360)]] put onlist [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], …… 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] 二.移子走棋,以及判断游戏胜负后 1..接下来介绍移动棋子代码: 要实现的是,用户用鼠标按住来移动棋子,并当用户松开鼠标后,对当前棋子位置的判断,看是否足够靠近离其最近的一个可放点,如果是就会自动放置好。移动棋子的代码相对简单,这里就重点介绍是否足够靠近离其最近的一个可放点: 定义相关属性并初始化。 property pmousedown,sel,poldloc,moveenable,onlinepos on beginsprite me sel= sprite ( me . spritenum ) --代表自身 poldloc=sel. loc --棋子的原始位置 pmousedown= 0 --是否鼠标按下 moveenable= 1 --是否可以移动 onlinepos=[] --移动的历史记录:记录我移动完成后的位置信息和我的棋子信息(黑棋还是白棋), end 这里的判断原则是扫描所有交叉点,找到一个距离适当(与该点水平坐标差和垂直坐标差都要小于10),并没有棋子(即onlist[i][j]=0)的点来放好棋子。 on ifcloseenough me cursor - 1 --通过一个二重循环来遍历二维列表中的每个坐标点 repeat with i = 1 to 18 repeat with j= 1 to 18 myloc=sel. loc if abs (myloc[ 1 ]-loclist[i][j][ 1 ])< 10 and abs (myloc[ 2 ]-loclist[i][j][ 2 ])< 10 and onlist[i][j]= 0 then --如果找到一个开放点,则放置到该位置上 sel. loc =loclist[i][j] --不能在被移动 sel.moveenable= 0 if sel. member . name = "white" then --棋子信息列表记录该点棋子信息 t= 1 onlist[i][j]=t onlinepos=[i,j,t] else t=- 1 onlist[i][j]=t onlinepos=[i,j,t] end if --检测是否有玩家获胜(具体代码稍后在讲) checkit(i,j,t) --找到点并放置好后就可以中止后面剩下的循环判断操作了,否则一直扫描完 exit end if end repeat end repeat --在上面,如果没有一个点靠得足够近,就会回原位 sel. loc =poldloc end 2.. 判断游戏胜负: 用checkit(i,j,t)程序检测是否有玩家获胜。(即判断否至少有一个方向存在连续5个或以上的同色棋子)实际操作时我们根据当前点确定我们可以确定四条直线(实际上是四个列表),这里我们需要对四个直线逐一进行判断。 这四条直线分别是,水平方向,垂直方向和倾斜方向(45度和135度)。 参考下图中的四条蓝色的粗线。 ![]() on checkit i,j,num --水平方向: --所在点横线扫描,扫描水平信息列表 scan(onlist[i]) --垂直方向 --所在点纵向扫描 tlist=[] repeat with m= 1 to 18 add tlist,onlist[m][j] --通过循环获取纵向信息列表 end repeat scan(tlist) --进行扫描 --所在点斜率为1的直线扫描(y=x-b),即倾斜方向45度 b=i-j tlist=[] repeat with y = 1 to 18 repeat with x = 1 to 18 if x = y -b then add tlist,onlist[ y ][ x ] --通过循环获取有该点决定的斜率为1的直线信息列表 end repeat end repeat scan(tlist) --进行扫描 --所在点斜率为-1的直线扫描(y=-x+b),即倾斜方向135度 b=i+j tlist=[] repeat with y = 1 to 18 repeat with x = 1 to 18 if x =- y +b then add tlist,onlist[ y ][ x ] --通过循环获取有该点决定的斜率为-1的直线信息列表 end repeat end repeat scan(tlist) --进行扫描 setuser(num) end on scan(t) --扫描列表程序,看是否有一方以获胜(即累计数目等于5) blacknum= 0 whitenum= 0 repeat with n= 1 to t. count if t[n] <> 0 then if t[n]= 1 then blacknum=blacknum+ 1 whitenum= 0 if blacknum= 5 then --是否黑方获胜 win( 1 ) abort end if else whitenum=whitenum+ 1 blacknum= 0 if whitenum= 5 then --是否白方获胜 win(- 1 ) abort end if end if else blacknum= 0 whitenum= 0 end if end repeat end 由以上我们就可以判断游戏胜负了。 编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部] 上一篇:五子棋游戏的制作(2) 下一篇:在director mx 2004使用flash里面的函数 转载请注明来源:www.iyit.net 特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。 |
| 最新更新 | 热点排行 | 推荐新闻 | |||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
| 友情链接 | ||||||
| 设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接 |
| |||||||