C言語でじゃんけんゲームを教えて!
こういった悩みにお答えします.
本記事の信頼性
- リアルタイムシステムの研究歴12年.
- 東大教員の時に,英語でOS(Linuxカーネル)の授業.
- 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校(UNC)コンピュータサイエンス学部で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
- プログラミング歴15年以上,習得している言語: C/C++,Python,Solidity/Vyper,Java,Ruby,Go,Rust,D,HTML/CSS/JS/PHP,MATLAB,Verse(UEFN), Assembler (x64,aarch64).
- 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」をGitHubにオープンソースとして公開.
- 2020年1月~現在はアメリカのノースカロライナ州チャペルヒルにあるGuarantee Happiness LLCのCTOとしてECサイト開発やWeb/SNSマーケティングの業務.2022年6月~現在はアメリカのノースカロライナ州チャペルヒルにあるJapanese Tar Heel, Inc.のCEO兼CTO.
- 最近は自然言語処理AIとイーサリアムに関する有益な情報発信に従事.
- (AI全般を含む)自然言語処理AIの論文の日本語訳や,AIチャットボット(ChatGPT,Auto-GPT,Gemini(旧Bard)など)の記事を50本以上執筆.アメリカのサンフランシスコ(広義のシリコンバレー)の会社でプロンプトエンジニア・マネージャー・Quality Assurance(QA)の業務委託の経験あり.
- (スマートコントラクトのプログラミングを含む)イーサリアムや仮想通貨全般の記事を200本以上執筆.イギリスのロンドンの会社で仮想通貨の英語の記事を日本語に翻訳する業務委託の経験あり.
こういった私から学べます.
C言語を独学で習得することは難しいです.
私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.
私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!
独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!
本記事は,乱数を理解していることを前提とします.
目次
【C言語】じゃんけんゲーム
C言語でじゃんけんゲームを作成します.
具体的には,じゃんけんゲームの相手が1人と2人のコードをそれぞれ解説します.
相手が1人の場合のじゃんけんゲーム
相手が1人の場合のじゃんけんゲームのコードは以下になります.
コードの重要なポイントは以下になります.
- 33~38行目:最初に1(じゃんけんを開始)か0(じゃんけんを終了)を入力
- 42~46行目:あなたの手として0(グー),1(チョキ),2(パー)を入力
- 50行目:相手の手が0(グー),1(チョキ),2(パー)でランダムに選択
- 54~64行目:じゃんけんの結果(あいこ,勝ち,負け)を判定
- 最初に戻る
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
/* * Author: Hiroyuki Chishiro * License: 2-Clause BSD */ #include <stdio.h> #include <stdlib.h> #include <time.h> #define RANDOM(MIN,MAX) ((MIN)+(int)(rand()/(float)RAND_MAX*((MAX)-(MIN)+1))) enum { GU, CHOKI, PA }; void print_hand(const char *str, int x) { if (x == GU) { printf("%sは『グー』です!\n", str); } else if (x == CHOKI) { printf("%sは『チョキ』です!\n", str); } else if (x == PA) { printf("%sは『パー』です!\n", str); } else { fprintf(stderr, "不正な手です!\n"); } } int main(void) { int x, y; int fin_flag = 0; int ncommand; srand((unsigned int)time(0) * (unsigned int)time(0)); do { do { printf("1:じゃんけんを開始\n"); printf("0:じゃんけんを終了\n"); scanf("%d", &ncommand); } while (ncommand != 0 && ncommand != 1); switch (ncommand) { case 1: do { printf("あなたの手は何ですか?\n"); printf("0:グー\n1:チョキ\n2:パー\n"); scanf("%d", &y); } while (y < GU || y > PA); print_hand("あなたの手", y); x = RANDOM(GU, PA); print_hand("相手の手", x); if ((y == GU && x == GU) || (y == CHOKI && x == CHOKI) || (y == PA && x == PA)) { printf("【結果】あいこです!\n"); } if ((y == GU && x == CHOKI) || (y == CHOKI && x == PA) || (y == PA && x == GU)) { printf("【結果】あなたの勝ちです!\n"); } if ((y == GU && x == PA) || (y == CHOKI && x == GU) || (y == PA && x == CHOKI)) { printf("【結果】あなたの負けです!\n"); } break; case 0: fin_flag = 1; break; } } while (fin_flag == 0); return 0; } |
実行結果の例は以下になります.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
$ gcc janken.c $ a.out 1:じゃんけんを開始 0:じゃんけんを終了 1 あなたの手は何ですか? 0:グー 1:チョキ 2:パー 1 あなたの手は『チョキ』です! 相手の手は『パー』です! 【結果】あなたの勝ちです! 1:じゃんけんを開始 0:じゃんけんを終了 1 あなたの手は何ですか? 0:グー 1:チョキ 2:パー 1 あなたの手は『チョキ』です! 相手の手は『チョキ』です! 【結果】あいこです! 1:じゃんけんを開始 0:じゃんけんを終了 0 |
相手が2人の場合のじゃんけんゲーム
相手が2人の場合のじゃんけんゲームのコードは以下になります.
相手が1人の場合との主な違いは以下になります.
- 59行目:相手が2人なのでRANDOMマクロを2回呼び出し
- 56,62行目:あなたと相手2人の手(グーを0,チョキを1,パーを2)の合計sumを計算
- 65~95行目:sumの値をプレーヤー数NR_PLAYERSで割った余りを利用して勝者を判定
- 余りが0の場合:あいこ
- 余りが1の場合:2人の勝者を判定
- 余りが2の場合:1人の勝者を判定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
/* * Author: Hiroyuki Chishiro * License: 2-Clause BSD */ #include <stdio.h> #include <stdlib.h> #include <time.h> #define RANDOM(MIN,MAX) ((MIN)+(int)(rand()/(float)RAND_MAX*((MAX)-(MIN)+1))) #define NR_OPPONENTS 2 #define BUFSIZE 64 enum { GU, CHOKI, PA, TOTAL_HANDS }; void print_hand(const char *str, int x) { if (x == GU) { printf("%sは『グー』です!\n", str); } else if (x == CHOKI) { printf("%sは『チョキ』です!\n", str); } else if (x == PA) { printf("%sは『パー』です!\n", str); } else { fprintf(stderr, "不正な手です!\n"); } } int main(void) { int x[NR_OPPONENTS], y; char buf[BUFSIZE]; int fin_flag = 0; int ncommand; int sum; int i; srand((unsigned int)time(0) * (unsigned int)time(0)); do { do { printf("1:じゃんけんを開始\n"); printf("0:じゃんけんを終了\n"); scanf("%d", &ncommand); } while (ncommand != 0 && ncommand != 1); switch (ncommand) { case 1: do { printf("あなたの手は何ですか?\n"); printf("0:グー\n1:チョキ\n2:パー\n"); scanf("%d", &y); } while (y < GU || y > PA); print_hand("あなたの手", y); sum = y; for (i = 0; i < NR_OPPONENTS; i++) { x[i] = RANDOM(GU, PA); sprintf(buf, "相手%dの手", i); print_hand(buf, x[i]); sum += x[i]; } switch (sum % TOTAL_HANDS) { case 0: printf("【結果】あいこです!\n"); break; case 1: if (y == x[0]) { printf("【結果】あなたと相手0の勝ち(相手1の負け)です!\n"); } else if (x[0] == x[1]) { printf("【結果】あなたの負け(相手0と相手1の勝ち)です!\n"); } else { printf("【結果】あなたと相手1の勝ち(相手0の負け)です!\n"); } break; case 2: if (y == x[0]) { printf("【結果】あなたと相手0の負け(相手1の勝ち)です!\n"); } else if (x[0] == x[1]) { printf("【結果】あなたの勝ち(相手0と相手1の負け)です!\n"); } else { printf("【結果】あなたと相手1の負け(相手0の勝ち)です!\n"); } break; default: fprintf(stderr, "不正な値%dです!\n", sum % TOTAL_HANDS); break; } break; case 0: fin_flag = 1; break; } } while (fin_flag == 0); return 0; } |
実行結果の例は以下になります.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
$ gcc janken2.c $ a.out 1:じゃんけんを開始 0:じゃんけんを終了 1 あなたの手は何ですか? 0:グー 1:チョキ 2:パー 1 あなたの手は『チョキ』です! 相手0の手は『チョキ』です! 相手1の手は『パー』です! 【結果】あなたと相手0の勝ち(相手1の負け)です! 1:じゃんけんを開始 0:じゃんけんを終了 1 あなたの手は何ですか? 0:グー 1:チョキ 2:パー 1 あなたの手は『チョキ』です! 相手0の手は『パー』です! 相手1の手は『グー』です! 【結果】あいこです! 1:じゃんけんを開始 0:じゃんけんを終了 0 |
まとめ
C言語でじゃんけんゲームを紹介しました.
具体的には,相手が1人と2人の場合のコードを解説しました.
チャレンジしたいあなたは,相手が3人以上の場合のコードを作成してみましょう!
C言語でテトリスやブロック崩しを作成したいあなたはこちらからどうぞ.
C言語を独学で習得することは難しいです.
私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.
私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!
独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!