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

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

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


forked from : flashrod's Tetris [diff(131)]

FORKED
  1. // forked from yonatan's Tetris3D
  2. // forked from flashrod's Tetris
  3. package {
  4.     import flash.display.Sprite;
  5.     import flash.text.TextField;
  6.     import flash.events.Event;
  7.     import flash.events.KeyboardEvent;
  8.     import flash.utils.getTimer;
  9.     import org.papervision3d.materials.*;
  10.     import org.papervision3d.materials.utils.*;
  11.     import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
  12.     import org.papervision3d.lights.PointLight3D;
  13.     import org.papervision3d.objects.*;
  14.     import org.papervision3d.objects.primitives.*
  15.     import org.papervision3d.view.*;
  16.     import org.papervision3d.scenes.Scene3D;
  17.     [SWF(backgroundColor = "0x000000", frameRate = "24")]
  18.     
  19.     public class Tetris extends BasicView {
  20.         private const W:int = 10;
  21.         private const H:int = 20;
  22.         private const UNIT:int = 16;
  23.         private const COLOR:Array =[0x000000, 0x00FFFF, 0xFFFF00, 0x22FF22, 0xFF2222, 0x4444FF, 0xFF8844, 0xFF22FF];
  24.         private const PAT:Array =[
  25.             [[1111]],
  26.             [[020], [222]],
  27.             [[330], [033]],
  28.             [[044], [440]],
  29.             [[55], [50], [50]],
  30.             [[66], [06], [06]],
  31.             [[77], [77]]
  32.         ];
  33.         private const SPEED:Array = [3020105];
  34.         private const VK_H:int = 72// h
  35.         private const VK_J:int = 74// j
  36.         private const VK_K:int = 75// k
  37.         private const VK_L:int = 76// l
  38.         private const VK_SPC:int = 32// space
  39.         private var field:Array = [];
  40.         private var piece:Array;
  41.         private var next:Array;
  42.         private var text:TextField = new TextField();
  43.         private var keytable:Array = [];
  44.         private var count:int = 0;
  45.         private var step:int = 0;
  46.         private var px:int;
  47.         private var py:int;
  48.         private var light:PointLight3D;
  49.         public function Tetris() {
  50.             Wonderfl.capture_delay(25);
  51.             light = new PointLight3D(false);
  52.             light.x = 500;
  53.             light.y = -750;
  54.             light.z = 1500;
  55.             text.x = 300;
  56.             text.textColor = 0xFFFFFF;
  57.             text.text="Next:";
  58.             addChild(text);
  59.             var t:TextField = new TextField();
  60.             t.textColor = 0xFFFFFF;
  61.             t.text = "Keys: H, J, K, L, SPACE";
  62.             t.scaleX = t.scaleY = 1.25;
  63.             t.width = 250;
  64.             addChild(t);
  65.             field = new Array(H).map(function():*{
  66.                     return new Array(W).map(function():*{
  67.                             return 0;
  68.                         })
  69.                 });
  70.             keytable[VK_H] = function():void {px -= space(px-1, py, piece)};
  71.             keytable[VK_J] = function():void {rotate(true)};
  72.             keytable[VK_K] = function():void {rotate(false)};
  73.             keytable[VK_L] = function():void {px += space(px+1, py, piece)};
  74.             keytable[VK_SPC] = function():void {drop(); pick();};
  75.             stage.addEventListener(KeyboardEvent.KEY_DOWN, function(e:KeyboardEvent):void {
  76.                     if (keytable[e.keyCode]) {
  77.                         var oldpx:int = px;
  78.                         var oldpy:int = py;
  79.                         keytable[e.keyCode]();
  80.                         repaint();
  81.                     }
  82.                 });
  83.             pick();
  84.             pick();
  85.             addEventListener(Event.ENTER_FRAME, function(e:Event):void {
  86.                     if (--step < 0) {
  87.                         step=SPEED[int(count/10)];
  88.                         if (space(px, py+1, piece)) {
  89.                             ++py;
  90.                             repaint();
  91.                         } else {
  92.                             drop();
  93.                             pick();
  94.                         }
  95.                     }
  96.                     //repaint();
  97.                 });
  98.         }
  99.         private function rotate(clock:Boolean):void {
  100.             var r:Array = new Array(piece[0].length).map(function():*{return [];});
  101.             for (var j:int = 0; j<piece.length; ++j)
  102.             for (var i:int = 0; i < r.length; ++i)
  103.             if (clock)
  104.             r[i][piece.length-1-j] = piece[j][i];
  105.             else
  106.             r[r.length-1-i][j] = piece[j][i];
  107.             if (space(px, py, r))
  108.             piece = r;
  109.         }
  110.         private function repaint():void {
  111.             // TODO:
  112.             // Reuse Scene3D and Cube objects.
  113.             // Don't recreate on every repaint.
  114.             
  115.             scene = new Scene3D;
  116.             forvar x:int = -1; x <= W; x++ ) {
  117.                 scene.addChild( cube( x, -1, 0x444444 ) );
  118.                 scene.addChild( cube( x, H, 0x444444 ) );
  119.             }
  120.             forvar y:int = -1; y <= H; y++ ) {
  121.                 scene.addChild( cube( -1, y, 0x444444 ) );
  122.                 scene.addChild( cube( W, y, 0x444444 ) );
  123.             }
  124.             //graphics.clear();
  125.             for (var j:int = 0; j < H; ++j) 
  126.             for (var i:int = 0; i < W; ++i) {
  127.                 var g:int = 0;
  128.                 if (py <= j && j < (py+piece.length) && px <= i && i < (px+piece[0].length))
  129.                 g = piece[j-py][i-px];
  130.                 if (g == 0)
  131.                 g = field[j][i];
  132.                 //graphics.beginFill(COLOR[g]);
  133.                 //graphics.drawRect(i*UNIT, j*UNIT, UNIT, UNIT);
  134.                 if(g) scene.addChild( cube( i, j, COLOR[g] ) );
  135.             }
  136.             for (j = 0; j < next.length; ++j)
  137.             for (i = 0; i < next[j].length; ++i) {
  138.                 g = next[j][i];
  139.                 //graphics.beginFill(COLOR[ci]);
  140.                 //graphics.drawRect((i+W+1)*UNIT, (j+2)*UNIT, UNIT, UNIT);
  141.                 if(g) scene.addChild( cube( i+W , j-H/2+1, COLOR[g], 33 ) );
  142.             }
  143.             camera.z = 300;
  144.             camera.y = -120;
  145.             renderer.renderScene( scene, camera, viewport );
  146.         }
  147.         private function cube( x:int, y:int, c:uint, w:int = W, h:int = H ):Cube {
  148.             var mlist:MaterialsList = new MaterialsList( { all : new FlatShadeMaterial(light,c) } );            
  149.             var ret:Cube = new Cube( mlist, UNIT, UNIT, UNIT );
  150.             ret.x = -(x - w/2) * UNIT * 1.1;
  151.             ret.y = -(y - h/2) * UNIT * 1.1;
  152.             return ret;
  153.         }
  154.         
  155.         private function space(x:int, y:int, p:Array):int {
  156.             for (var j:int = 0; j < p.length; ++j) {
  157.                 if (0 > (y+j) || (y+j) >= H)
  158.                 return 0;
  159.                 for (var i:int = 0; i < p[j].length; ++i) {
  160.                     if (0 > (x+i) || (x+i) >= W)
  161.                     return 0;
  162.                     if (p[j][i] && field[y+j][x+i])
  163.                     return 0;
  164.                 }
  165.             }
  166.             return 1;
  167.         }
  168.         private function drop():void {
  169.             for (; space(px, py+1, piece); py++)
  170.             ;
  171.             for (var j:int = 0; j < piece.length; ++j)
  172.             for (var i:int = 0; i < piece[j].length; ++i)
  173.             if (piece[j][i])
  174.             field[py+j][px+i] = piece[j][i];
  175.             for (j=0; j<H; ++j)
  176.             if (field[j].indexOf(0) < 0) {
  177.                 field.splice(j, 1);
  178.                 field.unshift([]);
  179.                 for (i=0; i<W; ++i)
  180.                 field[0][i] = 0;
  181.             }
  182.             count++;
  183.             if (count/10 >= SPEED.length)
  184.             count = 0;
  185.         }
  186.         private function pick():void {
  187.             piece = next;
  188.             if (piece != null) {
  189.                 px = (W-piece[0].length)/2;
  190.                 py = 0;
  191.                 if (!space(px, py, piece))
  192.                 text.text="GAME OVER";
  193.             }
  194.             next = PAT[int(Math.random()*PAT.length)];
  195.         }
  196.     }
  197. }
noswf
  1. // forked from yonatan's Tetris3D
  2. // forked from flashrod's Tetris
  3. package {
  4.     import flash.display.Sprite;
  5.     import flash.text.TextField;
  6.     import flash.events.Event;
  7.     import flash.events.KeyboardEvent;
  8.     import flash.utils.getTimer;
  9.     import org.papervision3d.materials.*;
  10.     import org.papervision3d.materials.utils.*;
  11.     import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
  12.     import org.papervision3d.lights.PointLight3D;
  13.     import org.papervision3d.objects.*;
  14.     import org.papervision3d.objects.primitives.*
  15.     import org.papervision3d.view.*;
  16.     import org.papervision3d.scenes.Scene3D;
  17.     [SWF(backgroundColor = "0x000000", frameRate = "24")]
  18.     
  19.     public class Tetris extends BasicView {
  20.         private const W:int = 10;
  21.         private const H:int = 20;
  22.         private const UNIT:int = 16;
  23.         private const COLOR:Array =[0x000000, 0x00FFFF, 0xFFFF00, 0x22FF22, 0xFF2222, 0x4444FF, 0xFF8844, 0xFF22FF];
  24.         private const PAT:Array =[
  25.             [[1111]],
  26.             [[020], [222]],
  27.             [[330], [033]],
  28.             [[044], [440]],
  29.             [[55], [50], [50]],
  30.             [[66], [06], [06]],
  31.             [[77], [77]]
  32.         ];
  33.         private const SPEED:Array = [3020105];
  34.         private const VK_H:int = 72// h
  35.         private const VK_J:int = 74// j
  36.         private const VK_K:int = 75// k
  37.         private const VK_L:int = 76// l
  38.         private const VK_SPC:int = 32// space
  39.         private var field:Array = [];
  40.         private var piece:Array;
  41.         private var next:Array;
  42.         private var text:TextField = new TextField();
  43.         private var keytable:Array = [];
  44.         private var count:int = 0;
  45.         private var step:int = 0;
  46.         private var px:int;
  47.         private var py:int;
  48.         private var light:PointLight3D;
  49.         public function Tetris() {
  50.             Wonderfl.capture_delay(25);
  51.             light = new PointLight3D(false);
  52.             light.x = 500;
  53.             light.y = -750;
  54.             light.z = 1500;
  55.             text.x = 300;
  56.             text.textColor = 0xFFFFFF;
  57.             text.text="Next:";
  58.             addChild(text);
  59.             var t:TextField = new TextField();
  60.             t.textColor = 0xFFFFFF;
  61.             t.text = "Keys: H, J, K, L, SPACE";
  62.             t.scaleX = t.scaleY = 1.25;
  63.             t.width = 250;
  64.             addChild(t);
  65.             field = new Array(H).map(function():*{
  66.                     return new Array(W).map(function():*{
  67.                             return 0;
  68.                         })
  69.                 });
  70.             keytable[VK_H] = function():void {px -= space(px-1, py, piece)};
  71.             keytable[VK_J] = function():void {rotate(true)};
  72.             keytable[VK_K] = function():void {rotate(false)};
  73.             keytable[VK_L] = function():void {px += space(px+1, py, piece)};
  74.             keytable[VK_SPC] = function():void {drop(); pick();};
  75.             stage.addEventListener(KeyboardEvent.KEY_DOWN, function(e:KeyboardEvent):void {
  76.                     if (keytable[e.keyCode]) {
  77.                         var oldpx:int = px;
  78.                         var oldpy:int = py;
  79.                         keytable[e.keyCode]();
  80.                         repaint();
  81.                     }
  82.                 });
  83.             pick();
  84.             pick();
  85.             addEventListener(Event.ENTER_FRAME, function(e:Event):void {
  86.                     if (--step < 0) {
  87.                         step=SPEED[int(count/10)];
  88.                         if (space(px, py+1, piece)) {
  89.                             ++py;
  90.                             repaint();
  91.                         } else {
  92.                             drop();
  93.                             pick();
  94.                         }
  95.                     }
  96.                     //repaint();
  97.                 });
  98.         }
  99.         private function rotate(clock:Boolean):void {
  100.             var r:Array = new Array(piece[0].length).map(function():*{return [];});
  101.             for (var j:int = 0; j<piece.length; ++j)
  102.             for (var i:int = 0; i < r.length; ++i)
  103.             if (clock)
  104.             r[i][piece.length-1-j] = piece[j][i];
  105.             else
  106.             r[r.length-1-i][j] = piece[j][i];
  107.             if (space(px, py, r))
  108.             piece = r;
  109.         }
  110.         private function repaint():void {
  111.             // TODO:
  112.             // Reuse Scene3D and Cube objects.
  113.             // Don't recreate on every repaint.
  114.             
  115.             scene = new Scene3D;
  116.             forvar x:int = -1; x <= W; x++ ) {
  117.                 scene.addChild( cube( x, -1, 0x444444 ) );
  118.                 scene.addChild( cube( x, H, 0x444444 ) );
  119.             }
  120.             forvar y:int = -1; y <= H; y++ ) {
  121.                 scene.addChild( cube( -1, y, 0x444444 ) );
  122.                 scene.addChild( cube( W, y, 0x444444 ) );
  123.             }
  124.             //graphics.clear();
  125.             for (var j:int = 0; j < H; ++j) 
  126.             for (var i:int = 0; i < W; ++i) {
  127.                 var g:int = 0;
  128.                 if (py <= j && j < (py+piece.length) && px <= i && i < (px+piece[0].length))
  129.                 g = piece[j-py][i-px];
  130.                 if (g == 0)
  131.                 g = field[j][i];
  132.                 //graphics.beginFill(COLOR[g]);
  133.                 //graphics.drawRect(i*UNIT, j*UNIT, UNIT, UNIT);
  134.                 if(g) scene.addChild( cube( i, j, COLOR[g] ) );
  135.             }
  136.             for (j = 0; j < next.length; ++j)
  137.             for (i = 0; i < next[j].length; ++i) {
  138.                 g = next[j][i];
  139.                 //graphics.beginFill(COLOR[ci]);
  140.                 //graphics.drawRect((i+W+1)*UNIT, (j+2)*UNIT, UNIT, UNIT);
  141.                 if(g) scene.addChild( cube( i+W , j-H/2+1, COLOR[g], 33 ) );
  142.             }
  143.             camera.z = 300;
  144.             camera.y = -120;
  145.             renderer.renderScene( scene, camera, viewport );
  146.         }
  147.         private function cube( x:int, y:int, c:uint, w:int = W, h:int = H ):Cube {
  148.             var mlist:MaterialsList = new MaterialsList( { all : new FlatShadeMaterial(light,c) } );            
  149.             var ret:Cube = new Cube( mlist, UNIT, UNIT, UNIT );
  150.             ret.x = -(x - w/2) * UNIT * 1.1;
  151.             ret.y = -(y - h/2) * UNIT * 1.1;
  152.             return ret;
  153.         }
  154.         
  155.         private function space(x:int, y:int, p:Array):int {
  156.             for (var j:int = 0; j < p.length; ++j) {
  157.                 if (0 > (y+j) || (y+j) >= H)
  158.                 return 0;
  159.                 for (var i:int = 0; i < p[j].length; ++i) {
  160.                     if (0 > (x+i) || (x+i) >= W)
  161.                     return 0;
  162.                     if (p[j][i] && field[y+j][x+i])
  163.                     return 0;
  164.                 }
  165.             }
  166.             return 1;
  167.         }
  168.         private function drop():void {
  169.             for (; space(px, py+1, piece); py++)
  170.             ;
  171.             for (var j:int = 0; j < piece.length; ++j)
  172.             for (var i:int = 0; i < piece[j].length; ++i)
  173.             if (piece[j][i])
  174.             field[py+j][px+i] = piece[j][i];
  175.             for (j=0; j<H; ++j)
  176.             if (field[j].indexOf(0) < 0) {
  177.                 field.splice(j, 1);
  178.                 field.unshift([]);
  179.                 for (i=0; i<W; ++i)
  180.                 field[0][i] = 0;
  181.             }
  182.             count++;
  183.             if (count/10 >= SPEED.length)
  184.             count = 0;
  185.         }
  186.         private function pick():void {
  187.             piece = next;
  188.             if (piece != null) {
  189.                 px = (W-piece[0].length)/2;
  190.                 py = 0;
  191.                 if (!space(px, py, piece))
  192.                 text.text="GAME OVER";
  193.             }
  194.             next = PAT[int(Math.random()*PAT.length)];
  195.         }
  196.     }
  197. }
noswf
Get Adobe Flash Player