快速业务通道

Flash贪吃蛇游戏AS代码翻译

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

今天翻译了一段经典的贪吃蛇代码,译后感觉还有很多地方不太妥当,很多不妥的地方希望大家多指教

原文:

//--- Flash MX Snake Game 1Kb by Strille. Version 2.2, 746 bytes
//--- Paste this code on frame 1 and set scene size to 512x280 and Frame Rate to 16
//--- The code is not written with speed in mind, only small file size. Not that it is slow :-)
createTextField("t", 1, 1, 255, 511, 32); // create a text field to write score and instructions
t.text = "Snake Game\t-\tPress SPACE"; // show start text
beginFill(0xeeeeee); lineStyle(1); lineTo(511, 0); lineTo(511, 256); lineTo(0, 256); endFill(); // draw background with border
Key.addListener(t); // use an existing object as key listener (we don''t waste bytes by creating a new object)
t.onKeyDown = function() { // define an anonymous method to execute when a key is pressed
    c = Key.getCode()-37; // get key code (c is a variable used "locally" several times)
    if (!(c>>2)) { // arrow keys pressed (c = 0, 1, 2 or 3)
        if (c != q[0]) // only add to the queue if it is a new direction
            q.unshift(c);
        return; // save the turn in the queue and exit method
    }
    // SPACE or another key other than an arrow key has been pressed
    x = 32*8 + 32*520; // snake start pos (left and right side of + can be viewed as x and y coord
    q = []; // a queue to store key presses (so that x number of key presses during one frame are spread over x number of frames)
    m = []; // create an array to store food pos and snake
    createEmptyMovieClip("s", w=0); // create MC to store the snake and the food MC and reset snake counter(w)
    e = 2*(m[x-520] = 2*(r=1)); // set erase counter (e) to 4, set current direction (r) to up (1) and set food on the position the snake will be over the first time to place food
    onEnterFrame = function () { // MAIN function
        c = q.pop(); // pick the next turn in the queue (may be undefined if queue is empty)
        if (c%2 != r%2) // and check that it is not undefined and not a 180 degree turn (annoying to be able to turn into the snake with one key press)
            if (c != undefined)
                r = c; // change current direction to the new value
        x += [-1, -65, 1, 65][r]*8; // move the snake to a new x position (-1 = left, -65 = up, 1 = right, 65 = down)
        if (m[x] == 1 or !(x%520) or !(int(x/520) % 33)) { // GAME OVER if it is a snake block or outside the map on the next position
            delete onEnterFrame; // quit looping main function
            t.text += "\tGAME OVER!"; return; // type game over text and exit main
        }
        with(s.createEmptyMovieClip(w, w)) { // place a snake block (or food block the first loop)
            beginFill(255<<16); // red food color first time
            if (w++) // blue snake color the other times
                beginFill(0x555588);
            _x = x%520; _y = int(x/520)*8; // set snake block position
            lineTo(-7, 0); lineTo(-7, -7); lineTo(0, -7); endFill(); // draw a square
        }
        m[x] += 1; // set current pos as "occupied" by a snake block
        if (m[x] == 3) { // check if there is a food block on the new pos
            t.text = "Score: " +(w-(e-=5)-2)*2; // delay erase counter with 5 (the snake will grow 5 blocks each time), calculate and type score (+10p for a food block)
            do {} while (m[c = (s[0]._x = 8+random(64)*8)+(s[0]._y = 8+random(32)*8)*65]); // pick a free spot to place the food, save that number, place the food MC
            m[c] = 2; // set the position picked on the line above to 2
        }
        if (e) { // if not food MC (s[0]) then erase last snake MC and entry in array m
            c = s[e]; // get last MC
            delete m[c._x+65*c._y]; removeMovieClip(c); // delete the value in the array m and delete the MC
        }
        e++; // increase erase snake counter
    }
}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号