package
{
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.*;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.ui.Keyboard;
import flash.ui.MouseCursor;
import flash.utils.*;
import flashx.textLayout.elements.InlineGraphicElement;
import org.osmf.events.TimeEvent;
[SWF(width=400, height=600,backgroundColor=0x000000)]
public class tetris extends Sprite
{
private var startBtn:TextField = new TextField();
//X 와 Y 의 배열의 사이즈 지정
// 개발자가 컴파일 하기전에 x와 y의 갯수를 계산하여 입력해주세요
private var stageXSize:Number = 20;
private var stageYSize:Number = 30;
//stage 의 총사이즈
private var stageWidth:Number = 400;
private var stageHeight:Number = 600;
//stage에 출력될 BlockSize 정사각형
private var BlockSize:Number = stageWidth/stageXSize;
//backgroundStage
private var backGroundStage:Sprite = new Sprite();
private var terisStage:Sprite = new Sprite();
//각블록의 배열
private var rects:Array = new Array();
//블록개산용 배열
private var stageArray:Array = new Array();
//블록출력용 배열
private var stageViewArray:Array = new Array();
//게임스피드 ex(1000~x):1초 = 1000
private var gameSpeed:Number = 1000;
//전체 게임시간 계산
private var totalTime:Number = 0;
//벽돌을 정의한 집합
private static var list_brick:Array = new Array();
//현재 벽돌의 위치
private var nowXposition:Number=0;
private var nowYposition:Number=0;
/**
* 현재 블록의 상태
* stop => 현재 진행중이지 않은 상태
* play => 진행중인상태
*/
private var blockStage:String = "stop";
//게임레벨
private var gameLevel:Number = 1;
public function tetris()
{
//기본 설정및 셋팅 초기화
init();
//background stage 그리기
createGameStage();
//타암아웃시작
var intervalId:uint = setInterval(setTimeCheck, gameSpeed);
}
/**
* 타임 체크
*/
public function setTimeCheck():void
{
totalTime = totalTime + gameSpeed;
//엔터이벤트
keyEvent(new KeyboardEvent(KeyboardEvent.KEY_DOWN,true,false,40,40));
//test 모디파이
if(blockStage=="stop")
{
//핸덤 블럭생성
makeBrock(randomRange(0,6).toString());
}
}
/**
* 테트리스 시작
*
*/
public function startEvent(e:MouseEvent):void
{
trace("start");
}
public function init():void
{
trace("init");
}
/**
* 난수생성
*/
public function randomRange(min:Number, max:Number):int
{
return min+Math.random()*(max-min);
}
/**
*
* 스테이지 그리기
*
*/
public function createGameStage():void
{
trace("createGameStage");
//그래픽 그리기
//X사이즈루핑
for(var y:int = 0;y<stageYSize;y++)
{
stageArray.push(new Array());
stageViewArray.push(new Array());
//Y사이즈 루핑
for(var x:int = 0;x<stageXSize;x++)
{
//stageArray[y].push(new int(0));
stageArray[y].push(new int(0));
stageViewArray[y].push(new Sprite());
}
}
//배열에 맞추어서 블록그리기
drawBLOCK();
//backGroundStage.addChild(rects["shape0_1"]);
//keyboradEvent
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyEvent);
//backGroundStage.addEventListener(MouseEvent.CLICK,moe);
this.addChild(backGroundStage);
//bakGroundStage.addChild();
}
/**
* 화면그리기
*
**/
public function drawBLOCK():void
{
stageArray[0][0] = 1;
stageArray[0][1] = 1;
stageArray[0][2] = 1;
stageArray[0][3] = 1;
stageArray[1][0] = 2;
stageArray[1][1] = 2;
stageArray[1][2] = 2;
stageArray[1][3] = 2;
stageArray[2][0] = 3;
stageArray[2][1] = 3;
stageArray[2][2] = 3;
stageArray[2][3] = 3;
stageArray[3][0] = 4;
stageArray[3][1] = 4;
stageArray[3][2] = 4;
stageArray[3][3] = 4;
stageArray[4][0] = 5;
stageArray[4][1] = 5;
stageArray[4][2] = 5;
stageArray[4][3] = 5;
stageArray[5][0] = 6;
stageArray[5][1] = 6;
stageArray[5][2] = 6;
stageArray[5][3] = 6;
for(var y:int=0;y<stageViewArray.length;y++)
{
for(var x:int=0;x<stageViewArray[y].length;x++)
{
var xposition:Number = BlockSize*x;
var yposition:Number = BlockSize*y;
//배경화면
if(stageArray[y][x]==0)
{
stageViewArray[y][x].graphics.lineStyle(1);
stageViewArray[y][x].graphics.beginFill(0xFFFFFF,1);
stageViewArray[y][x].graphics.drawRect(xposition,yposition,BlockSize,BlockSize);
stageViewArray[y][x].graphics.endFill();
}
//0xCCCCCC
else if(stageArray[y][x]==1)
{
stageViewArray[y][x].graphics.lineStyle(1);
stageViewArray[y][x].graphics.beginFill(0xCCCCCC,1);
stageViewArray[y][x].graphics.drawRect(xposition,yposition,BlockSize,BlockSize);
stageViewArray[y][x].graphics.endFill();
}
//0xFF00FF
else if(stageArray[y][x]==2)
{
stageViewArray[y][x].graphics.lineStyle(1);
stageViewArray[y][x].graphics.beginFill(0xff00ff,1);
stageViewArray[y][x].graphics.drawRect(xposition,yposition,BlockSize,BlockSize);
stageViewArray[y][x].graphics.endFill();
}
//0x00ff00
else if(stageArray[y][x]==3)
{
stageViewArray[y][x].graphics.lineStyle(1);
stageViewArray[y][x].graphics.beginFill(0x00ff00,1);
stageViewArray[y][x].graphics.drawRect(xposition,yposition,BlockSize,BlockSize);
stageViewArray[y][x].graphics.endFill();
}
//0x4b0082
else if(stageArray[y][x]==4)
{
stageViewArray[y][x].graphics.lineStyle(1);
stageViewArray[y][x].graphics.beginFill(0x4b0082,1);
stageViewArray[y][x].graphics.drawRect(xposition,yposition,BlockSize,BlockSize);
stageViewArray[y][x].graphics.endFill();
}
//0x4b0082
else if(stageArray[y][x]==5)
{
stageViewArray[y][x].graphics.lineStyle(1);
stageViewArray[y][x].graphics.beginFill(0x000080,1);
stageViewArray[y][x].graphics.drawRect(xposition,yposition,BlockSize,BlockSize);
stageViewArray[y][x].graphics.endFill();
}
else if(stageArray[y][x]==6)
{
stageViewArray[y][x].graphics.lineStyle(1);
stageViewArray[y][x].graphics.beginFill(0x8a2be2,1);
stageViewArray[y][x].graphics.drawRect(xposition,yposition,BlockSize,BlockSize);
stageViewArray[y][x].graphics.endFill();
}
else
{
trace("err 지정되지 않는 블록이 발생되었습니다.");
}
backGroundStage.addChild(stageViewArray[y][x]);
}
}
}
/**
*
*
*
*/
public function createConfigStage():void
{
}
/**
* 전체 스테이지 지우기
*
*/
public function clearStage():void
{
}
/**
* 키보드 이벤트를 체크및 필요함수 실행
*/
public function keyEvent(e:KeyboardEvent):void
{
switch(e.keyCode)
{
//left
case 37:
trace("left");
break;
//right
case 39:
trace("right");
break;
//up
case 38:
trace("up");
break;
//down
case 40:
trace("down");
break;
//enter
case 13:
trace("enter");
break;
//sp
case 32:
trace("sp");
break;
default:
trace("==>"+e.keyCode);
break;
}
//trace("Key Pressed: " + String.fromCharCode(e.charCode) + " (character code: " + e.charCode + ")");
}
/**
*
*
*
*
*/
public function makeBrock(brockType:String):void
{
//블록이 시작할시점
nowXposition = int(stageXSize/2);
nowYposition = int(stageYSize);
var makeBlockArray:Array = new Array(
new Array( new Array(0,1,0,0),
new Array(0,1,0,0),
new Array(0,1,0,0),
new Array(0,1,0,0)),
new Array(
new Array(0,2,2,0),
new Array(0,2,2,0),
new Array(0,0,0,0),
new Array(0,0,0,0)),
new Array(
new Array(3,0,0,0),
new Array(3,3,0,0),
new Array(0,3,0,0),
new Array(0,0,0,0)),
new Array(
new Array(0,4,0,0),
new Array(4,4,0,0),
new Array(4,0,0,0),
new Array(0,0,0,0)),
new Array(
new Array(0,5,0,0),
new Array(5,5,0,0),
new Array(0,5,0,0),
new Array(0,0,0,0)),
new Array(
new Array(6,6,0,0),
new Array(0,6,0,0),
new Array(0,6,0,0),
new Array(0,0,0,0)),
new Array(
new Array(7,7,0,0),
new Array(7,0,0,0),
new Array(7,0,0,0),
new Array(0,0,0,0))
);
for(var i:int = 0; i<makeBlockArray[brockType].length;i++)
{
trace(makeBlockArray[brockType][i]);
}
//블록테이블
blockStage ="play";
}
public function moe(e:MouseEvent):void
{
trace(e.localX+"/"+e.localY);
}
}
}