数当てクイズ。0


古いソースを整理してたらチープゲームの代名詞とも言えなくもない
数当てゲームの汚いソースが出てきましたよと。


10ヶ月前に書いたものです。
このときは状態遷移の書き方が分からず switch 〜 case にそれっぽく詰め込んで済ましてた頃合です。
今じゃ考えられないですが。
息抜きに今日はこやつを手直ししてみたいと思います。


数当てクイズ(20090208 ver.)


main.c

//---------------------------------------------------------------------------------
//	
//	KAZUATE GAME eng ver.0.2
//	
//	Jan 31, 2009 - Feb 01, 2009 ver.0.1 source code release
//	Feb 08, 2009 ver.0.2 source code release
//	
//	CODING BY. AYUMI @REGEKATSU
//	This program was made from devkitPro Version 1.4.9
//	
//	REGEKATSU
//	-Console/Homebrew Programming-
//	
//	this web site.
//	http://akiba.geocities.jp/consolehomebrewprogramming/
//	
//	
//---------------------------------------------------------------------------------
#include <nds.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "inputf.h"

typedef enum GAME_MODE{
	GAME_INIT,
	GAME_TITLE,
	NAME_ENTRY,
	GAME_START,
	GAME_MAIN,
	GAME_CONTINUE,
	GAME_END
}GAME_MODE;

#define MAX_NUM 100
#define MAX_NAME 40

#define GAME_TITLE_MSG "\x1b[0;0HKAZUATE GAME"
#define GAME_TITLE_SUB "\x1b[2;0HRGKT-NDS-STDY-007\x1b[3;0H'inputf' Func sample program."
#define GAME_TITLE_CRIGHT "\x1b[5;0H(C)2009 REGEKATSU"
#define GAME_TITLE_PROMPT "\x1b[8;0HPUSH A BUTTON!\n\n"
#define NAME_ENTRY_MSG "What's your name?\n"
#define GAME_START_MSG "\nKAZUATE Quiz!\nPlease input the number \nfrom 1 to %d.\n"
#define GAME_ANSWER_MSG_OSHII "It's near!\n"
#define GAME_ANSWER_MSG_CHIISAI "It's smaller.\n"
#define GAME_ANSWER_MSG_OOKII "It's larger.\n"
#define GAME_ANSWER_MSG_SEIKAI "It's correct!!\nCongratulations on %s!\n"
#define GAME_CONTINUE_MSG "Do you continue? Y:N\n"
#define GAME_END_MSG "Ok\n"

int main(void)
{
	
	int n = -1, answer = 0;
	GAME_MODE game_mode = GAME_INIT;
	char c, s[MAX_NAME] = {'\0'};
	
	consoleDemoInit();
	lcdSwap();
	srand(time(NULL));
	
	while(1) {
		
		scanKeys();
		
		switch(game_mode){
			
		case GAME_INIT:
			
			consoleClear();
			iprintf(GAME_TITLE_MSG);
			iprintf(GAME_TITLE_SUB);
			iprintf(GAME_TITLE_CRIGHT);
			iprintf(GAME_TITLE_PROMPT);
			game_mode = GAME_TITLE;
			break;
			
		case GAME_TITLE:
			
			if(keysDown() & KEY_A){
				game_mode = NAME_ENTRY;
				iprintf(NAME_ENTRY_MSG);
			}
			break;
			
		case NAME_ENTRY:
			
			if(inputf("%s", MAX_NAME, s))
				game_mode = GAME_START;
			break;
			
		case GAME_START:
			
			iprintf(GAME_START_MSG, MAX_NUM);
			n = -1;
			answer = rand() % MAX_NUM + 1;
			game_mode = GAME_MAIN;
			break;
			
		case GAME_MAIN:
			
			if(inputf("%D", 3, &n)){
				if((n == answer-1) || (n == answer+1)){
					iprintf(GAME_ANSWER_MSG_OSHII);
				}else if(n > answer + 1){
					iprintf(GAME_ANSWER_MSG_CHIISAI);
				}else if(n < answer - 1){
					iprintf(GAME_ANSWER_MSG_OOKII);
				}else if(n == answer){
					iprintf(GAME_ANSWER_MSG_SEIKAI, s);
					game_mode = GAME_CONTINUE;
					iprintf(GAME_CONTINUE_MSG);
				} 
			}
			break;
			
		case GAME_CONTINUE:
			
			if(inputf("%c", 1, &c)){
				if((c == 'y') || (c == 'Y'))
					game_mode = GAME_START;
				else if((c == 'n') || (c == 'N'))
					game_mode = GAME_END;
			}
			break;
			
		case GAME_END:
			
			iprintf(GAME_END_MSG);
			return 0;
			
		default:
			break;
			
		}
		
		swiWaitForVBlank();
		
	}
	
	return 0;
	
}


昔作った入力用ライブラリをインクルードしないとビルドできないので
リードオンリーでご容赦ください。