Link:INB Home|INB English| INB русский язык|INB العربية|INB Türkiye|INB فارسی|INB Español|INB Français|INB Português|INB Deutsch|INB 國語|INB 中文|INB 日本语|INB 한국어|INB ภาษาไทย|INB tiếng Việt||FL 教程Flash 貪吃蛇游戲AS代碼翻譯
INB 國語論壇
歡迎光臨(工業與草根研究員)對工業時代充滿了戰鬥精神,你和我都通過網絡空間與當地草根精神研究員來到瘋狂實驗室。家inbforum.com,永久名稱:tw-inbforum.forums2u.com
INB 國語論壇
歡迎光臨(工業與草根研究員)對工業時代充滿了戰鬥精神,你和我都通過網絡空間與當地草根精神研究員來到瘋狂實驗室。家inbforum.com,永久名稱:tw-inbforum.forums2u.com
INB 國語論壇

歡迎光臨(工業與草根研究員)對工業時代充滿了戰鬥精神,你和我都通過網絡空間與當地草根精神研究員來到瘋狂實驗室。家inbforum.com,永久名稱:tw-inbforum.forums2u.com


您沒有登錄。 請登錄註冊

《《《《《《《上一页INBforum   向下

上一页INBforum》》》》》》》上一篇主題 下一篇主題 向下  內容 [第1頁(共1頁)]

1FL 教程Flash 貪吃蛇游戲AS代碼翻譯 Empty FL 教程Flash 貪吃蛇游戲AS代碼翻譯 周四 3月 03, 2011 6:52 am

Admin

Admin
Admin
今天翻譯了一段經典的貪吃蛇代碼,譯后感覺還有很多地方不太妥當,很多不妥的地方希望大家多指教





原文:












//--- 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 !(xR0) 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 = xR0; _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
}
}





翻譯:














//--- 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 !(xR0) 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 = xR0; _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://tw.inbforum.com

上一页INBforum   向下

上一页INBforum上一篇主題 下一篇主題 回頂端  內容 [第1頁(共1頁)]

這個論壇的權限:
無法 在這個版面回復文章

Copyright ©2009-2010 LTD Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

IT:SINGLESERVGoogle谷歌翻译TranslateFORUMSOFTLAYERGoogle谷歌广告联盟AdSenseAsia

 

免费申请论坛 | ©phpBB | 免費論壇互助中心 | 違法舉報 | Latest discussions