Beispiel #1
0
//init
void init(){

	Clear();
	NextShape();
	NextShape();


	//document.onkeydown = keyDown;
	//setInterval("timing();",1000);
}
Beispiel #2
0
//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;
}
Beispiel #3
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;
	}
}
Beispiel #4
0
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();
}
Beispiel #5
0
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
}
Beispiel #6
0
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);
    }
}