- ベストアンサー
C言語じゃんけんゲーム作成
- C言語でじゃんけんゲームを作成するためのプログラムを提供します。
- プログラムでは、5つの異なるコンピュータの手のパターンを関数化し、選択できるようになっています。
- プレイヤーとコンピュータのじゃんけんを繰り返し行い、結果を表示します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
突貫で考えたので粗悪ですが、とりあえずのコードを挙げます。 <仮定> ●ゲームモードは毎回選択する ⇔合計を取る意味が薄くなった。 ●「じゃんけん処理関数」について ・引数は「プレイヤーの出した手」。戻り値は難易度にしたがい処理した「勝ち敗け結果」。 <簡単解説> ●主な変更点 ・じゃんけん処理に使っていたswitch文を「ゲームモード毎のじゃんけん処理関数呼び出し」に変更。 ・scanfが増えたので、エラー対策追加。 ●変更コンセプトと反省点 ・なるべく提示された原型を壊さずに改良してみた。 結果として、あまりよろしくない処理になっている。以下の点を改良すると、もう少しよくなると思う。 ・「ゲームモードの決定処理」が「プレイヤーの手処理」の前後に存在するので可読性・移植性が悪い 「プレイヤーの手処理」も関数化して、「じゃんけん処理関数」の中から呼ぶべき #include <stdio.h> #include <stdlib.h> #include <time.h> #include "main.h"/* 関数の宣言などをまとめたヘッダファイル */ char *table[]={"グー","パー","チョキ"}; int main(void) { int i,j; int continue_f; int player,computer; int p_win,p_lose,p_draw; int t_win,t_lose,t_draw; unsigned int gamemode;/* ゲームモードを覚えておく変数 */ t_win=t_lose=t_draw=0; gamemode = 0;/* ちゃんと初期化します */ srand(time(NULL)); do{ /* ゲームモード選択 */ printf("ゲームモードを選択してください\n"); printf("0:楽勝\t 1:簡単\t 2:適当\n"); printf("3:いじめ\t 4:チート \n"); scanf("%d", &gamemode); if(gamemode > 5) { /* エラー対策。本来は再入力を求めるべきだが、そのためには全体のロジック変更が望ましい */ /* なので、最低限の手抜き対策です */ printf("そんなモードはない。めんどいからチートモードにご案内\n"); gamemode = 4; } p_win=p_lose=p_draw=0; for(i=0;i<5;i++){ while(1){ printf("あなたが出した手は・・・\n"); printf("グー:0 パー:1 チョキ:2\n"); scanf("%d",&player); if(0<=player&&player<=2){ break; }else{ printf("もう一度入力してください。\n"); } } switch(gamemode){ case 0: /* 関数「楽勝」をコール (コンピュータが絶対負け)*/ computer = Veryeasy_mode(player);/*関数の中身は御自分でお願いします*/ break; case 1: /* 関数「簡単」をコール */ computer = Easymode(player);/*関数の中身は御自分でお願いします*/ break; case 2: /* 関数「適当」をコール */ computer = Normalmode(player);/*関数の中身は御自分でお願いします*/ break; case 3: /* 関数「いじめ」をコール */ computer = Hardmode(player);/*関数の中身は御自分でお願いします*/ break; case 4: /* 関数「チート」をコール (コンピュータが絶対勝つ)*/ computer = Cheetmode(player);/*関数の中身は御自分でお願いします*/ break; default: /* エラー対処済みなので何もしない */ /* めんどいのでやってないが、本来はゲームモードのスイッチ処理⇒プレイヤーの手処理とするべき */ break; } //以下、「勝敗処理」は提示頂いたコードと同じなので省略
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
関数に「しない」なら作れますか?
お礼
自己解決しました。申し訳ありませんでした
補足
私のミスだと思うのですが実行できません… 多分swicth caseの関数の中身を間違えているみたいで… お手数をお掛けしますが書いて頂けると助かります…