/* 게임 */ void scr_Game() { /* 타이머 변수_초. */ int lastcount; // 이전 초. int currentcount; // 현재 초. u8 pressed = FALSE; PA_Init(); PA_InitVBL(); PA_LoadBackground(UP_SCREEN, BG3, &up); // 상단 디스플레이-타이틀화면 설정. PA_LoadBackground(DOWN_SCREEN, BG3, &down); // 하단 디스플레이-타이틀화면 설정. PA_InitText(UP_SCREEN, BG2); PA_SetTextTileCol(UP_SCREEN, TEXT_BLACK); /* 배경음악 플레이 */ if ( isplaying==FALSE ) { UnLoad_Sound(); AS_SoundDefaultPlay((u8*)bgm, (u32)bgm_size, 127, 64, TRUE, 0); isplaying = TRUE; } while (1) { int i; status = 0; lastcount = currentcount = 0; stageTime = 30; // 스테이지 제한시간 memoryTime = 10; scr_Stage(uinfo.userStage); PA_OutputText(UP_SCREEN, 10, 2, "Stage : %d", uinfo.userStage); PA_OutputText(UP_SCREEN, 10, 5, "Score : %d", uinfo.userScore); PA_OutputText(UP_SCREEN, 10, 7, "Time : %d", memoryTime); PA_LoadSpritePal(UP_SCREEN, BLOCKPAL, (void*) Block_Pal); // 블럭 정보 스프라이트 팔레트 PA_LoadSpritePal(DOWN_SCREEN, BLOCKPAL, (void*) Block_Pal); // 게임 블럭 스프라이트 팔레트 for( i = 0; i < 5; i++){ PA_CreateSprite(UP_SCREEN, i, (void*) Block_Sprite, OBJ_SIZE_32X32, 1, BLOCKPAL, (40*i)+32, 135); PA_SetSpriteAnim(UP_SCREEN, i, i); } view_block(); //블럭 보여줌 PA_VBLCountersReset(); // 카운터 초기화. PA_VBLCounterStart(0); // 카운터 시작. while (1) { // 보여주는 시간 /* 카운터 초기화 및 시작 */ currentcount = (PA_VBLCounter[0] / 60); if (lastcount != currentcount) { memoryTime -= (currentcount - lastcount); lastcount = currentcount; PA_ClearTextBg(UP_SCREEN); PA_OutputText(UP_SCREEN, 10, 2, "Stage : %d", uinfo.userStage); PA_OutputText(UP_SCREEN, 10, 5, "Score : %d", uinfo.userScore); PA_OutputText(UP_SCREEN, 10, 7, "Time : %d", memoryTime); } if(memoryTime == 0){ block_init(); // 블럭 초기화 break ; // 0이하가 되면 본게임으로 } PA_WaitForVBL(); } //vTaskResume(Touch_Task); PA_OutputText(UP_SCREEN, 10, 7, "Time : %d", stageTime); while (1) { //일단 잘못 누르면 게임 오버로 만들기. //버튼 인식 받고 그 정보로 메모리 성공, 실패, 게임중 선택 하는 함수 추가 /* 카운터 초기화 및 시작 */ currentcount = (PA_VBLCounter[0] / 60); if (lastcount != currentcount) { stageTime -= (currentcount - lastcount); lastcount = currentcount; PA_ClearTextBg(UP_SCREEN); PA_OutputText(UP_SCREEN, 10, 2, "Stage : %d", uinfo.userStage); PA_OutputText(UP_SCREEN, 10, 5, "Score : %d", uinfo.userScore); PA_OutputText(UP_SCREEN, 10, 7, "Time : %d", stageTime); } if (stageTime == 0 || status == 1) return; //게임 나가기 if (Stylus.Newpress) { for (i = 0; i < 16; i++) { if ((pressed == FALSE) && PA_SpriteTouched(i)) { status = block_reload(i); pressed = TRUE; } else if ((pressed == TRUE) && !PA_SpriteTouched(i)) { pressed = FALSE; } } } if(check_win()){ ++uinfo.userStage; break; } PA_WaitForVBL(); } vTaskSuspend(Touch_Task); } }
void PA_Init(void) { s32 i; for (i = 0; i < 130000>>2; i++) Blank[i] = 0; REG_IPC_FIFO_CR = IPC_FIFO_ENABLE | IPC_FIFO_SEND_CLEAR; // enable & clear FIFO PA_Init2D(); pa_checklid = 1; // Autochecklid by default pa_update_padtimes = 0; // Don't update pad-times by default gh_update_padtimes = 0; // Don't update GuitarHero-pad-times by default Pad.Uptime.Up = 0; Pad.Downtime.Up = 0; Pad.Uptime.Down = 0; Pad.Downtime.Down = 0; Pad.Uptime.Left = 0; Pad.Downtime.Left = 0; Pad.Uptime.Right = 0; Pad.Downtime.Right = 0; Pad.Uptime.A = 0; Pad.Downtime.A = 0; Pad.Uptime.B = 0; Pad.Downtime.B = 0; Pad.Uptime.X = 0; Pad.Downtime.X = 0; Pad.Uptime.Y = 0; Pad.Downtime.Y = 0; Pad.Uptime.L = 0; Pad.Downtime.L = 0; Pad.Uptime.R = 0; Pad.Downtime.R = 0; Pad.Uptime.Start = 0; Pad.Downtime.Start = 0; Pad.Uptime.Select = 0; Pad.Downtime.Select = 0; Pad.Uptime.Anykey = 0; Pad.Downtime.Anykey = 0; //WAIT_CR &= ~(1 << 7); PA_VBLCountersReset(); Stylus.X = 128; Stylus.Y = 96; PA_VBLFunctionReset(); irqInit(); //PA_ResetInterrupts(); IPC->mailData = (u32)(&PA_IPC); for (i = 0; i < 2; i++){ PA_SetBrightness(i, 0); // On affiche les écrans PA_font[i] = 0; // #ifndef TEXT_ALLCHARACTERS PA_textmap[i] = (u16*)PA_text_Map; PA_texttiles[i] = (u8*)PA_text_Tiles; PA_textpal[i] = (u16*)PA_text_Pal; // #endif /* #ifdef TEXT_ALLCHARACTERS PA_textmap[i] = (u16*)PA_text2_Map; PA_texttiles[i] = (u8*)PA_text2_Tiles; PA_textpal[i] = (u16*)PA_text2_Pal; #endif */ } PA_UpdateUserInfo(); PA_ResetRecoSys(); // Reco system init PA_SetScreenSpace(48); // Default spacing PA_GifInfo.StartFrame = 0; // start from the beginning PA_GifInfo.EndFrame = 10000; // random high number MotionVBL = PA_Nothing; PaddleVBL = PA_Nothing; GHPadVBL = PA_Nothing; PA_UpdateRTC(); PA_InitRand(); }
/* 게임 */ void scr_Game() { int lastcount; // 이전 초 int currentcount; // 현재 초 PA_Init(); PA_InitVBL(); AS_SoundDefaultPlay((u8*) bgm, (u32) bgm_size, 127, 64, TRUE, 0); while (1) { int i; lastcount = currentcount = 0; stageTime = 30; // 스테이지 제한시간 memoryTime = 10; UnLoad_Screen(); PA_LoadBackground(UP_SCREEN, BG3, &up); // 상단 디스플레이-타이틀화면 설정. PA_LoadBackground(DOWN_SCREEN, BG3, &down); // 하단 디스플레이-타이틀화면 설정. PA_InitText(UP_SCREEN, BG2); PA_SetTextTileCol(UP_SCREEN, TEXT_RED); userBlock_init(); scr_Stage(uinfo.userStage); Memory_info(); PA_LoadSpritePal(UP_SCREEN, BLOCKPAL, (void*) Block_Pal); // 블럭 정보 스프라이트 팔레트 PA_LoadSpritePal(DOWN_SCREEN, BLOCKPAL, (void*) Block_Pal); // 게임 블럭 스프라이트 팔레트 for (i = 0; i < 5; i++) { // 위 화면에 블럭의 변화를 보여주는 sprite 생성 PA_CreateSprite(UP_SCREEN, i, (void*) Block_Sprite, OBJ_SIZE_32X32, 1, BLOCKPAL, (40 * i) + 32, 135); PA_SetSpriteAnim(UP_SCREEN, i, i); } view_block(); PA_VBLCountersReset(); // 카운터 초기화. PA_VBLCounterStart(0); // 카운터 시작. while (1) { currentcount = (PA_VBLCounter[0] / 60); if (lastcount != currentcount) { // 메모리 타임 체크 memoryTime -= (currentcount - lastcount); lastcount = currentcount; Memory_info(); } if (memoryTime == 0) { // 0이하가 되면 본게임으로 AS_SoundDefaultPlay((u8*) blind, (u32) blind_size, 80, 64, FALSE,0); PA_DeleteSprite(DOWN_SCREEN, BLOCKPAL); block_init(); // 블럭 초기화 break; } if (NDS_SWITCH() == KEY_START) memoryTime = 0; PA_WaitForVBL(); } Gaming_info(); while (1) { currentcount = (PA_VBLCounter[0] / 60); if (lastcount != currentcount) { // 게임 시간 체크 stageTime -= (currentcount - lastcount); lastcount = currentcount; Gaming_info(); } if (stageTime <= 0) { //게임 나가기 UnLoad_Sound(); return; } if (Stylus.Newpress) { for (i = 0; i < BLOCKS_NUM; i++){ if (PA_SpriteTouched(i)) block_reload(i); } } if (check_clear()) { // 게임 진행 상태 체크 uinfo.userStage++; // 스테이지 업 AS_SoundDefaultPlay((u8*) stageup, (u32) stageup_size, 45, 64, FALSE,0); break; } PA_WaitForVBL(); } } }