Exemple #1
0
/* 게임 */
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);
	}
}
Exemple #2
0
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();
}
Exemple #3
0
/* 게임 */
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();
		}
	}
}