RGKT-NDS-HMBR-003(003)
遊べるまでにしました。
「あいこでしょ」は…難しいっすねw実装はしましたが。
スイッチ分岐が精一杯。もうちょっと良くならぬものかと。
絵さえ乗っければ多少は見れるものに成るかな?どうかな?
「ジャンケンゲーム(試作版)」のCソースです。
200行くらいになっちゃいました><
朝の時点じゃあ50〜60行だったような気がしたのですが…。
//--------------------------------------------------------------------------------- // // JANKEN GAME. prototype ver. // // Feb 08, 2009 - Feb 09, 2009 // CODING BY. AYUMI.K@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> typedef enum{ PLAY_INIT, PLAY_TITLE, PLAY_START, PLAY_GAME, PLAY_END, }PLAY_MODE; typedef enum{ GOO = 0, CHOKI = 1, PAR = 2 }JANKEN_HAND; typedef enum{ AIKO = 0, KACHI = 1, MAKE = -1 }JANKEN_JUDG; bool isKeysDown(uint32); JANKEN_HAND getPlayerHand(void); JANKEN_HAND getCpuHand(void); JANKEN_JUDG judgHand(JANKEN_HAND, JANKEN_HAND); void drawHand(JANKEN_HAND); bool isKeysDown(uint32 keypad_bits) { if(keysDown() & keypad_bits) return true; return false; } JANKEN_HAND getPlayerHand(void) { if(keysDown() & KEY_LEFT){ return GOO; }else if(keysDown() & KEY_UP){ return CHOKI; }else if(keysDown() & KEY_RIGHT){ return PAR; } return GOO; } JANKEN_HAND getCpuHand(void) { return rand() % 2 + 1; } JANKEN_JUDG judgHand(JANKEN_HAND player_hand, JANKEN_HAND cpu_hand) { if(player_hand == cpu_hand){ return AIKO; }else if(cpu_hand == (player_hand + 1) % 3){ return KACHI; }else{ return MAKE; } return AIKO; } void drawHand(JANKEN_HAND janken_hand) { switch(janken_hand){ case GOO: iprintf("GOO\n"); break; case CHOKI: iprintf("CHOKI\n"); break; case PAR: iprintf("PAR\n"); break; default: break; } } int main(void) { int score = 0, play_count = 0; PLAY_MODE play_mode = PLAY_INIT; JANKEN_JUDG judgment = MAKE; JANKEN_HAND player_hand = GOO, cpu_hand = GOO; srand(time(NULL)); consoleDemoInit(); iprintf("JANKEN GAME.\n prototype ver.\n"); iprintf("Feb 09, 2009\n"); iprintf("CODING BY.\nAYUMI.K @REGEKATSU\n\n"); while(1){ scanKeys(); switch(play_mode){ case PLAY_INIT: //ゲーム初期化「コインいっこいれる」 iprintf("score:%d, play count: %d\n", score, play_count); iprintf("INSERT COIN\n"); play_mode = PLAY_TITLE; case PLAY_TITLE: //ゲームタイトル、ゲーム開始待ち if(keysDown() & KEY_START){ iprintf("CHARIN!\n"); play_count++; play_mode = PLAY_START; } break; case PLAY_START: //ゲーム開始「じゃんけん、」、ゲーム繰り返し「あいこで、」 if(judgment) iprintf("JANKEN "); else iprintf("AIKO de "); play_mode = PLAY_GAME; break; case PLAY_GAME: //ゲームプレイ中「ぽんっ」、「しょっ」 if(isKeysDown(KEY_LEFT | KEY_UP | KEY_RIGHT)){ player_hand = getPlayerHand(); cpu_hand = getCpuHand(); if(judgment) iprintf("PONG!\n"); else iprintf("SHO!\n"); iprintf("PLAYER "); drawHand(player_hand); iprintf("CPU "); drawHand(cpu_hand); if((judgment = judgHand(player_hand, cpu_hand))) play_mode = PLAY_END; else play_mode = PLAY_START; } break; case PLAY_END: //ゲーム終了。勝敗表示、スコア加減算 if(judgment == KACHI) iprintf("KACHI!\n"); else if(judgment == MAKE) iprintf("MAKE!\n"); score += judgment; play_mode = PLAY_INIT; break; default: break; } swiWaitForVBlank(); } return 0; }