こんにちは。武田です。
先日は2泊3日のスキー研修がありました。
その中で「学院長とじゃんけんして、勝ったら景品がもらえる!」という催しがありました。
C言語でじゃんけんを表してみました。(というか、わたしがプログラミングの授業でよく出す課題の一つです)
こんな感じです。
コンピュータと1対1でじゃんけんをします。
/*
jyan-ken1.c コンピュータと1対1でじゃんけんをする
繰り返し処理なし。判定して終わり
Created by MRGARITA.NET on 2015/04/20.
Copyright 2015 Shuichi Takeda, All rights reserved.
*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int yourhand, comhand;
int result = 0;
srand((unsigned)time(NULL));
// お互いが同時に「じゃんけん」と言う
printf("じゃんけん!");
// 人が「グー」、「チョキ」「パー」のいづれかを出す
printf("1:グー 2:チョキ 3:パー (1〜3で選んでください) ");
scanf("%d", &yourhand);
// コンピュータが「グー」、「チョキ」「パー」のいづれかを出す
comhand = rand() % 3 + 1;
printf("ポン!¥n");
// ルールに沿って判定(勝ち、負け、あいこ)を行う
if(yourhand == comhand){
result = 999; // あいこ
}
else if( (yourhand == 1 && comhand == 2) ||
(yourhand == 2 && comhand == 3) ||
(yourhand == 3 && comhand == 1)){
result = 1; // 勝ち
}
else if( (yourhand == 1 && comhand == 3) ||
(yourhand == 2 && comhand == 1) ||
(yourhand == 3 && comhand == 2)){
result = 0; // 負け
}
printf("¥nあなた: %d¥tコンピュータ: %d¥n", yourhand, comhand);
// 判定
if(result == 1){
printf("¥nあなたの勝ち!!!!!!¥n");
}
else if(result == 0){
printf("¥n残念!あなたの負けです¥n");
}
else if(result == 999){
printf("¥nあいこで...");
}
return 0;
}
プログラムの中でじゃんけんの手であるグー、チョキ、パーをそれぞれ1、2、3の数値で表しています。
あいこの場合は、お互いの手が同じ数値(お互いグーなら1と1)になるわけです。これなら判定がしやすいです。
勝負の判定も数値です。
勝ったら1、負けたら0、あいこの場合は999という数値で判定するようにしています。
コンピュータは中身が数値(2進数)で動いているので数値化したほうが判定しやすいのです。
このように何かの状態を数値に置き換える事が出来れば、たいていの事はプログラムに直せます。
「何かに置き換えて考える」ことがプログラミングの面白さとも言えます。
上記のプログラムは中途半端です。
あいこの処理が出来ていないからです。
あいこの時は、じゃんけんの勝負をもう一度したいですよね。
ぜひ、考えてみて下さい!