//--- Flash MX 贪吃蛇游戏(1Kb) 制作Strille. 版本 2.2, 共计 746 字节 //--- 复制以下代码在主场景的第一帧场景大小为 512x280 , FPS 16 createTextField("t", 1, 1, 255, 511, 32); // create a text field to write score and instructions // 创建一个文本框用于输出成绩和指示 t.text = "Snake Game\t-\tPress SPACE"; // 显示开始信息 beginFill(0xeeeeee); lineStyle(1); lineTo(511, 0); lineTo(511, 256); lineTo(0, 256); endFill(); // 沿边框绘制背景 Key.addListener(t); // 使用一个已存在的Object 作键盘帧听 (就样就不用再创建新Obejct,从而节约了空间) t.onKeyDown = function() { // 当键盘按下后,去执行自定义的这个方法 c = Key.getCode()-37; // 获得按键的ASCII码 (变量 c 每次获取相对的ASCII码) if (!(c>>2)) { // 方向键的表示 (c = 0, 1, 2 or 3) if (c != q[0]) // 只将新的方向键存入队列 q q.unshift(c); return; // 在队列中保存,并结束该方法(函数) } // 空格或其它键不同于按下的方向键 x = 32*8 + 32*520; // 蛇的起点坐标( 左边 + 右边:可被视为 x、y 坐标) q = []; // 用于存储按键的队列(因此改变在一帧中的X坐标对于所有帧中的X坐标都起作用) m = []; // 创建一个数组用于存储食物的坐标和蛇 createEmptyMovieClip("s", w=0); // 创建一个空影片用于存储蛇和食物的影片剪辑,并重置蛇的计数器(w) e = 2*(m[x-520] = 2*(r=1)); // 设置擦除计数器(e) to 4, 设置当前方向(r)为向上(1),当蛇经过食物后立即设置食物位置为当前设置的位置 onEnterFrame = function () { // 主函数 c = q.pop(); // 在队列中提取出下一轮变换(当队列为空时,提取数是undefined的) if (c%2 != r%2) // 检查其不属于undefined和180度旋转(避免任意按下一个键后就改变蛇的方向) if (c != undefined) r = c; // 改变当前方向为新的方向 x += [-1, -65, 1, 65][r]*8; // 移动蛇到一个新的X位置 (-1 = left, -65 = up, 1 = right, 65 = down) if (m[x] == 1 or !(x%520) or !(int(x/520) % 33)) { // 如果新的位置在蛇身上或出了边界则 GAME OVER delete onEnterFrame; // 退出主循环函数 t.text += "\tGAME OVER!"; return; // 输出 GAME OVER! 并退出主程序 } with(s.createEmptyMovieClip(w, w)) { // 放置蛇身 (第一次循环时用于放置食物) beginFill(255<<16); // 首先将食物设为红色 if (w++) // blue snake color the other times beginFill(0x555588); _x = x%520; _y = int(x/520)*8; // 设置蛇身的位置 lineTo(-7, 0); lineTo(-7, -7); lineTo(0, -7); endFill(); // 绘制一个方形 } m[x] += 1; // 设置当前位置为"已占用"区作为蛇身 if (m[x] == 3) { // 检查是否有食物在新的位置上 t.text = "Score: " +(w-(e-=5)-2)*2; // 延迟擦除计数器5(蛇身每次增长5), 计算并输出分数 (一个食物加10分) do {} while (m[c = (s[0]._x = 8+random(64)*8)+(s[0]._y = 8+random(32)*8)*65]); // 寻找一个空位置放置点, 并存储该数值, 并设置食物的影片剪辑 m[c] = 2; //设置选出的位置为为大于2的线路上 } if (e) { // if not food MC (s[0]) then erase last snake MC and entry in array m c = s[e]; // 获得最后一个影片剪辑 delete m[c._x+65*c._y]; removeMovieClip(c); // 删除数组 m 中该元素的值并删除影片剪辑 } e++; // 将蛇的擦除计数器加一 } }
|