ハートに16連射。(3)

RGKT-NDS-HMBR-006(003)


フォントを ATARI 仕様にして見た目をファミコン風にしてみました。
本当にただそれだけです…(汗)。
昨日の休憩時間あまりコーディングに掛ける時間が無かったので結構やっつけですが。
関数化作業はこの次より取り掛かろうと思います
(家で作業しちゃうと会社で休憩時間にすることが無くなってしまうのでf(^^;))。


早射ち計測ゲームが出来るまで。Rev.2


フォントリソースは「NDS Homebrew 用に利用可能なフォントリソース。(4)」の、
ATARI(NAMCO) 風フォント(ANK コードセット)のものを使ってます。


NDS Homebrew 用に利用可能なフォントリソース。(4)
http://d.hatena.ne.jp/dumbo001/20090325/1237984081


ソースコード

/*---------------------------------------------------------------------------------
	
	SHOOTING MEASUREMENT GAME
	Revision.2
	
	Mar 25, 2009
	Mar 24, 2009 Rev.1
	
	CODING BY. AYUMI @REGEKATSU
	This program was made from devkitPro Version 1.4.10
	
	REGEKATSU
	-Console/Homebrew Programming-
	
	this web site.
	http://akiba.geocities.jp/consolehomebrewprogramming/

---------------------------------------------------------------------------------*/
#include <nds.h>
#include <stdio.h>

//ATARI 風フォントリソースをインクルードする。
#include "font.h"

#define TIME_PER_SEC  60
#define TIME_OVER_SEC  8

typedef enum {
	GAME_INIT,
	GAME_PLAY_INIT,
	GAME_PLAY_START,
	GAME_PLAY_EXEC,
	GAME_PLAY_END,
	GAME_PLAY_EXIT,
	GAME_EXIT
}GAME_SCENE;

typedef struct{
	u16 act;
}ST_GAME;

// フォント変更を適用する為のコンソール構造体と、
// フォントステータスを設定する為のフォント構造体を用意する。
PrintConsole console;
ConsoleFont font;

int main(void)
{
	ST_GAME game = {GAME_INIT};
	int time_count = 0, key_count = 0;
	
	while(1) {
		scanKeys();
		
		switch(game.act){
			
		case GAME_INIT:
			//フォント変更を適用するコンソールステータスを得る。
			console = *consoleDemoInit();
			
			//フォント変更の為の各種設定を行う。
			font.gfx = (u16*)fontTiles;
			font.bpp = 4;
			font.numChars = 128;
			font.convertSingleColor = true;
			
			//フォント変更の為の設定を現在のコンソールステータスに適用する。
			consoleSetFont(&console, &font);
			
			BG_PALETTE_SUB[0] = RGB8(48, 80, 128);
			
			game.act = GAME_PLAY_INIT;
			break;
			
		case GAME_PLAY_INIT:
			consoleClear();
			key_count = 0;
			time_count = 0;
			iprintf("\x1b[9;9HPUSH A BUTTON\n");
			
			game.act = GAME_PLAY_START;
			break;
			
		case GAME_PLAY_START:
			
			if(keysDown() & KEY_A){
				time_count++;
				key_count++;
				game.act = GAME_PLAY_EXEC;
			}
			break;
			
		case GAME_PLAY_EXEC:
			
			time_count++;
			if(keysDown() & KEY_A){
				key_count++;
			}
			
			if((time_count / TIME_PER_SEC) == TIME_OVER_SEC){
				consoleClear();
				game.act = GAME_PLAY_END;
			}
			break;
			
		case GAME_PLAY_END:
			iprintf("\x1b[9;9HPUSH A BUTTON\n");
			iprintf("\x1b[12;6H%4d TIMES PER SEC\n", key_count / 8);
			
			game.act = GAME_PLAY_EXIT;
			break;
			
		case GAME_PLAY_EXIT:
			if((keysHeld() & KEY_START)&&(keysHeld() & KEY_SELECT)&&(keysHeld() & KEY_L)&&(keysHeld() & KEY_R))
				game.act = GAME_EXIT;
			break;
			
		case GAME_EXIT:
			game.act = GAME_PLAY_INIT;
			break;
			
		default:
			break;
		}
		
		//デバッグ用
		iprintf("\x1b[22;0HTIME_COUNT:%3d\nKEY_COUNT: %3d", time_count, key_count);
		
		swiWaitForVBlank();
	}

	return 0;
}
//---------------------------------------------------------------------------------