CAVE だもんね。(12)


RGKT-NDS-STDY-023(001)


RGKT-NDS-HMBR-004(012)


現在は目下ゲームメインソースを作成中。
・シーケンス遷移を手直し(終)
・関数、変数、定数の命名直し(未完)


ゲームルーチン以外にも、MSX 風への変更作業進め中。
・画面最下のファンクションキー表示(終?)


ファンクションキー表示の為に consoleSetWindow() 関数の使い方を学んだ。

void consoleSetWindow(PrintConsole* console, int x, int y, int width, int height);

PrintConsole* console : 変更を適用するコンソールステータスを PrintConsole 構造体で指定する。
                        PrintConsole 構造体は、最初の変数宣言時などに前もって生成しておき、
                        コンソール初期化時にコンソールステータスを得ておくこと
                        (console = *consoleDemoInit(); /* という風に */)。
int x : 横開始ポジションの設定。031の範囲で設定する。
int y : 縦開始ポジションの設定。023の範囲で設定する。
int width : 横開始ポジションから何文字入力可能とするかの設定。132の範囲で設定する。
int height : 縦開始ポジションから何行入力可能とするかの設定。124の範囲で設定する。


この関数は任意の範囲を指定することで
その範囲内でのみ iprintf() 等のコンソール動作が適応されるというもの。
例えば、改行や画面クリアを実行した際、
適応したくない範囲に処理が及ばなくなるので
そういった用途があるときは割と便利かもしれない。


consoleSetWindow 関数を使ったサンプルソース

/*---------------------------------------------------------------------------------
	
	consoleSetWindow func check program.
	
	Mar 18, 2009
	CODING BY. AYUMI.K @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>

//---------------------------------------------------------------------------------
int main(void)
{
	// 変更を適用するコンソールステータスを PrintConsole 構造体で持つ。
	PrintConsole bottom_screen = *consoleDemoInit();
	
	// BG 透明色として画面に描画される色を青とする(MSX 風に。)。
	BG_PALETTE_SUB[0] = RGB15(0, 0, 31);
	
	// MSX-BASIC 画面風、ファンクションキーの表示。
	iprintf("\x1b[23;2Hcolor auto  goto  list  run");
	
	// iprintf() 出力範囲を MSX 起動時互換のものとするよう変更。
	// 具体的には、
	//   ・横28文字(左右にはそれぞれ2文字分のブランクがある)
	//   ・縦23行(24行目はファンクションキー表示に利用されている)
	// というように設定する。
	// 
	consoleSetWindow(&bottom_screen, 2, 0, 28, 23);
	
	// 変更を適応したコンソールを選択する
	// (選択しないと設定変更したコンソールを利用できない。)。
	consoleSelect(&bottom_screen);
	
	while(1) {
		scanKeys();
		
		if(keysHeld() & KEY_A)
			iprintf("A");
		
		if(keysHeld() & KEY_B)
			iprintf("B");
		
		if(keysDown() & KEY_START)
			iprintf("\nCLS");
		else if(keysUp() & KEY_START)
			iprintf("\x1b[2JOk\n");
		
		swiWaitForVBlank();
	}

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