示例#1
0
int main(void)
{
    engine_sel = ENGINE_SEL_WRAP_OPT;
    engine_state = ENGINE_RUN;

    show_hotkeys();

#ifdef MIXED_MODE
    // our program just uses the bottom 4 lines of the display
    gotoxy(0,MAXROWPAIRCNT);
    POKE(TEXTWINDOW_TOP_EDGE,MAXROWPAIRCNT);
    gr_mode(SS_PAGE2OFF, SS_MIXEDON);
#else
    gr_mode(SS_PAGE2OFF, SS_MIXEDOFF);
#endif
    glider(gr_page[0]);

    while (engine_state == ENGINE_RUN) {
        switch (engine_sel) {
            case ENGINE_SEL_WRAP_NAIVE:
                naive_wrap_engine();
                break;
            case ENGINE_SEL_NOWRAP_NAIVE:
                naive_nowrap_engine();
                break;
            case ENGINE_SEL_WRAP_OPT:
                opt_wrap_engine();
                break;
            case ENGINE_SEL_NOWRAP_OPT:
                opt_nowrap_engine();
                break;
            default:
#ifdef MIXED_MODE
                printf("bogus engine selection!\n");
#endif
                engine_state = ENGINE_STOP;
                break;
        }
    }
    
    // all done
    POKE(TEXTWINDOW_TOP_EDGE,0);
    softsw(SS_TEXTON);
    
    return EXIT_SUCCESS;
}
示例#2
0
u8 OpenMenu(){

	ClearTextVram();
	
	SetTileTable(tiles);
	SetFontTilesIndex(TILES_SIZE);

	//Show object types
	Print(6,2,PSTR("Select life object to insert"));
	Print(5,3,PSTR("at the current cursor position"));

	Print(7,7,PSTR("Glider"));
	Print(7,8,PSTR("Lightweight spaceship (LWSS)"))	;
	Print(7,9,PSTR("R-Pentamino"));
	Print(7,10,PSTR("Gosper glider gun"));

	Print(7,11,PSTR("Clear field"));
	Print(7,12,PSTR("Exit game"));


	//slide in menu
	WaitVsync(1);
	Fill(0,0,40,1,0);
	for(u8 i=1;i<29;i++){
		WaitVsync(1);
		vmode_text_lines=i;
	}


	s8 option=0,x=5,y=7;
	u16 joy,prevJoy=0;
	while(1){
		WaitVsync(1);
		joy=ReadJoypad(0);
		if(prevJoy==0){
			if (joy==BTN_UP){
				if(option>0) option--;

			}else if (joy==BTN_DOWN){
				if(option<5)option++;

			}else if(joy==BTN_SELECT){
				break;
			}else if(joy==BTN_START){
				switch(option){
					case 0:
						glider(cursor_x,cursor_y);
						break;

					case 1:
						lwss(cursor_x,cursor_y);
						break;
	
					case 2:
						rPentamino(cursor_x,cursor_y);
						break;					

					case 3:
						gliderGun(cursor_x,cursor_y);
						break;	

					case 4:
						ClearVram();
						break;

					default:						
						while(ReadJoypad(0)!=0);
						return 1;  //signal game end, back to main menu
				}
	
				break;
			}
		}
		prevJoy=joy;
		AnimateCursor(x,y+option);
	}

	while(ReadJoypad(0)!=0);

	//close menu
	for(u8 i=29;i>0;i--){
		WaitVsync(1);
		vmode_text_lines=i;
	}
	ClearTextVram();
	SetTileTable(font);
	SetFontTilesIndex(0);
	CreateStatusBar();
	
	return 0;
}
示例#3
0
文件: life.c 项目: vovaprog/gluKe
static void st_life(int size_w,int size_h,
	struct life_object *life_objects,
	life_callback callback,void *user_data)
{
	char *arena,*count_arena;
	int w_mul_h,k,q,rq,x,rx,y,line_counter;
	
	w_mul_h=size_w*size_h;

	arena=ALLOC(w_mul_h);
	count_arena=ALLOC(w_mul_h);
		
	MEMSET(arena,0,w_mul_h);
	MEMSET(count_arena,0,w_mul_h);

	for(k=0;life_objects[k].type!=LIFE_OBJECT_TYPE_UNKNOWN;k++)
	{		
		switch(life_objects[k].type){
		case LIFE_OBJECT_TYPE_BOAT:
			boat(arena,size_w,size_h,life_objects[k].x,life_objects[k].y);
			break;
		case LIFE_OBJECT_TYPE_PENT_R:
			pent_r(arena,size_w,size_h,life_objects[k].x,life_objects[k].y);
			break;
		case LIFE_OBJECT_TYPE_TUMBLER:
			tumbler(arena,size_w,size_h,life_objects[k].x,life_objects[k].y);
			break;
		case LIFE_OBJECT_TYPE_LINE_OSC:
			line_osc(arena,size_w,size_h,life_objects[k].x,life_objects[k].y);
			break;
		case LIFE_OBJECT_TYPE_GLIDER:
			glider(arena,size_w,size_h,life_objects[k].x,life_objects[k].y);
			break;
		case LIFE_OBJECT_TYPE_QUEEN_BEE:
			bee_queen(arena,size_w,size_h,life_objects[k].x,life_objects[k].y,0);			
			break;
		case LIFE_OBJECT_TYPE_QUEEN_BEE_OSC:
			bee_queen(arena,size_w,size_h,life_objects[k].x,life_objects[k].y,1);
			break;			
		}
	}

	while(callback(arena,size_w,size_h,user_data)==0)
	{
		for(k=0,line_counter=0;k<w_mul_h;k++)
		{
			if(arena[k])
			{
				q=k-size_w;
				for(y=0;y<3;y++)
				{
					if(q<0) rq=w_mul_h+q;
					else if(q>=w_mul_h) rq=q-w_mul_h;
					else rq=q;
				
					for(x=-1;x<2;x++)
					{
						if(!(x==0 && y==1))
						{
							if(line_counter==0 && x==-1) rx=(size_w-1);
							else if(line_counter==size_w-1 && x==1) rx=-(size_w-1);
							else rx=x;
							count_arena[rq+rx]++;
						}
					}
					q+=size_w;
				}
			}
			if(++line_counter==size_w) line_counter=0;
		}
		for(k=0;k<w_mul_h;k++)
		{
			if(count_arena[k]<2) arena[k]=0;
			else if(count_arena[k]>3) arena[k]=0;
			else if(count_arena[k]==3) arena[k]=1;
			
			count_arena[k]=0;
		}
	}
	FREE(arena);
	FREE(count_arena);
}