//init void init(){ Clear(); NextShape(); NextShape(); //document.onkeydown = keyDown; //setInterval("timing();",1000); }
//Public Board::Board(uint boardWidth, uint boardHeight, vector<pair<int, byte>> Levels) { Board::boardHeight = boardHeight; Board::boardWidth = boardWidth; dim = boardWidth * boardHeight; board = new int[boardWidth * boardHeight]; paused = false; Shape_Generator::init(); nextShape = Shape_Generator::Next_Shape(); NextShape(); lines_info = Levels; lines_toNextLevel = lines_info.back().second; speed = lines_info.back().first; level = 0; }
void Board::Update() { io_service io; deadline_timer t(io, boost::posix_time::milliseconds(lines_info.back().first)); t.wait(); y++; if (IsCollision()) { y--; SaveToBoard(currentShape, x, y); NextShape(); } LineClear(); if(lines_toNextLevel == 0) { lines_info.pop_back(); level++; lines_toNextLevel = lines_info.back().second; speed = lines_info.back().first; } }
void TouchDo(){ int i,j; //add to board for(i=0;i<4;i++) { for(j=0;j<4;j++) { int x=PosX+i; int y=PosY-j; char block = getNowBlock(i,j); if(block!=0) { setBoard(x,y,block); } } } //clear line for(j=19;j>=0;j--) { char line=1; for(i=0;i<10;i++) { if(getBoard(i,j)==0) { line=0; break; } } if(line==1) { int k,l; for(k=0;k<10;k++) { if(j-1>=0) { setBoard(k,j-1,data[0x0380+getBoard(k,j-1)]); } if(j+1<20) { setBoard(k,j+1,data[0x0390+getBoard(k,j+1)]); } setBoard(k,j,0); } for(k=j;k<19;k++) { for(l=0;l<10;l++) { setBoard(l,k,getBoard(l,k+1)); } } } } //is gameover for(i=0;i<10;i++) { if(getBoard(i,18)!=0) { Clear(); break; } } NextShape(); }
void TouchDo(){ //add to board { //TouchDo_idx=0; asm("ldy #$00"); //for(TouchDo_i=4;TouchDo_i>0;TouchDo_i--) asm("lda #$04"); asm("sta %b",TouchDo_i); fori1: //for(TouchDo_j=4;TouchDo_j>0;TouchDo_j--) asm("lda #$04"); asm("sta %b",TouchDo_j); forj1: //getBlock_i=TouchDo_i-1; asm("ldx %b",TouchDo_i); asm("dex"); asm("stx %b",getBlock_i); //getBlock_j=TouchDo_j-1; asm("ldx %b",TouchDo_j); asm("dex"); asm("stx %b",getBlock_j); getNowBlock(); //if(getBlock_ret) asm("lda %b",getBlock_ret); asm("beq %g",else1); { //setBoard_x=PosX+TouchDo_i-1; //getBase_x =PosX+TouchDo_i-1; asm("ldx %b",TouchDo_i); asm("dex"); asm("txa"); asm("clc"); asm("adc %b",PosX); asm("sta %b",setBoard_x); asm("sta %b",getBase_x); //setBoard_y=PosY-TouchDo_j+1; //getBase_y =PosY-TouchDo_j+1; asm("ldx %b",PosY); asm("inx"); asm("txa"); asm("sec"); asm("sbc %b",TouchDo_j); asm("sta %b",setBoard_y); asm("sta %b",getBase_y); //setBoard_val=getBlock_ret; asm("lda %b",getBlock_ret); asm("sta %b",setBoard_val); setBoard(); getBase(); //DrawBuff[TouchDo_idx++]=getBase_hi; asm("lda %b",getBase_hi); asm("sta %w,Y",DrawBuff); asm("iny"); //DrawBuff[TouchDo_idx++]=getBase_lo; asm("lda %b",getBase_lo); asm("sta %w,Y",DrawBuff); asm("iny"); //DrawBuff[TouchDo_idx++]=getBlock_ret; asm("lda %b",getBlock_ret); asm("sta %w,Y",DrawBuff); asm("iny"); }else1: asm("dec %b",TouchDo_j); asm("bne %g",forj1); asm("dec %b",TouchDo_i); asm("bne %g",fori1); //idx=0; asm("ldy #$00"); waitvblank(); //for(TouchDo_i=4;TouchDo_i>0;TouchDo_i--) asm("ldx #$04"); fori2: { //*(char*)(0x2006)=DrawBuff[idx++]; asm("lda %w,Y",DrawBuff); asm("sta $2006"); asm("iny"); //*(char*)(0x2006)=DrawBuff[idx++]; asm("lda %w,Y",DrawBuff); asm("sta $2006"); asm("iny"); //*(char*)(0x2007)=DrawBuff[idx++]; asm("lda %w,Y",DrawBuff); asm("sta $2007"); asm("iny"); } asm("dex"); asm("bne %g",fori2); //*(char*)(0x2005) = 0; asm("lda #$00"); asm("sta $2005"); //*(char*)(0x2005) = 0; asm("sta $2005"); } //clear line { //for(TouchDo_j=20;TouchDo_j>0;TouchDo_j--) asm("lda #$14"); asm("sta %b",TouchDo_j); forj3: //TouchDo_line=1; asm("lda #$01"); asm("sta %b",TouchDo_line); //for(TouchDo_i=10;TouchDo_i>0;TouchDo_i--) asm("lda #$0A"); asm("sta %b",TouchDo_i); fori3: //setBoard_x=TouchDo_i-1; asm("ldx %b",TouchDo_i); asm("dex"); asm("stx %b",setBoard_x); //setBoard_y=TouchDo_j-1; asm("ldx %b",TouchDo_j); asm("dex"); asm("stx %b",setBoard_y); getBoard(); //if(setBoard_val==0) asm("lda %b",setBoard_val); asm("bne %g",else2); //TouchDo_line=0; asm("lda #$00"); asm("sta %b",TouchDo_line); asm("jmp %g",break1); else2: asm("dec %b",TouchDo_i); asm("bne %g",fori3); break1: //if(TouchDo_line) asm("ldx %b",TouchDo_line); asm("bne %g",if5); asm("jmp %g",else5); if5: //for(TouchDo_k=0;TouchDo_k<10;TouchDo_k++) asm("lda #$0A");//10 times asm("sta %b",TouchDo_k); fork1: //setBoard_x=TouchDo_k-1; asm("ldx %b",TouchDo_k); asm("dex"); asm("stx %b",setBoard_x); //if(TouchDo_j>=2) asm("ldx %b",TouchDo_j); asm("cpx #$02"); asm("bmi %g",else3); //setBoard_y=TouchDo_j-2; asm("dex"); asm("dex"); asm("stx %b",setBoard_y); getBoard();//in setBoard_val //setBoard_val=data1[setBoard_val+0xE0]; asm("lda %b",setBoard_val); asm("clc"); asm("adc #$E0"); asm("tax"); asm("lda %v,X",data1); asm("sta %b",setBoard_val); setBoard(); else3: //setBoard_y=TouchDo_j; asm("ldx %b",TouchDo_j); asm("stx %b",setBoard_y); getBoard(); //setBoard_val=data1[setBoard_val+0xF0]; asm("lda %b",setBoard_val); asm("clc"); asm("adc #$F0"); asm("tax"); asm("lda %v,X",data1); asm("sta %b",setBoard_val); setBoard(); //setBoard_y=TouchDo_j-1; asm("ldx %b",TouchDo_j); asm("dex"); asm("stx %b",setBoard_y); //setBoard_val=0; asm("lda #$00"); asm("sta %b",setBoard_val); setBoard(); asm("dec %b",TouchDo_k); asm("bne %g",fork1); //if(TouchDo_j>=2) asm("ldx %b",TouchDo_j); asm("cpx #$02"); asm("bmi %g",else4); //DrawLine_y=TouchDo_j-2; asm("ldx %b",TouchDo_j); asm("dex"); asm("dex"); asm("stx %b",DrawLine_y); DrawLine(); else4: //for(TouchDo_k=TouchDo_j-1;TouchDo_k<19;TouchDo_k++) asm("ldx %b",TouchDo_j); asm("dex"); asm("stx %b",TouchDo_k); fork2: //for(TouchDo_i=10;TouchDo_i>0;TouchDo_i--) asm("lda #$0A"); asm("sta %b",TouchDo_i); fori4: //setBoard_x=TouchDo_i-1; asm("ldx %b",TouchDo_i); asm("dex"); asm("stx %b",setBoard_x); //setBoard_y=TouchDo_k+1; asm("ldx %b",TouchDo_k); asm("inx"); asm("stx %b",setBoard_y); getBoard(); //setBoard_y=TouchDo_k; asm("ldx %b",TouchDo_k); asm("stx %b",setBoard_y); setBoard(); asm("dec %b",TouchDo_i); asm("bne %g",fori4); //DrawLine_y=TouchDo_k; asm("ldx %b",TouchDo_k); asm("stx %b",DrawLine_y); DrawLine(); asm("ldx %b",TouchDo_k); asm("inx"); asm("stx %b",TouchDo_k); asm("cpx #$13"); asm("bne %g",fork2); else5: asm("dec %b",TouchDo_j); asm("beq %g",forjext); asm("jmp %g",forj3); forjext: ; } //is gameover { //for(TouchDo_i=0;TouchDo_i<10;TouchDo_i++) asm("lda #$0A"); asm("sta %b",TouchDo_i); fori5: //setBoard_x=TouchDo_i-1; asm("ldx %b",TouchDo_i); asm("dex"); asm("stx %b",setBoard_x); //setBoard_y=18; asm("ldx #$12"); asm("stx %b",setBoard_y); getBoard(); //if(setBoard_val) asm("ldx %b",setBoard_val); asm("beq %g",else6); Clear(); asm("jmp %g",break2); else6: asm("dec %b",TouchDo_i); asm("bne %g",fori5); break2: ; } NextShape(); //draw shape DrawShape(); //TODO DRAW Next }
void main(){ //init pattern { asm("lda #$00"); //*(char*)(0x2006)=0; asm("sta $2006"); //*(char*)(0x2006)=0; asm("sta $2006"); //for(i=0;i<255;i++) asm("ldx #$00"); for1: //*(char*)(0x2007)=img1[i]; asm("lda %v,X",img1); asm("sta $2007"); asm("inx"); asm("cpx #$FF"); asm("bne %g",for1); //*(char*)(0x2007)=img1[255]; asm("lda %v,X",img1); asm("sta $2007"); //for(i=0;i<255;i++) asm("ldx #$00"); for2: //*(char*)(0x2007)=img2[i]; asm("lda %v,X",img2); asm("sta $2007"); asm("inx"); asm("cpx #$FF"); asm("bne %g",for2); //*(char*)(0x2007)=img1[255]; asm("lda %v,X",img2); asm("sta $2007"); } //clear SP { //*(char*)(0x2003)=0; //i<<2 asm("lda #$00"); asm("sta $2003"); //for(i=255;i>0;i--) asm("ldx #$FF"); for3: //*(char*)(0x2004)=0; asm("sta $2004"); asm("dex"); asm("bne %g",for3); //*(char*)(0x2004)=0; asm("sta $2004"); } //set background black { //*(char*)(0x2006)=0x20; asm("lda #$20");asm("sta $2006"); //*(char*)(0x2006)=0x20; asm("sta $2006"); //for(i=0;i<255;i++) asm("lda #$10"); asm("ldx #$FF"); for4: //*(char*)(0x2007)=0x10; asm("sta $2007"); asm("dex"); asm("bne %g",for4); //*(char*)(0x2007)=0x10; asm("sta $2007"); //for(i=0;i<255;i++) asm("ldx #$FF"); for5: //*(char*)(0x2007)=0x10; asm("sta $2007"); asm("dex"); asm("bne %g",for5); //*(char*)(0x2007)=0x10; asm("sta $2007"); //for(i=0;i<255;i++) asm("ldx #$FF"); for6: //*(char*)(0x2007)=0x10; asm("sta $2007"); asm("dex"); asm("bne %g",for6); //*(char*)(0x2007)=0x10; asm("sta $2007"); //for(i=0;i<128;i++) asm("ldx #$80"); for7: //*(char*)(0x2007)=0x10; asm("sta $2007"); asm("dex"); asm("bne %g",for7); } //set color { //*(char*)(0x2006)=0x3F; asm("lda #$3F");asm("sta $2006"); //*(char*)(0x2006)=0x00; asm("ldx #$00");asm("stx $2006"); //*(char*)(0x2007)=0x2C; asm("ldx #$2C");asm("stx $2007"); //*(char*)(0x2007)=0x30; asm("ldx #$30");asm("stx $2007"); //*(char*)(0x2007)=0x00; asm("ldx #$00");asm("stx $2007"); //*(char*)(0x2007)=0x3F; asm("sta $2007"); //*(char*)(0x2006)=0x3F; asm("sta $2006"); //*(char*)(0x2006)=0x11; asm("ldx #$11");asm("stx $2006"); //*(char*)(0x2007)=0x30; asm("ldx #$30");asm("stx $2007"); //*(char*)(0x2007)=0x22; asm("ldx #$22");asm("stx $2007"); //*(char*)(0x2007)=0x3F; asm("sta $2007"); } //show init title { //*(char*)(0x2006)=0x20; asm("lda #$20");asm("sta $2006"); //*(char*)(0x2006)=0xC5; asm("lda #$C5");asm("sta $2006"); //*(char*)(0x2007)=0x11; asm("ldx #$11");asm("stx $2007"); //*(char*)(0x2007)=0x12; asm("inx");asm("stx $2007"); //*(char*)(0x2007)=0x13; asm("inx");asm("stx $2007"); //*(char*)(0x2007)=0x14; asm("inx");asm("stx $2007"); //*(char*)(0x2007)=0x10; asm("lda #$10");asm("sta $2007"); //*(char*)(0x2007)=0x15; asm("inx");asm("stx $2007"); //*(char*)(0x2007)=0x10; asm("sta $2007"); //*(char*)(0x2007)=0x16; asm("inx");asm("stx $2007"); //*(char*)(0x2007)=0x17; asm("inx");asm("stx $2007"); //*(char*)(0x2007)=0x18; asm("inx");asm("stx $2007"); //*(char*)(0x2005) = 0; asm("stx $2005"); //*(char*)(0x2005) = 0; asm("stx $2005"); } //init ppu { //*(char*)(0x2000) = 0x80; //10 00 00 00 asm("lda #$80");asm("sta $2000"); //*(char*)(0x2001) = 0x18; //00 01 10 00 asm("lda #$18");asm("sta $2001"); //*(char*)(0x2005) = 0; asm("lda #$00");asm("sta $2005"); //*(char*)(0x2005) = 0; asm("sta $2005"); } //wait for key pressed (randomize) while1: rnd(); readJoystick(); asm("lda %b",key1); //if(key1)break; asm("bne %g",endwhile1); asm("jmp %g",while1); endwhile1: Clear(); //clear 4*4 nextShape { waitvblank(); asm("ldx #$00"); //*(char*)(0x2006)=0x20; asm("lda #$20");asm("sta $2006"); //*(char*)(0x2006)=0xAE; asm("lda #$AE");asm("sta $2006"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2006)=0x20; asm("lda #$20");asm("sta $2006"); //*(char*)(0x2006)=0xCE; asm("lda #$CE");asm("sta $2006"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2006)=0x20; asm("lda #$20");asm("sta $2006"); //*(char*)(0x2006)=0xEE; asm("lda #$EE");asm("sta $2006"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2006)=0x21; asm("lda #$21");asm("sta $2006"); //*(char*)(0x2006)=0x0E; asm("lda #$0E");asm("sta $2006"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2007)=0; asm("stx $2007"); //*(char*)(0x2005) = 0; asm("stx $2005"); //*(char*)(0x2005) = 0; asm("stx $2005"); } NextShape(); NextShape(); //main cycle { //main_cnt = 50; asm("lda #$32"); asm("sta %b",main_cnt); while2: rnd(); waitvblank(); //one second count //if(main_cnt--==0) asm("dec %b",main_cnt); asm("bne %g",else1); //main_cnt=50; asm("lda #$32"); asm("sta %b",main_cnt); slowdown(); else1: readJoystick(); //key2 = key1 ^ lastkey; asm("lda %b",key1); asm("eor %b",lastkey); //key2 = key2 & key1; asm("and %b",key1); //if(key2!=0) asm("beq %g",else2); asm("sta %b",key2); //if(key2&0x01){movelr_n=1;movelr();}//button_RIGHT asm("and #$01"); asm("beq %g",elseKey1); asm("lda #$01"); asm("sta %b",movelr_n); movelr(); elseKey1: //if(key2&0x02){movelr_n=-1;movelr();}//button_LEFT asm("lda %b",key2); asm("and #$02"); asm("beq %g",elseKey2); asm("lda #$FF"); asm("sta %b",movelr_n); movelr(); elseKey2: //if(key2&0x04)down();//button_DOWN asm("lda %b",key2); asm("and #$04"); asm("beq %g",elseKey3); down(); elseKey3: //if(key2&0x08)slowdown();//button_UP asm("lda %b",key2); asm("and #$08"); asm("beq %g",elseKey4); slowdown(); elseKey4: //if(key2&0x10);//button_START //if(key2&0x20);//button_SELECT //if(key2&0x40){rotate_n=-1;rotate();}//button_B asm("lda %b",key2); asm("and #$40"); asm("beq %g",elseKey5); asm("lda #$FF"); asm("sta %b",rotate_n); rotate(); elseKey5: //if(key2&0x80){rotate_n=1;rotate();}//button_A asm("lda %b",key2); asm("and #$80"); asm("beq %g",elseKey6); asm("lda #$01"); asm("sta %b",rotate_n); rotate(); elseKey6: else2: //lastkey = key1; asm("lda %b",key1); asm("sta %b",lastkey); asm("jmp %g",while2); } }