通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 my小屋
联系我们
设为首页
加入收藏

 

qq,asp,php,jsp,xml,sql,.net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>网络媒体>>director>>正文 新版上线![旧版]
注:打开慢时请稍等

五子棋游戏的制作(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
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
五子棋游戏的制作(2) director 编写“拼图游戏”(1) director 编写“拼图游戏”(2)
director 编写“拼图游戏”(3) 用director 制作配对记忆游戏 flash游戏制作:打砖块
flash游戏制作:弹力球 flash游戏制作:找错误 flash趣味游戏制作:猜数字
flash游戏制作:七巧板 利用条件语句制作单词游戏(as条件语句 asp作的剪包锤游戏
如何在win20003中更好的玩游戏
最新更新 热点排行 推荐新闻
发布director mx 2004
directmedia xtra 在 director 中的应
speech xtra 应用(director mx 新增 
谈谈director作品的发布模式
关于多媒体程序运行速度的研究
博客网总裁辞职
发布director mx 2004
directmedia xtra 在 director 中的应
speech xtra 应用(director mx 新增 
谈谈director作品的发布模式
关于多媒体程序运行速度的研究
director mx 2004教程--哪些人适合使用
director mx 2004教程--常用多媒体编著
director mx 2004教程--为什么选择dir
director mx 2004教程--director与fla
发布director mx 2004
directmedia xtra 在 director 中的应
speech xtra 应用(director mx 新增 
谈谈director作品的发布模式
关于多媒体程序运行速度的研究
优秀公益广告作品欣赏(8)
java数据类型转换
windows xp专业版iis连接数的更改
新开放qq免费挂级网站
优秀公益广告作品欣赏(7)
免费在qq上看在线电影电视听音乐
qq最新版下载 2006 beta2 体验新感受 
office2007简体中文版浮出水面 美图抢
qq珊瑚虫外挂4.0版本发布!
免费把qq炫铃设为本机qq的系统提示音
dreamweaver mx 2004从零开始(1)
利用css改善网站可访问性
如何让mm的脸通透可人
msn8.0下载
asp 五大高效提速技巧
如何在win20003中更好的玩游戏
qq收费头像免费使用的方法 
微软将在华推分期付款,充值卡pc 可低价
 amd处理器am2测试 风扇竟运行7分钟
exeplorer.exe错误的问题的总结、解决
 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights © 2004-2006 iyit.net all rights reserved.
网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息