本教程主要用Flash AS来编写一个智力过河小游戏,全部使用AS代码来实现。想学习的朋友可以一起来看看。
游戏规则:
一只大狮子,一只小狮子,一只大老虎、一只小老虎、一只大花豹,一只小花豹要到河对面去,只有大动物和小老虎会划船,船每次只能乘两只动物。大动物之间互相吃不了,小动物之间互相吃不了,如果大动物不在同类的小动物就会被异类大动物吃掉。
复制粘贴到第一帧,测试:
创建开始场景(); function 创建开始场景() { 创建TXT_MC(this, "游戏名", "智力过河", 200, 100, 300, false); 创建TXT_MC(this, "游戏开始", "游戏开始", 250, 200, 100, true); 创建TXT_MC(this, "游戏说明", "游戏说明", 250, 250, 100, true); 游戏开始.onPress = function() { 删除开始场景(); 创建游戏场景(); }; 游戏说明.onPress = function() { 删除开始场景(); 创建说明场景(); }; } function 删除开始场景() { 游戏名.removeMovieClip(); 游戏开始.removeMovieClip(); 游戏说明.removeMovieClip(); } function 删除说明场景() { 规则.removeMovieClip(); 说明.removeMovieClip(); 游戏开始.removeMovieClip(); } function 创建说明场景() { var 内容 = "一只大狮子,一只小狮子,一只大老虎、一只小老虎、一只大花豹,"+"\\n"+"一只小花豹要到河对面去,只有大动物和小老虎会划船,船每次只能乘"+"\\n"+"两只动物。大动物之间互相吃不了,小动物之间互相吃不了,如果大动"+"\\n"+"物不在同类的小动物就会被异类大动物吃掉。"; 创建TXT_MC(this, "规则", "游戏规则", 230, 50, 150, false); 创建TXT_MC(this, "说明", 内容, 50, 100, 120, false); 创建TXT_MC(this, "游戏开始", "游戏开始", 250, 200, 100, true); 游戏开始.onPress = function() { 删除说明场景(); 创建游戏场景(); }; } function 创建TXT_MC(路径, 名称, 文本, 坐标X, 坐标Y, 大小, 框) { var MC = 路径.createEmptyMovieClip(名称, 路径.getNextHighestDepth()); MC._x = 坐标X; MC._y = 坐标Y; MC._xscale = MC._yscale=大小; var TXT = MC.createTextField("TXT", 0, 0, 0, 0, 0); TXT.text = 文本; TXT.selectable = false; TXT.autoSize = true; if (框 == true) { MC.onRollOver = function() { this.TXT.border = true; this.onReleaseOutside = this.onRollOut=function () { this.TXT.border = false; }; }; } return MC; } this.createEmptyMovieClip("遮照MC", this.getNextHighestDepth()); function 创建游戏场景() { var 船上成员 = []; var 左岸 = ["大狮子", "小狮子", "大老虎", "小老虎", "大花豹", "小花豹"]; this.createEmptyMovieClip("左岸MC", this.getNextHighestDepth()); 创建河流(); this.createEmptyMovieClip("码头MC", this.getNextHighestDepth()); 画方块(码头MC, 0, 348, 94, 50, true); 画方块(码头MC, 454, 348, 94, 50, true); this.createEmptyMovieClip("提示MC", this.getNextHighestDepth()); 左岸MC._y = 100; 左岸MC._x = 20; for (var i = 0; i<左岸.length; i++) { if (i%2 == 0) { var MC = 创建TXT_MC(左岸MC, 左岸[i], 左岸[i], 0, 40*i, 100, true); MC.名字 = MC._name; MC.划船 = true; MC.方位 = "左岸"; MC.大小 = "大"; } else { var MC = 创建TXT_MC(左岸MC, 左岸[i], 左岸[i], 0, 40*i, 100, true); MC.名字 = MC._name; MC.划船 = false; MC.方位 = "左岸"; MC.大小 = "小"; } MC.onPress = function() { if (船上成员.length == 2) { 提示信息("船上不能再乘座更多的动物了"); } if (船上成员.length<2 && 船MC.行动 == false && this.方位 == 船MC.状态) { this._visible = false; this.方位 = "船上"; 船上成员.push(this); eval("船仓"+船上成员.length).TXT.text = this.名字; } }; } 左岸MC["小老虎"].划船 = true; this.createEmptyMovieClip("船MC", this.getNextHighestDepth()); 船MC._y = 360; 船MC._x = 100; 船MC.Y = 0; 船MC.状态 = "左岸"; 船MC.行动 = false; 船MC.速度 = 20; 画船(船MC); 创建TXT_MC(船MC, "TXT", "===>>", 40, -2, 100, false); 船MC.onPress = function() { if (this.行动 == false && 是否能划船(船上成员) && 能否呆船上(船上成员) && 岸上(this.状态)) { this.行动 = true; 船移动(this); } }; 创建TXT_MC(this, "船仓1", "", 船MC._x+35, 船MC._y-20, 100, true); 创建TXT_MC(this, "船仓2", "", 船MC._x+35, 船MC._y-40, 100, true); 船仓1.onPress = function() { if (船MC.状态 == "左岸") { 左岸MC[this.TXT.text]._visible = true; 左岸MC[this.TXT.text]._x = 0; 左岸MC[this.TXT.text].方位 = "左岸"; 删除(船上成员, this.TXT.text); this.TXT.text = 船仓2.TXT.text; 船仓2.TXT.text = ""; } if (船MC.状态 == "右岸") { 左岸MC[this.TXT.text]._visible = true; 左岸MC[this.TXT.text]._x = 480; 左岸MC[this.TXT.text].方位 = "右岸"; 删除(船上成员, this.TXT.text); this.TXT.text = 船仓2.TXT.text; 船仓2.TXT.text = ""; var n = 0; for (var i in 左岸MC) { if (左岸MC[i].方位 == "右岸") { n++; if (n == 6) { 提示信息("地球已经不适合你居住"+"\\n"+"快去上火星去吧!!"); 创建结束画面(); return; } } } } }; 船仓2.onPress = function() { if (船MC.状态 == "左岸") { 左岸MC[this.TXT.text]._visible = true; 左岸MC[this.TXT.text]._x = 0; 左岸MC[this.TXT.text].方位 = "左岸"; 删除(船上成员, this.TXT.text); this.TXT.text = 船仓2.TXT.text; 船仓2.TXT.text = ""; } if (船MC.状态 == "右岸") { 左岸MC[this.TXT.text]._visible = true; 左岸MC[this.TXT.text]._x = 480; 左岸MC[this.TXT.text].方位 = "右岸"; 删除(船上成员, this.TXT.text); this.TXT.text = 船仓2.TXT.text; 船仓2.TXT.text = ""; } }; 返回开始(); } function 画船(MC) { MC.lineStyle(0, 0); MC.moveTo(0, 0); MC.lineTo(10, 15); MC.lineTo(100, 15); MC.lineTo(110, 0); MC.lineTo(0, 0); } function 船移动(MC) { MC.onEnterFrame = function() { this._x += this.速度; 船仓1._x += this.速度; 船仓2._x += this.速度; this.状态 = "航行"; if (this._x>=340) { this.行动 = false; this.速度 *= -1; this.TXT.TXT.text = "<<==="; this.状态 = "右岸"; delete this.onEnterFrame; } if (this._x<=100) { this.行动 = false; this.速度 *= -1; this.TXT.TXT.text = "===>>"; this.状态 = "左岸"; delete this.onEnterFrame; } }; } function 是否能划船(数组) { for (var i = 0; i<数组.length; i++) { if (数组[i].划船 == true) { return true; } } 提示信息("这条船上没有能划船的动物"); return false; } function 能否呆船上(数组) { if (数组.length == 2) { var TXT0 = 数组[0].名字; var TXT1 = 数组[1].名字; if (数组[0].大小 == 数组[1].大小 || TXT0.substring(1, 3) == TXT1.substring(1, 3)) { return true; } } else { return true; } 提示信息("船上的大动物会吃掉小动物"); return false; } function 岸上(岸) { //这个算法不好`实在想不出其他的好算法 var 大数组 = new Array(); var 小数组 = new Array(); for (var i in 左岸MC) { if (左岸MC[i].方位 == 岸) { if (左岸MC[i].大小 == "大") { 大数组.push(左岸MC[i]._name.substring(1, 3)); } if (左岸MC[i].大小 == "小") { 小数组.push(左岸MC[i]._name.substring(1, 3)); } } } var 小记数 = 小数组.length; var 大记数 = 大数组.length; if (小记数<=0) { return true; } if (大记数<=0) { return true; } var 记数 = 0; for (var i = 0; i<小记数; i++) { var 对象 = 小数组[i]; for (var n = 0; n<大记数; n++) { if (对象 == 大数组[n]) { 记数++; break; } } } if (记数 == 小记数) { return true; } else { 提示信息("岸上的大动物会吃掉小动物"); return false; } } function 删除(数组, 对象) { for (var i = 0; i<数组.length; i++) { if (数组[i].名字 == 对象) { 数组.splice(i, 1); return true; } } } function 画方块(MC, X, Y, 宽, 高, 填充) { if (填充 == true) { MC.beginFill(0xFFFFFF, 100); } MC.lineStyle(0, 0); MC.moveTo(X, Y); MC.lineTo(X+宽, Y); MC.lineTo(X+宽, 高+Y); MC.lineTo(X, 高+Y); MC.lineTo(X, Y); MC.endFill(); } function 创建河流() { var 河水= "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"; var MC = 创建TXT_MC(this, "河流", 河水, 0, 365, 100, false); MC.X = 0; MC.onEnterFrame = function() { this._x += Math.cos(this.X)*1; this.X += 0.1; }; } function 提示信息(内容) { 提示MC.clear(); 画方块(提示MC, 180, 50, 200, 70); 提示MC.计时 = 0; 提示MC["提示"].removeMovieClip(); 提示MC.onEnterFrame = function() { if (this.计时 == 0) { this._visible = true; 创建TXT_MC(提示MC, "提示", 内容, 提示MC._x+190, 提示MC._y+70, 115, false); } else if (this.计时>30) { this._visible = false; delete onEnterFrame; } this.计时++; }; } function 创建结束画面() { 左岸MC.removeMovieClip(); 船MC.removeMovieClip(); } function 返回开始() { 创建TXT_MC(_root, "开始", "重新"+"\\n"+"开始", 490, 360, 100, true); 开始.onPress = function() { loadMovie(_url, _root); }; } 画方块(遮照MC, 0, 0, 550, 400, true); _root.setMask(遮照MC); 画方块(this, 0, 0, 548, 398, false); //////////////////////////////////////////////////////////// var 菜单 = new ContextMenu(); 菜单.hideBuiltInItems(); var QQ = new ContextMenuItem("QQ:31559783", 实行函数); QQ.separatorBefore = true; 菜单.customItems.push(QQ); this.menu = 菜单; function 实行函数() { } |
进入论坛参与讨论:http://www.missyuan.com/viewthread.php?tid=424649