※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


FORKED
  1. // forked from flashrod's Tetris
  2. package {
  3.     import flash.display.Sprite;
  4.     import flash.text.TextField;
  5.     import flash.events.Event;
  6.     import flash.events.KeyboardEvent;
  7.     public class Tetris extends Sprite {
  8.         private const W:int = 10;
  9.         private const H:int = 20;
  10.         private const UNIT:int = 10;
  11.         private const COLOR:Array =[0x000000, 0x00FFFF, 0xFFFF00, 0x22FF22, 0xFF2222, 0x4444FF, 0xFF8844, 0xFF22FF];
  12.         private const PAT:Array =[[[1111]],
  13.                                   [[020], [222]],
  14.                                   [[330], [033]],
  15.                                   [[044], [440]],
  16.                                   [[55], [50], [50]],
  17.                                   [[66], [06], [06]],
  18.                                   [[77], [77]]];
  19.         private const SPEED:Array = [3020105];
  20.         private const VK_H:int = 72// h
  21.         private const VK_J:int = 74// j
  22.         private const VK_K:int = 75// k
  23.         private const VK_L:int = 76// l
  24.         private const VK_SPC:int = 32// space
  25.         private var field:Array = [];
  26.         private var piece:Array;
  27.         private var next:Array;
  28.         private var text:TextField = new TextField();
  29.         private var keytable:Array = [];
  30.         private var count:int = 0;
  31.         private var step:int = 0;
  32.         private var px:int;
  33.         private var py:int;
  34.         public function Tetris() {
  35.             text.x = W*UNIT;
  36.             text.text="Next:";
  37.             addChild(text);
  38.             var t:TextField = new TextField();
  39.             t.x = W * UNIT;
  40.             t.y = 6 * UNIT;
  41.             t.text = "usage: h,j,k,l,SPACE";
  42.             addChild(t);
  43.             field = new Array(H).map(function():*{
  44.                 return new Array(W).map(function():*{
  45.                     return 0;
  46.                 })
  47.             });
  48.             keytable[VK_H] = function():void {px -= space(px-1, py, piece)};
  49.             keytable[VK_J] = function():void {rotate(true)};
  50.             keytable[VK_K] = function():void {rotate(false)};
  51.             keytable[VK_L] = function():void {px += space(px+1, py, piece)};
  52.             keytable[VK_SPC] = function():void {drop(); pick();};
  53.             stage.addEventListener(KeyboardEvent.KEY_DOWN, function(e:KeyboardEvent):void {
  54.                 if (keytable[e.keyCode]) {
  55.                     keytable[e.keyCode]();
  56.                     repaint();
  57.                 }
  58.             });
  59.             pick();
  60.             pick();
  61.             addEventListener(Event.ENTER_FRAME, function(e:Event):void {
  62.                 if (--step < 0) {
  63.                     step=SPEED[int(count/10)];
  64.                     if (space(px, py+1, piece)) {
  65.                         ++py;
  66.                         repaint();
  67.                     } else {
  68.                         drop();
  69.                         pick();
  70.                     }
  71.                 }
  72.             });
  73.         }
  74.         private function rotate(clock:Boolean):void {
  75.             var r:Array = new Array(piece[0].length).map(function():*{return [];});
  76.             for (var j:int = 0; j<piece.length; ++j)
  77.                 for (var i:int = 0; i < r.length; ++i)
  78.                     if (clock)
  79.                         r[i][piece.length-1-j] = piece[j][i];
  80.                     else
  81.                         r[r.length-1-i][j] = piece[j][i];
  82.             if (space(px, py, r))
  83.                 piece = r;
  84.         }
  85.         private function repaint():void {
  86.             graphics.clear();
  87.             for (var j:int = 0; j < H; ++j)
  88.                 for (var i:int = 0; i < W; ++i) {
  89.                     var g:int = 0;
  90.                     if (py <= j && j < (py+piece.length) && px <= i && i < (px+piece[0].length))
  91.                         g = piece[j-py][i-px];
  92.                     if (g == 0)
  93.                         g = field[j][i];
  94.                     graphics.beginFill(COLOR[g]);
  95.                     graphics.drawRect(i*UNIT, j*UNIT, UNIT, UNIT);
  96.                 }
  97.             for (j = 0; j < next.length; ++j)
  98.                 for (i = 0; i < next[j].length; ++i) {
  99.                     graphics.beginFill(COLOR[next[j][i]]);
  100.                     graphics.drawRect((i+W+1)*UNIT, (j+2)*UNIT, UNIT, UNIT);
  101.                 }
  102.         }
  103.         private function space(x:int, y:int, p:Array):int {
  104.             for (var j:int = 0; j < p.length; ++j) {
  105.                 if (0 > (y+j) || (y+j) >= H)
  106.                     return 0;
  107.                 for (var i:int = 0; i < p[j].length; ++i) {
  108.                     if (0 > (x+i) || (x+i) >= W)
  109.                         return 0;
  110.                     if (p[j][i] && field[y+j][x+i])
  111.                         return 0;
  112.                 }
  113.             }
  114.             return 1;
  115.         }
  116.         private function drop():void {
  117.             for (; space(px, py+1, piece); py++)
  118.                 ;
  119.             for (var j:int = 0; j < piece.length; ++j)
  120.                 for (var i:int = 0; i < piece[j].length; ++i)
  121.                     if (piece[j][i])
  122.                         field[py+j][px+i] = piece[j][i];
  123.             for (j=0; j<H; ++j)
  124.                 if (field[j].indexOf(0) < 0) {
  125.                     field.splice(j, 1);
  126.                     field.unshift([]);
  127.                     for (i=0; i<W; ++i)
  128.                         field[0][i] = 0;
  129.                 }
  130.             count++;
  131.             if (count/10 >= SPEED.length)
  132.                 count = 0;
  133.         }
  134.         private function pick():void {
  135.             piece = next;
  136.             if (piece != null) {
  137.                 px = (W-piece[0].length)/2;
  138.                 py = 0;
  139.                 if (!space(px, py, piece))
  140.                     text.text="GAME OVER";
  141.             }
  142.             next = PAT[int(Math.random()*PAT.length)];
  143.         }
  144.     }
  145. }
noswf
  1. // forked from flashrod's Tetris
  2. //
  3. // 1. 移動を矢印キーに変更
  4. // 2. 回転をZ,Xキーに変更
  5. // 3. いきなり落下ではなく、加速するように
  6. // 4. スピードアップは10ライン消すごとに変更
  7. // 5. 50ライン消すとレベル0に戻ります。enjoy!!
  8. package {
  9.    import flash.display.Sprite;
  10.    import flash.text.TextField;
  11.    import flash.events.Event;
  12.    import flash.events.KeyboardEvent;
  13.    [SWF(width = "240", height = "352", backgroundColor = "0xf0f0f0", frameRate = "60")]
  14.    public class Main extends Sprite {
  15.        private const W:int = 10;
  16.        private const H:int = 20;
  17.        private const UNIT:int = 16// 一つのブロックサイズ
  18.        // カラーテーブル
  19.        private const COLOR:Array =[0x000000, 0x00FFFF, 0xFFFF00,
  20. 0x22FF22, 0xFF2222, 0x4444FF, 0xFF8844, 0xFF22FF];
  21.        // ブロックパターン、インデックスは色を表す、0は抜き
  22.        private const PAT:Array =[[[1111]], //棒
  23.                                  [[020], [222]], //凸
  24.                                  [[330], [033]], //逆S
  25.                                  [[044], [440]], //S
  26.                                  [[55], [50], [50]], //逆L
  27.                                  [[66], [06], [06]], //L
  28.                                  [[77], [77]]];//四角
  29.        // 落下速度
  30.        //
  31.        private const SPEED:Array = [603020105];
  32.        private const DROP_SPEED:int = 2;
  33.        private const LEVEL_UP_LINES:int = 10;
  34.        // キーコード
  35.        private const VK_LEFT:int = 37// 懼
  36.        private const VK_ROTLEFT:int = 90// z
  37.        private const VK_ROTRIGHT:int = 88// x
  38.        private const VK_RIGHT:int = 39// 懼
  39.        private const VK_DROP:int = 40// 懼
  40.        // 変数一覧
  41.        private var field:Array = [];
  42.        private var piece:Array;
  43.        private var next:Array;
  44.        private var text:TextField = new TextField();
  45.        private var score_:TextField = new TextField();
  46.        private var keytable:Array = [];
  47.        private var step:int = 0;
  48.        private var px:int;
  49.        private var py:int;
  50.        private var isDrop_:Boolean = false;
  51.        private var speedLevel_:int = 0//落下速度のレベル
  52.        private var deleteLine_:int = 0//消去したライン数
  53.        public function Main() {
  54.            // 次のブロック
  55.            text.x = W * UNIT;
  56.            text.y = 0 * UNIT;
  57.            text.text="Next:";
  58.            addChild(text);
  59.            // スコア
  60.            score_.x = W * UNIT;
  61.            score_.y = 6 * UNIT;
  62.            addChild(score_);
  63.            updateScore();
  64.            // 操作説明
  65.            var t:TextField = new TextField();
  66.            t.x = W * UNIT;
  67.            t.y = 11 * UNIT;
  68.            t.text = "usage: ←,→,↓,Z,X";
  69.            addChild(t);
  70.            // フィールド(H * W のサイズで0埋め)
  71.            field = new Array(H).map(function():*{
  72.                return new Array(W).map(function():*{
  73.                    return 0;
  74.                })
  75.            });
  76.            // 最初に二つ落として、最初のブロックとNEXTブロックを設定する
  77.            pick();
  78.            pick();
  79.            // イベント登録
  80.            addEventListener(Event.ENTER_FRAME, onEnterFrame);
  81.            setupKeyDownEvent();
  82.        }
  83.        private function onEnterFrame(e:Event):void {
  84.            if (--step < 0) {
  85.                if (!isDrop_)
  86.                  step=SPEED[speedLevel_];
  87.                else
  88.                  step = DROP_SPEED;
  89.                if (space(px, py+1, piece)) {
  90.                    ++py;
  91.                    repaint();
  92.                } else {
  93.                    drop();
  94.                    pick();
  95.                }
  96.            }
  97.        }
  98.        private function setupKeyDownEvent():void {
  99.            keytable[VK_LEFT] = function():void {px -= space(px-1, py, piece)};
  100.            keytable[VK_ROTLEFT] = function():void {rotate(true)};
  101.            keytable[VK_ROTRIGHT] = function():void {rotate(false)};
  102.            keytable[VK_RIGHT] = function():void {px += space(px+1, py, piece)};
  103.            keytable[VK_DROP] = function():void { if (!isDrop_) {
  104. isDrop_ = true; step = DROP_SPEED; } };
  105.            stage.addEventListener(KeyboardEvent.KEY_DOWN, function
  106. (e:KeyboardEvent):void {
  107.                if (keytable[e.keyCode]) {
  108.                    keytable[e.keyCode]();
  109.                    repaint();
  110.                }
  111.            });
  112.            stage.addEventListener(KeyboardEvent.KEY_UP, function
  113. (e:KeyboardEvent):void {
  114.               if (e.keyCode == VK_DROP) {
  115.                   isDrop_ = false;
  116.               }
  117.            });
  118.        }
  119.        // 回転
  120.        private function rotate(clock:Boolean):void {
  121.            var r:Array = new
  122. Array(piece[0].length).map(function():*{return [];});
  123.            for (var j:int = 0; j<piece.length; ++j)
  124.                for (var i:int = 0; i < r.length; ++i)
  125.                    if (clock)
  126.                        r[i][piece.length-1-j] = piece[j][i];
  127.                    else
  128.                        r[r.length-1-i][j] = piece[j][i];
  129.            if (space(px, py, r))
  130.                piece = r;
  131.        }
  132.        // 再描画
  133.        private function repaint():void {
  134.            // 一度画面をクリア
  135.            graphics.clear();
  136.            // フィールドブロック
  137.            for (var j:int = 0; j < H; ++j)
  138.                for (var i:int = 0; i < W; ++i) {
  139.                    var g:int = 0;
  140.                    // 落下中ピース
  141.                    if (py <= j && j < (py+piece.length) && px <= i &&
  142. i < (px+piece[0].length))
  143.                        g = piece[j-py][i-px];
  144.                    // フィールド配置済みピース
  145.                    if (g == 0)
  146.                        g = field[j][i];
  147.                    // 描画
  148.                    graphics.beginFill(COLOR[g]);
  149.                    graphics.drawRect(i*UNIT, j*UNIT, UNIT, UNIT);
  150.                }
  151.            // ネクストブロック
  152.            for (j = 0; j < next.length; ++j)
  153.                for (i = 0; i < next[j].length; ++i) {
  154.                    graphics.beginFill(COLOR[next[j][i]]);
  155.                    graphics.drawRect((i+W+1)*UNIT, (j+2)*UNIT, UNIT, UNIT);
  156.                }
  157.        }
  158.        // 指定位置にピースが置けるか判定
  159.        //
  160.        // @param x 検査位置x
  161.        // @param y 検査位置y
  162.        // @param p 検査するブロック
  163.        private function space(x:int, y:int, p:Array):int {
  164.            for (var j:int = 0; j < p.length; ++j) {
  165.                if (0 > (y+j) || (y+j) >= H)
  166.                    return 0;
  167.                for (var i:int = 0; i < p[j].length; ++i) {
  168.                    if (0 > (x+i) || (x+i) >= W)
  169.                        return 0;
  170.                    if (p[j][i] && field[y+j][x+i])
  171.                        return 0;
  172.                }
  173.            }
  174.            return 1;
  175.        }
  176.        // ブロックを下まで落とし、フィールドに吸着、ブロック消去判定
  177.        private function drop():void {
  178.            // ブロック位置を下まで落とす
  179.            for (; space(px, py+1, piece); py++)
  180.                ;
  181.            // フィールドに配置
  182.            for (var j:int = 0; j < piece.length; ++j)
  183.                for (var i:int = 0; i < piece[j].length; ++i)
  184.                    if (piece[j][i])
  185.                        field[py+j][px+i] = piece[j][i];
  186.            // ブロック消去
  187.            for (j=0; j<H; ++j)
  188.                if (field[j].indexOf(0) < 0) {
  189.                    // 1行消去して
  190.                    field.splice(j, 1);
  191.                    // 先頭に一つ挿入
  192.                    field.unshift([]);
  193.                    for (i=0; i<W; ++i)
  194.                        field[0][i] = 0;
  195.                    // 消去したライン数
  196.                    deleteLine_++;
  197.                }
  198.            // スピードアップ検査、一定回数積んだら速度を元に戻す
  199.            speedLevel_ = deleteLine_ / LEVEL_UP_LINES;
  200.            if (speedLevel_ >= SPEED.length)
  201.                speedLevel_ = 0;
  202.            // スコア更新
  203.            updateScore();
  204.        }
  205.        // 次のブロックを取得
  206.        private function pick():void {
  207.            piece = next;
  208.            if (piece != null) {
  209.                px = (W-piece[0].length)/2;
  210.                py = 0;
  211.                if (!space(px, py, piece))
  212.                    text.text="GAME OVER";
  213.            }
  214.            next = PAT[int(Math.random()*PAT.length)];
  215.        }
  216.        // スコア更新
  217.        private function updateScore():void {
  218.            score_.text = "";
  219.            score_.appendText("Lines : " + deleteLine_.toString() + "\n");
  220.            score_.appendText("\n");
  221.            score_.appendText("Level : " + speedLevel_.toString());
  222.        }
  223.    }
  224. }
noswf
  1. // forked from flashrod's Tetris
  2. package {
  3.     import flash.display.Sprite;
  4.     import flash.text.TextField;
  5.     import flash.events.Event;
  6.     import flash.events.KeyboardEvent;
  7.     public class Tetris extends Sprite {
  8.         private const W:int = 10;
  9.         private const H:int = 20;
  10.         private const UNIT:int = 16;
  11.         private const COLOR:Array =[0x000000, 0x00FFFF, 0xFFFF00, 0x22FF22, 0xFF2222, 0x4444FF, 0xFF8844, 0xFF22FF];
  12.         private const PAT:Array =[[[1111]],
  13.                                   [[020], [222]],
  14.                                   [[330], [033]],
  15.                                   [[044], [440]],
  16.                                   [[55], [50], [50]],
  17.                                   [[66], [06], [06]],
  18.                                   [[77], [77]]];
  19.         private const SPEED:Array = [3020105];
  20.         private const VK_H:int = 72// h
  21.         private const VK_J:int = 74// j
  22.         private const VK_K:int = 75// k
  23.         private const VK_L:int = 76// l
  24.         private const VK_SPC:int = 32// space
  25.         private var field:Array = [];
  26.         private var piece:Array;
  27.         private var next:Array;
  28.         private var text:TextField = new TextField();
  29.         private var keytable:Array = [];
  30.         private var count:int = 0;
  31.         private var step:int = 0;
  32.         private var px:int;
  33.         private var py:int;
  34.         public function Tetris() {
  35.             text.x = W*UNIT;
  36.             text.text="Next:";
  37.             addChild(text);
  38.             var t:TextField = new TextField();
  39.             t.x = W * UNIT;
  40.             t.y = 8 * UNIT;
  41.             t.text = "usage: h,j,k,l,SPACE";
  42.             addChild(t);
  43.             field = new Array(H).map(function():*{
  44.                 return new Array(W).map(function():*{
  45.                     return 0;
  46.                 })
  47.             });
  48.             keytable[VK_H] = function():void {px -= space(px-1, py, piece)};
  49.             keytable[VK_J] = function():void {rotate(true)};
  50.             keytable[VK_K] = function():void {rotate(false)};
  51.             keytable[VK_L] = function():void {px += space(px+1, py, piece)};
  52.             keytable[VK_SPC] = function():void {drop(); pick();};
  53.             stage.addEventListener(KeyboardEvent.KEY_DOWN, function(e:KeyboardEvent):void {
  54.                 if (keytable[e.keyCode]) {
  55.                     keytable[e.keyCode]();
  56.                     repaint();
  57.                 }
  58.             });
  59.             pick();
  60.             pick();
  61.             addEventListener(Event.ENTER_FRAME, function(e:Event):void {
  62.                 if (--step < 0) {
  63.                     step=SPEED[int(count/10)];
  64.                     if (space(px, py+1, piece)) {
  65.                         ++py;
  66.                         repaint();
  67.                     } else {
  68.                         drop();
  69.                         pick();
  70.                     }
  71.                 }
  72.             });
  73.         }
  74.         private function rotate(clock:Boolean):void {
  75.             var r:Array = new Array(piece[0].length).map(function():*{return [];});
  76.             for (var j:int = 0; j<piece.length; ++j)
  77.                 for (var i:int = 0; i < r.length; ++i)
  78.                     if (clock)
  79.                         r[i][piece.length-1-j] = piece[j][i];
  80.                     else
  81.                         r[r.length-1-i][j] = piece[j][i];
  82.             if (space(px, py, r))
  83.                 piece = r;
  84.         }
  85.         private function repaint():void {
  86.             graphics.clear();
  87.             for (var j:int = 0; j < H; ++j)
  88.                 for (var i:int = 0; i < W; ++i) {
  89.                     var g:int = 0;
  90.                     if (py <= j && j < (py+piece.length) && px <= i && i < (px+piece[0].length))
  91.                         g = piece[j-py][i-px];
  92.                     if (g == 0)
  93.                         g = field[j][i];
  94.                     graphics.beginFill(COLOR[g]);
  95.                     graphics.drawRect(i*UNIT, j*UNIT, UNIT, UNIT);
  96.                 }
  97.             for (j = 0; j < next.length; ++j)
  98.                 for (i = 0; i < next[j].length; ++i) {
  99.                     graphics.beginFill(COLOR[next[j][i]]);
  100.                     graphics.drawRect((i+W+1)*UNIT, (j+2)*UNIT, UNIT, UNIT);
  101.                 }
  102.         }
  103.         private function space(x:int, y:int, p:Array):int {
  104.             for (var j:int = 0; j < p.length; ++j) {
  105.                 if (0 > (y+j) || (y+j) >= H)
  106.                     return 0;
  107.                 for (var i:int = 0; i < p[j].length; ++i) {
  108.                     if (0 > (x+i) || (x+i) >= W)
  109.                         return 0;
  110.                     if (p[j][i] && field[y+j][x+i])
  111.                         return 0;
  112.                 }
  113.             }
  114.             return 1;
  115.         }
  116.         private function drop():void {
  117.             for (; space(px, py+1, piece); py++)
  118.                 ;
  119.             for (var j:int = 0; j < piece.length; ++j)
  120.                 for (var i:int = 0; i < piece[j].length; ++i)
  121.                     if (piece[j][i])
  122.                         field[py+j][px+i] = piece[j][i];
  123.             for (j=0; j<H; ++j)
  124.                 if (field[j].indexOf(0) < 0) {
  125.                     field.splice(j, 1);
  126.                     field.unshift([]);
  127.                     for (i=0; i<W; ++i)
  128.                         field[0][i] = 0;
  129.                 }
  130.             count++;
  131.             if (count/10 >= SPEED.length)
  132.                 count = 0;
  133.         }
  134.         private function pick():void {
  135.             piece = next;
  136.             if (piece != null) {
  137.                 px = (W-piece[0].length)/2;
  138.                 py = 0;
  139.                 if (!space(px, py, piece))
  140.                     text.text="GAME OVER";
  141.             }
  142.             next = PAT[int(Math.random()*PAT.length)];
  143.         }
  144.     }
  145. }
noswf
  1. // forked from flashrod's Tetris
  2. package {
  3.     import flash.display.Sprite;
  4.     import flash.text.TextField;
  5.     import flash.events.Event;
  6.     import flash.events.KeyboardEvent;
  7.     import flash.utils.getTimer;
  8.     import org.papervision3d.materials.*;
  9.     import org.papervision3d.materials.utils.*;
  10.     import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
  11.     import org.papervision3d.lights.PointLight3D;
  12.     import org.papervision3d.objects.*;
  13.     import org.papervision3d.objects.primitives.*
  14.     import org.papervision3d.view.*;
  15.     import org.papervision3d.scenes.Scene3D;
  16.     [SWF(backgroundColor = "0x000000", frameRate = "24")]
  17.     
  18.     public class Tetris extends BasicView {
  19.         private const W:int = 10;
  20.         private const H:int = 20;
  21.         private const UNIT:int = 16;
  22.         private const COLOR:Array =[0x000000, 0x00FFFF, 0xFFFF00, 0x22FF22, 0xFF2222, 0x4444FF, 0xFF8844, 0xFF22FF];
  23.         private const PAT:Array =[
  24.             [[1111]],
  25.             [[020], [222]],
  26.             [[330], [033]],
  27.             [[044], [440]],
  28.             [[55], [50], [50]],
  29.             [[66], [06], [06]],
  30.             [[77], [77]]
  31.         ];
  32.         private const SPEED:Array = [3020105];
  33.         private const VK_H:int = 72// h
  34.         private const VK_J:int = 74// j
  35.         private const VK_K:int = 75// k
  36.         private const VK_L:int = 76// l
  37.         private const VK_SPC:int = 32// space
  38.         private var field:Array = [];
  39.         private var piece:Array;
  40.         private var next:Array;
  41.         private var text:TextField = new TextField();
  42.         private var keytable:Array = [];
  43.         private var count:int = 0;
  44.         private var step:int = 0;
  45.         private var px:int;
  46.         private var py:int;
  47.         private var light:PointLight3D;
  48.         public function Tetris() {
  49.             Wonderfl.capture_delay(25);
  50.             light = new PointLight3D(false);
  51.             light.x = 500;
  52.             light.y = -750;
  53.             light.z = 1500;
  54.             text.x = 300;
  55.             text.textColor = 0xFFFFFF;
  56.             text.text="Next:";
  57.             addChild(text);
  58.             var t:TextField = new TextField();
  59.             t.textColor = 0xFFFFFF;
  60.             t.text = "Keys: H, J, K, L, SPACE";
  61.             t.scaleX = t.scaleY = 1.25;
  62.             t.width = 250;
  63.             addChild(t);
  64.             field = new Array(H).map(function():*{
  65.                     return new Array(W).map(function():*{
  66.                             return 0;
  67.                         })
  68.                 });
  69.             keytable[VK_H] = function():void {px -= space(px-1, py, piece)};
  70.             keytable[VK_J] = function():void {rotate(true)};
  71.             keytable[VK_K] = function():void {rotate(false)};
  72.             keytable[VK_L] = function():void {px += space(px+1, py, piece)};
  73.             keytable[VK_SPC] = function():void {drop(); pick();};
  74.             stage.addEventListener(KeyboardEvent.KEY_DOWN, function(e:KeyboardEvent):void {
  75.                     if (keytable[e.keyCode]) {
  76.                         var oldpx:int = px;
  77.                         var oldpy:int = py;
  78.                         keytable[e.keyCode]();
  79.                         repaint();
  80.                     }
  81.                 });
  82.             pick();
  83.             pick();
  84.             addEventListener(Event.ENTER_FRAME, function(e:Event):void {
  85.                     if (--step < 0) {
  86.                         step=SPEED[int(count/10)];
  87.                         if (space(px, py+1, piece)) {
  88.                             ++py;
  89.                             repaint();
  90.                         } else {
  91.                             drop();
  92.                             pick();
  93.                         }
  94.                     }
  95.                     //repaint();
  96.                 });
  97.         }
  98.         private function rotate(clock:Boolean):void {
  99.             var r:Array = new Array(piece[0].length).map(function():*{return [];});
  100.             for (var j:int = 0; j<piece.length; ++j)
  101.             for (var i:int = 0; i < r.length; ++i)
  102.             if (clock)
  103.             r[i][piece.length-1-j] = piece[j][i];
  104.             else
  105.             r[r.length-1-i][j] = piece[j][i];
  106.             if (space(px, py, r))
  107.             piece = r;
  108.         }
  109.         private function repaint():void {
  110.             // TODO:
  111.             // Reuse Scene3D and Cube objects.
  112.             // Don't recreate on every repaint.
  113.             
  114.             scene = new Scene3D;
  115.             forvar x:int = -1; x <= W; x++ ) {
  116.                 scene.addChild( cube( x, -1, 0x444444 ) );
  117.                 scene.addChild( cube( x, H, 0x444444 ) );
  118.             }
  119.             forvar y:int = -1; y <= H; y++ ) {
  120.                 scene.addChild( cube( -1, y, 0x444444 ) );
  121.                 scene.addChild( cube( W, y, 0x444444 ) );
  122.             }
  123.             //graphics.clear();
  124.             for (var j:int = 0; j < H; ++j) 
  125.             for (var i:int = 0; i < W; ++i) {
  126.                 var g:int = 0;
  127.                 if (py <= j && j < (py+piece.length) && px <= i && i < (px+piece[0].length))
  128.                 g = piece[j-py][i-px];
  129.                 if (g == 0)
  130.                 g = field[j][i];
  131.                 //graphics.beginFill(COLOR[g]);
  132.                 //graphics.drawRect(i*UNIT, j*UNIT, UNIT, UNIT);
  133.                 if(g) scene.addChild( cube( i, j, COLOR[g] ) );
  134.             }
  135.             for (j = 0; j < next.length; ++j)
  136.             for (i = 0; i < next[j].length; ++i) {
  137.                 g = next[j][i];
  138.                 //graphics.beginFill(COLOR[ci]);
  139.                 //graphics.drawRect((i+W+1)*UNIT, (j+2)*UNIT, UNIT, UNIT);
  140.                 if(g) scene.addChild( cube( i+W , j-H/2+1, COLOR[g], 33 ) );
  141.             }
  142.             camera.z = 300;
  143.             camera.y = -120;
  144.             renderer.renderScene( scene, camera, viewport );
  145.         }
  146.         private function cube( x:int, y:int, c:uint, w:int = W, h:int = H ):Cube {
  147.             var mlist:MaterialsList = new MaterialsList( { all : new FlatShadeMaterial(light,c) } );            
  148.             var ret:Cube = new Cube( mlist, UNIT, UNIT, UNIT );
  149.             ret.x = -(x - w/2) * UNIT * 1.1;
  150.             ret.y = -(y - h/2) * UNIT * 1.1;
  151.             return ret;
  152.         }
  153.         
  154.         private function space(x:int, y:int, p:Array):int {
  155.             for (var j:int = 0; j < p.length; ++j) {
  156.                 if (0 > (y+j) || (y+j) >= H)
  157.                 return 0;
  158.                 for (var i:int = 0; i < p[j].length; ++i) {
  159.                     if (0 > (x+i) || (x+i) >= W)
  160.                     return 0;
  161.                     if (p[j][i] && field[y+j][x+i])
  162.                     return 0;
  163.                 }
  164.             }
  165.             return 1;
  166.         }
  167.         private function drop():void {
  168.             for (; space(px, py+1, piece); py++)
  169.             ;
  170.             for (var j:int = 0; j < piece.length; ++j)
  171.             for (var i:int = 0; i < piece[j].length; ++i)
  172.             if (piece[j][i])
  173.             field[py+j][px+i] = piece[j][i];
  174.             for (j=0; j<H; ++j)
  175.             if (field[j].indexOf(0) < 0) {
  176.                 field.splice(j, 1);
  177.                 field.unshift([]);
  178.                 for (i=0; i<W; ++i)
  179.                 field[0][i] = 0;
  180.             }
  181.             count++;
  182.             if (count/10 >= SPEED.length)
  183.             count = 0;
  184.         }
  185.         private function pick():void {
  186.             piece = next;
  187.             if (piece != null) {
  188.                 px = (W-piece[0].length)/2;
  189.                 py = 0;
  190.                 if (!space(px, py, piece))
  191.                 text.text="GAME OVER";
  192.             }
  193.             next = PAT[int(Math.random()*PAT.length)];
  194.         }
  195.     }
  196. }
noswf
  1. // code name wars
  2. package {
  3.     import flash.display.Sprite;
  4.     import flash.text.TextField;
  5.     import flash.events.Event;
  6.     import flash.events.KeyboardEvent;
  7.     public class wars extends Sprite {
  8.        
  9.         public function wars() {
  10.          
  11.         }
  12.     }
  13. }
noswf
Get Adobe Flash Player