




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
l Flash游戏制作实例-五子连珠l 五子连珠,在民间俗称“五子棋”,是一种流传很广的益智棋类游戏,游戏规则非常简单,适合各个年龄段的朋友玩,相信大家以前也一定玩过此游戏,传统的玩法是两玩家在围棋棋盘上进行比赛,这里玩家的对手将变成电脑,想不想和电脑过过招呢?下面我们就来学习使用Flash制作五子连珠这个游戏。游戏的主界面如图1所示: 图1游戏玩法:五子连珠这个游戏需要由两位选手一起来完成,其中一位是电脑,电脑在游戏中使用黑棋比赛,您在游戏中使用白棋进行比赛,游戏的目的是尽量将自己的棋在棋盘上排列成五颗棋子连在一起的直线,水平方向,垂直方向或者斜向都可以,但是不能有拐点,必须是一条直线,哪一方先连好,则胜利。玩家在游戏中一方面要尽量将自己的棋子连起来,另一方面也需要阻碍对手进行连子,不让对手轻易的将棋子连起来,直到有一方先连好五颗棋子,则游戏结束。游戏中为了防止一方没有看清对方上一步的落子位置,在棋盘的右上角将显示上一步的落子位置,棋子的位置根据棋盘上的横纵标识来决定(横向为1-15,纵向为A-O)。游戏制作思路:本游戏制作起来有一定的难度,难度的关键在于玩家中有一方是电脑,如何合理的控制电脑走棋是最关键的部分。如果要实现电脑的自动计算棋局和决定落子位置,就需要用到一些Ai(人工智能)方面的知识,在游戏制作中会详细讲解。棋类游戏一般都会在一个二维的棋盘上进行,所以自然的就会使用二维数组来记录棋子的位置和决定落子的位置,数组在棋类游戏中也是应用非常的广泛。游戏制作步骤:下面我们就来开始具体的游戏制作步骤:游戏素材的准备:1 棋子的准备:棋类游戏当然少不了棋子,本游戏中需要两类棋子,一种为黑色棋子,一种为白色棋子,默认情况下电脑使用黑色棋子,我们可以从外部导入两副棋子图片,也可以在Flash中进行手工绘制。本实例中我们就来自己制作两个棋子。新建一个Graphic组件,并命名为black graphic,使用椭圆工具绘制一个圆形,并填充上黑色,这样一个简单的黑色棋子就做好了,如图2所示:图2因为我们需要在游戏中使用Action对棋子进行控制,所以需要将上面做好的Graphic组件转换为Movie clip类型的组件。所以新建一个movie clip组件,命名为black,将组件black graphic拖到组件black的编辑区即可。按照同样的方法制作一个white graphic组件,并绘制一个白色的棋子,然后在建立相应的white movie clip组件,绘制好的白色棋子如图3所示:图32 控制按钮的制作:游戏中需要使用鼠标将棋子落到棋盘上,所以需要使用按钮结合棋子的方法,因为游戏中我们看到的实际是棋子,但是控制的是按钮,所以这里我们只需要制作一个简单的隐形按钮即可,按钮大小和棋子大小相似,如图4所示:图4当游戏结束后还需要有一个Replay按钮允许玩家重玩游戏,所以可以建立一个简单的按钮,用来控制游戏的再次运行,Replay按钮如图5所示:图53 控制游戏的MC:棋类游戏中少不了大量的Action程序控制,为了便于对游戏进行控制,一般将Action放在专门的Movie clip中,然后就可以在游戏的任何地方调用了。A:新建一个Movie clip组件,命名为blk,进入组件编辑状态后,在第一关键桢添加如下AS:stop();function makelist(maker) /自定义函数makelist,参数为maker,其作用是生成一个列表if (maker =white) /如果传递进函数的参数是whitecolor = 2;color_bad = 1;/设置两变量值 else /如果传递进函数的参数是blackcolor = 1;color_bad = 2;/设置两变量值for (i=0; i15; i+) /外循环,循环变量为I,循环次数为15次for (j=0; j15; j+) /外循环,循环变量为j,循环次数为15次,两次循环共15*15此,正好等于棋盘的大小,用来设/置棋盘if (_root.tableij 0) /table数组用来检查棋盘是否为空,为空,相应的值为1,否则为0for (k=0; k4; k+) if (maker =white) _puteri*15+jk = 0; else_root.playeri*15+jk = 0;/若前一步的落子为白棋,则后一步计算机落子,否则玩家落子 else /如果棋盘为空for (k=0; k4; k+) x = i;y = j;score = 5;while (_root.tablex+_root.dirk0y+_root.dirk1 = color) and (x+_root.dirk0 = 0) and (y+_root.dirk1 = 0) x = x + _root.dirk0;y = y + _root.dirk1;score = score * 2;if (_root.tablex+_root.dirk0y+_root.dirk1 = color_bad) and (x+_root.dirk0 = 0) and (y+_root.dirk1 = 0) score = score / 2;x = i;y = j;while (_root.tablex+_root.dirk+40y+_root.dirk+41 = color) and (x+_root.dirk+40 = 0) and (y+_root.dirk+41 = 0) x = x + _root.dirk+40;y = y + _root.dirk+41;score = score * 2;if (score 30) score = score * 2;if (_root.tablex+_root.dirk+40y+_root.dirk+41 = color_bad) and (x+_root.dirk+40 = 0) and (y+_root.dirk+41 = 0) score = score / 2;if (maker =white) _puteri*15+jk = score; else _root.playeri*15+jk = score;/初始化棋盘,根据上一步落子的不同,来计算一下一步的落子B:再新建一个Movie clip组件,命名为blk2,进入组件编辑状态后,在第一关键桢添加as:stop();在第六桢插入一个关键桢,并添加如下AS:if (_root.playnow = computer) / 如果先落子的为电脑,则初始化棋盘_root.func.makelist(white);_root.func.makelist(black);/分别调用前面定义的自定义函数,且传递不同的参数max_computer = 0;max_player = 0;k = 0;/定义三个变量for (j=0; j15; j+) for (i=0; i15; i+) for (k=0; k 50) max_computer = _puterj*15+ik ;xc = i;yc = j;if (_puterj*15+ik max_computer) max_computer = _puterj*15+ik ;xc = i;yc = j;if (_root.playerj*15+ik max_player) max_player = _root.playerj*15+ik ;xp = i;yp = j;if (max_computer max_player) x = xc;y = yc; else x = xp;y = yp;/ 绘制棋子num = y * 15 + x;removeMovieClip(_root.b add num);duplicateMovieClip(_root.white, white add num, num + 300);setProperty(_root.white add num, _x, 34.7 + x * 20);setProperty(_root.white add num, _y, 34.7 + y * 20);_root.tableyx = 2;/ 显示棋子_root.display = Xpos : + (x + 1);temp = chr ( y + 65);_root.display1 = Ypos : + temp;_root.playnow = player;/判断是否获胜xx = x;yy = y;for (k=0; k4; k+) if (_root.a_result 6) _root.a_result = 0;x = xx;y = yy;while (_root.tableyx = 2) and (y+_root.dirk1 = -1) and (x+_root.dirk0 = -1) x = x + _root.dirk0;y = y + _root.dirk1;/ _root.table+y+x+=+_root.tableyx_root.a_result = _root.a_result+1;x = xx;y = yy;while (_root.tableyx = 2) and (y+_root.dirk+41 = -1) and (x+_root.dirk+40 = -1) x = x + _root.dirk+40;y = y + _root.dirk+41;_root.a_result = _root.a_result+1;if (_root.a_result = 6) _root.playnow = nobody;if (_root.playnow =nobody) l C:新建一个Movie clip组件,并命名为bb,此组件用来计算电脑如何走棋,进入组件编辑状态后,在图层layer1绘制一个有填充色的矩形,然后在第5桢插入一个关键桢,在同样位置绘制一个大小相同填充色不同的矩形。新建一个图层,在矩形里输入提示文字:电脑走棋,然后再新建一个图层Action,在第一桢添加AS: stop();,在第8桢插入一个关键桢,在此桢添加如下AS:if (_root.playnow = computer) /初始化棋盘_root.func.makelist(white);_root.func.makelist(black);/调用自定义函数max_computer = 0;max_player = 0;k = 0;/定义三变量for (j=0; j15; j+) for (i=0; i15; i+) for (k=0; k 50) max_computer = _puterj*15+ik ;xc = i;yc = j;if (_puterj*15+ik max_computer) max_computer = _puterj*15+ik ;xc = i;yc = j;if (_root.playerj*15+ik max_player) max_player = _root.playerj*15+ik ;xp = i;yp = j;l if (max_computer max_player) x = xc;y = yc; else x = xp;y = yp;/ 绘制棋子num = y * 15 + x;removeMovieClip(_root.b add num);duplicateMovieClip(_root.white, white add num, num + 300);setProperty(_root.white add num, _x, 34.7 + x * 20);setProperty(_root.white add num, _y, 34.7 + y * 20);_root.tableyx = 2;/ 显示棋子_root.display = Xpos : + (x + 1);temp = chr ( y + 65);_root.display1 = Ypos : + temp;_root.playnow = player;/ 判断是否获胜xx = x;yy = y;for (k=0; k4; k+) if (_root.a_result 6) _root.a_result = 0;x = xx;y = yy;while (_root.tableyx = 2) and (y+_root.dirk1 = -1) and (x+_root.dirk0 = -1) x = x + _root.dirk0;y = y + _root.dirk1;/ _root.table+y+x+=+_root.tableyx_root.a_result = _root.a_result+1;x = xx;y = yy;while (_root.tableyx = 2) and (y+_root.dirk+41 = -1) and (x+_root.dirk+40 = -1) x = x + _root.dirk+40;y = y + _root.dirk+41;_root.a_result = _root.a_result+1;if (_root.a_result = 6) _root.playnow = nobody;/ 游戏结束if (_root.playnow =nobody) 最后的时间线如图6所示:图6D:再新建一个movie clip组件,命名为buttonclip,此组件用来控制双方的落子,进入组件编辑状态后,将前面做好的隐形按钮拖放到编辑区中,然后给第一桢添加AS:stop();.E:最后再制作一个movie clip,命名为gameover,此组件用来判断游戏是否结束,也就是判断是缶有一方已经连好了五颗棋子。进入组件编辑状态后,连续建立四个图层,分别为layer1,layer2,layer3和action,在layer1,layer2,layer3的第一桢插入空白,然后在第2桢绘制电脑获胜的提示信息,并将Replay按钮拖到编辑区中,给按钮添加As:on (release) 如图7所示:图7在layer1,layer2,layer3的第三桢按照同样的方法设置您胜利的提示信息,如图8所示:图8然后回到图层action,接下来就要添加具体的控制Action了,在此图层的前三个关键桢分别添加as: stop();,在第四关键桢添加如下AS:for (i=0; i=225; i+) removeMovieClip(_root.black add i);removeMovieClip(_root.white add i);removeMovieClip(_root.b add i);/清除棋盘上的棋子_root.gotoAndPlay(run);/跳转到游戏的开始最后的时间线如图9所示:图9布置主场景:游戏的主要工作完成后,接下来需要布置主场景了。首先使用绘图工具绘制出游戏中的棋盘,棋盘大小为15*15的矩阵,然后给棋盘标上横向和纵向的标识,如图10所示:图10分别将组件white,black,buttonclip,blk,bb和gameover拖到舞台的合适位置,如图11所示:图11组件white的实例名为:black组件black的实例名为:white组件buttonclip的实例名为:b组件blk的实例名为:func组件bb的实例名为:computerrun组件gameover的实例名为:gameoverman然后在棋盘上绘制两个Dynamic text动态文本框,用来显示上一步落子的位置,分别设置变量名为display和display1。最后,给第一关键祯添加as:stop();urls = 边城浪子-闪客帝国;num = 0;table = new Array();computer = new Array();player = new Array();a_result = 0;/ Table arrayfor (i=0; i15; i+) tablei = new Array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);/ Computer and player table listfor (j=0; j15; j+) for (i=0; i15; i+) computerj*15+i = new Arr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医院感染管理控制方案制定
- 职业英语技能大赛模拟题集
- 工业金属材料性能指标详尽说明
- 辽宁省大连市高中数学 第二章 数列(1)说课稿 新人教B版必修5
- 2023年高考模拟考试语文真题解析
- 企业环保节能宣传培训计划
- 销售人员业绩提升计划与执行案例
- 液化天然气利用技术在线考试试题
- 老年护理学在线作业题库汇编
- 水利工程安全文明施工管理细则
- 夜场员工合同协议书
- 【DAMA】2025智变-AI赋能政府与央国企智能化转型白皮书
- 新教材部编版二年级上册《4.彩虹》教学设计
- 航空宠物知识培训课件
- 护理人员在职继续教育培训与考评制度
- 综合实践活动课程设计
- 2025年法官员额考试题及答案
- 备考2025年成人高考-专升本-政治考点及必背知识点大全
- 公开课:自发性气胸病人的护理
- 教科版(2017版)科学四年上册《让小车运动起来》说课稿(附反思、板书)课件
- 经腋窝无充气腔镜甲状腺手术
评论
0/150
提交评论