快速业务通道

Flash贪吃蛇游戏AS代码翻译

作者 凌众技术 来源 网页制作 浏览 发布时间 2012-03-10

翻译:

//--- 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++;
       // 将蛇的擦除计数器加一
    }
}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号