古いソースを整理してたらチープゲームの代名詞とも言えなくもない
数当てゲームの汚いソースが出てきましたよと。
10ヶ月前に書いたものです。
このときは状態遷移の書き方が分からず switch 〜 case にそれっぽく詰め込んで済ましてた頃合です。
今じゃ考えられないですが。
息抜きに今日はこやつを手直ししてみたいと思います。
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; }
昔作った入力用ライブラリをインクルードしないとビルドできないので
リードオンリーでご容赦ください。