Skip to content

Instantly share code, notes, and snippets.

@falcon8823
Last active December 14, 2015 11:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save falcon8823/5076705 to your computer and use it in GitHub Desktop.
Save falcon8823/5076705 to your computer and use it in GitHub Desktop.

じゃんけんプログラム

4人でじゃんけんをします。

実行例

あなたの名前を入力してください: はやと 
CPU1の名前を入力してください: 太郎
CPU2の名前を入力してください: 次郎
CPU3の名前を入力してください: 三郎

 はやとさんの手を入力してください(グー:1 チョキ:2 パー:3) :1

-----[みんなの出した手]-----
はやとが出した手: グー
太郎が出した手: チョキ
次郎が出した手: チョキ
三郎が出した手: パー

引き分けです


 はやとさんの手を入力してください(グー:1 チョキ:2 パー:3) :1

-----[みんなの出した手]-----
はやとが出した手: グー
太郎が出した手: パー
次郎が出した手: チョキ
三郎が出した手: パー

引き分けです


 はやとさんの手を入力してください(グー:1 チョキ:2 パー:3) :1

-----[みんなの出した手]-----
はやとが出した手: グー
太郎が出した手: グー
次郎が出した手: パー
三郎が出した手: パー

はやとは負けです。
太郎は負けです。
次郎は勝ちです。
三郎は勝ちです。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// 人数
#define N 4
// 手の定数
#define STONE 1
#define SCISSORS 2
#define PAPER 3
int main(void) {
char name[N][31]; // プレイヤー,CPUの名前を保存
int hand[N]; // プレイヤー,CPUの手を保存
int stone[N], scissors[N], paper[N]; // グー,チョキ,パーを出した人をそれぞれ保存(出したら1が保存)
int stone_cnt, scissors_cnt, paper_cnt; // グー,チョキ,パーをそれぞれ何人出したかを保存
int i; // ループ用変数
srand(time(NULL)); //乱数種を初期化
/****** 名前入力 ******/
// 順に入力を求める
for(i = 0; i < N; i++) {
// プレイヤーとCPUでメッセージを分ける
if(i == 0) // 0はプレイヤー
printf("あなたの名前を入力してください: ");
else // それ以外はCPU
printf("CPU%dの名前を入力してください: ", i);
scanf("%s", name[i]);
}
// 無限ループ(勝敗が決まったらbreakで脱出)
while(1) {
// カウンタ変数リセット
stone_cnt = scissors_cnt = paper_cnt = 0;
for(i = 0; i < N; i++) stone[i] = scissors[i] = paper[i] = 0;
/****** 出す手の入力 ******/
printf("\n %sさんの手を入力してください(グー:1 チョキ:2 パー:3) :", name[0]);
scanf("%d", &hand[0]);
// エラーの時再入力を求め続ける
while(hand[0] < 1 || hand[0] > 3) {
printf("1か2か3を入力してください(グー:1 チョキ:2 パー:3) :");
scanf("%d", &hand[0]);
}
// CPUの手をランダムで決定
for(i = 1; i < N; i++) {
hand[i] = rand() % 3 + 1;
}
/****** 出した手の表示 ******/
printf("\n-----[みんなの出した手]-----\n");
for(i = 0; i < N; i++) {
printf("%sが出した手: ", name[i]);
if(hand[i] == STONE) printf("グー\n");
else if(hand[i] == SCISSORS) printf("チョキ\n");
else if(hand[i] == PAPER) printf("パー\n");
}
printf("\n");
/****** 出した手をグループ分け ******/
// グー,チョキ,パーでグループ分け
for(i = 0; i < N; i++) { // 全員の手を調べる
if(hand[i] == STONE) {
stone[i] = 1;
stone_cnt++;
} else if(hand[i] == SCISSORS) {
scissors[i] = 1;
scissors_cnt++;
} else if(hand[i] == PAPER) {
paper[i] = 1;
paper_cnt++;
}
}
/****** あいこ判定 ******/
// 全員がバラバラの手を出したとき→あいこ
if(stone_cnt > 0 && scissors_cnt > 0 && paper_cnt > 0) {
printf("引き分けです\n\n");
continue; // while(1)の先頭に戻る
}
// 全員が同じ手を出したとき→あいこ
if(stone_cnt == N || scissors_cnt == N || paper_cnt == N) {
printf("引き分けです\n\n");
continue; // while(1)の先頭に戻る
}
/****** 勝敗判定 ******/
if(paper_cnt == 0) { // グーとチョキの組あわせ(パーが出ていない)
// グーが勝ち,チョキが負け
// それぞれの勝敗を表示
for(i = 0; i < N; i++) {
if(stone[i] == 1) printf("%sは勝ちです。\n",name[i]);
else printf("%sは負けです。\n",name[i]);
}
} else if(scissors_cnt == 0) { // グーとパーの組あわせ(チョキが出ていない)
// パーが勝ち,グーが負け
for(i = 0; i < N; i++) {
if(paper[i] == 1) printf("%sは勝ちです。\n", name[i]);
else printf("%sは負けです。\n", name[i]);
}
} else if(stone_cnt == 0) { // チョキとパーの組あわせ(グーが出ていない)
// チョキが勝ち,パーが負け
for(i = 0; i < N; i++) {
if(scissors[i] == 1) printf("%sは勝ちです。\n", name[i]);
else printf("%sは負けです。\n", name[i]);
}
}
break; // 勝敗が決まったので終わり
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment