




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
五子棋游戏的制作五子连珠,在民间俗称”五子棋”,是一种流传很广的益智棋类游戏,游戏规则非常简单,适合各个年龄段的朋友玩,相信大家以前也一定玩过此游戏,下面我们就来学习使用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 18tlist=ttlist=repeat with j=1 to 18add tlist,point(20*j,20*i)add ttlist,0end repeatadd loclist,tlistadd onlist,ttlistend repeat end这段代码让我们得到并初始化了两个关键的二维列表(两个全局变量) loclist 和 onlist 分别记录交叉点位置信息 和 棋子信息。我们可以在message窗口中用put命令查看它们的内容和规律,就会理解,这将为后面的走棋和判断胜负做准备。put loclistpoint(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 onlist0, 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,OnlinePoson beginsprite mesel=sprite(me.spritenum) -代表自身poldloc=sel.loc -棋子的原始位置pmousedown=0 -是否鼠标按下moveEnable=1 -是否可以移动OnlinePos= -移动的历史记录:记录我移动完成后的位置信息和我的棋子信息(黑棋还是白棋),End这里的判断原则是扫描所有交叉点,找到一个距离适当(与该点水平坐标差和垂直坐标差都要小于10),并没有棋子(即onlistij=0)的点来放好棋子。on ifcloseenough me cursor -1 -通过一个二重循环来遍历二维列表中的每个坐标点repeat with i =1 to 18repeat with j=1 to 18myLoc=sel.loc if abs(myLoc1-loclistij1)10 and abs(myLoc2-loclistij2)10 and onlistij=0 then -如果找到一个开放点,则放置到该位置上sel.loc=loclistij-不能在被移动sel.moveEnable=0 if = white then -棋子信息列表记录该点棋子信息t=1onlistij=tOnlinePos=i,j,t elset=-1onlistij=tOnlinePos=i,j,tend if -检测是否有玩家获胜(具体代码稍后在讲)checkIT(i,j,t) -找到点并放置好后就可以中止后面剩下的循环判断操作了,否则一直扫描完 exit end ifend repeat end repeat-在上面,如果没有一个点靠得足够近,就会回原位sel.loc=poldloc end2. 判断游戏胜负:用checkIT(i,j,t)程序检测是否有玩家获胜。(即判断否至少有一个方向存在连续5个或以上的同色棋子)实际操作时我们根据当前点确定我们可以确定四条直线(实际上是四个列表),这里我们需要对四个直线逐一进行判断。这四条直线分别是,水平方向,垂直方向和倾斜方向(45度和135度)。参考下图中的四条蓝色的粗线。on checkIT i,j,num -水平方向:-所在点横线扫描,扫描水平信息列表scan(onlisti)-垂直方向-所在点纵向扫描tlist=repeat with m=1 to 18add tlist,onlistmj -通过循环获取纵向信息列表end repeatscan(tlist) -进行扫描-所在点斜率为1的直线扫描(y=x-b),即倾斜方向45度b=i-jtlist= repeat with y=1 to 18repeat with x=1 to 18if x=y-b then add tlist,onlistyx -通过循环获取有该点决定的斜率为1的直线信息列表 end repeat end repeatscan(tlist) -进行扫描-所在点斜率为-1的直线扫描(y=-x+b),即倾斜方向135度b=i+jtlist= repeat with y=1 to 18repeat with x=1 to 18if x=-y+b then add tlist,onlistyx -通过循环获取有该点决定的斜率为-1的直线信息列表 end repeat end repeat scan(tlist) -进行扫描setUser(num)endon scan(t) -扫描列表程序,看是否有一方以获胜(即累计数目等于5)blackNum=0whiteNum=0 repeat with n=1 to t.countif tn 0 then if tn=1 thenblackNum=blackNum+1whiteNum=0 if blackNum=5 then -是否黑方获胜win(1)abort end if elsewhiteNum=whiteNum+1blackNum=0if whiteNum=5 then -是否白方获胜win(-1)abort end if end if elseblackNum=0whiteNum=0 end if end repeat end由以上我们就可以判断游戏胜负了。三.棋子布置和后悔按钮的代码设计1.介绍一下棋子的布置。初始时舞台上没有棋子,我们通过puppetsprite 来动态的根据需要把棋子放在舞台上并激活移动用户使用,这样不必在舞台上拖大量的精灵,时游戏显得混乱。我们这里用41及41以后的通道来共摆放棋子。具体运用时我们在电影脚本里面定义一个函数来完成这一需要多次用到的操作:根据nowNum的值来设置,为1是设置为黑子用户走子,-1则为白子用户。on setUser nowNumif nowNum=1 then nextname=blackmember(info).text=黑子走 elsenextname=whitemember(info).text=白子走 end ifrepeat with o=41 to the lastchannel-从41通道开始找到第一个memberNum为空的演员,来对其关联给对应的演员if sprite(o).memberNum=0 then -开始控制该通道puppetsprite o,true-设置位置等相关精灵属性sprite(o).loc=point(322,390)sprite(o).ink=36sprite(o).width=18sprite(o).height=18-设置对应membersprite(o).member=member(nextname)-添加按钮脚本x = script(chess).new()-因为设置scriptInstanceList时,不能覆盖已有的元素,固需要加入 sprite(o).scriptInstanceList= sprite(o).scriptInstanceList= sprite(o).scriptInstanceList.add(x)-强迫初始化sendsprite o,#beginsprite exit repeat end if end repeat end每次下完一颗棋子后,当没有玩家获胜时,则调用setUser(num)出现下一颗棋子让玩家移动。2.后悔按钮,就是把棋盘上的最近放置的一颗棋子去掉,并设置新的当前玩家。on mouseup mepuppetsound 1,regret -播放音效repeat with i= the lastchannel down to 42 -从最好一个通道往前面扫描-找到第一个memberNum不为空的通道,即最近放置的棋子if sprite(i).memberNum0 then Pos=sprite(i-1).OnlinePos -得到棋子的位置信息onlistPos1Pos2=0 -将onlist对应位置
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025河南洛阳西工区第二批公益性岗位招聘41人考试参考题库及答案解析
- 2025年绍兴市妇幼保健院公开招聘编外工作人员8人备考考试题库附答案解析
- 2025沈阳药科大学招聘高层次和急需紧缺人才22人(第二批)考试参考题库及答案解析
- 2025丽水遂昌县机关事业单位编外招聘37人备考考试题库附答案解析
- 2025上海12345市民服务热线呼叫中心招聘语音客服代表20人备考考试题库附答案解析
- 2025年泉州晋江市首峰中学招聘工作人员备考考试题库附答案解析
- 2025中国人口与发展研究中心编制内招聘2人备考考试题库附答案解析
- 2025年8月重庆两江假日酒店管理有限公司招聘12人备考考试题库附答案解析
- 2025浙江宁波市江北区教育局第二批非编特聘制教师招聘8人备考考试题库附答案解析
- 2025临沂郯城街道办事处招聘城乡公益性岗位人员(135人)考试参考题库及答案解析
- 2025甘肃省省直文博单位招聘事业编制工作人员26人笔试备考试题及答案解析
- 2025四川省公安厅警务辅助人员招聘(448人)笔试备考试题及答案解析
- 认识社会生活(教案)2025-2026学年统编版《道德与法治》八年级上册
- 一例跌倒护理不良事件分析
- 2025年社区网格员笔试考试题库及答案
- (2025年标准)返聘协议退休返聘协议书
- 3.1网络改变世界 议题式课件 统编版道德与法治八年级上册
- 走进焊接 课件 2.1百花齐放推陈出新-焊接方法
- (2025)中国汉字听写大赛全部试题库及答案
- 卵巢癌的课件
- 北京市律师协会律师办理法律尽职调查业务操作指引
评论
0/150
提交评论