プログラムを起動すると、以下のようになるものを想定している。
% ./janken じゃんけん…(グー=g チョキ=c、パー=p、やめる=q): g 私 グー : グー あなた あいこです! じゃんけん…(グー=g チョキ=c、パー=p、やめる=q): c 私 パー : チョキ あなた 負けちった! じゃんけん…(グー=g チョキ=c、パー=p、やめる=q): p 私 チョキ : パー あなた いえ〜い、勝ったぜ じゃんけん…(グー=g チョキ=c、パー=p、やめる=q): q えー、もうやめちゃうの? また遊んでね。バイバイ。
メッセージは適当に変えて良い。余裕があれば、
などの拡張を加えると良い。
グー・チョキ・パーの乱数の作り方については、 数当てゲームのヒントを参考にすること。 じゃんけんの場合は、手が3つなので
グー 0 チョキ 1 パー 2
のように0〜2の数値を利用すれば良い。
コンピュータの手を決めるときは、0〜2の乱数をグー(g)、チョキ(c)、 パー(p)に対応付ける。たとえば以下のようにする。
char janken[] = "gcp"; /* 'g', 'c', 'p', '\0' という配列ができる */ char com_hand; /* コンピュータの手を保存(8bitのcharで足りる) */ int x; : : x = random()%3 /* 0〜2の乱数 */ com_hand = janken[x]; /* janken[0], janken[1], janken[2] のどれかになる */ /* つまり 'g', 'c', 'p' のどれかになる */
ユーザが読み込んだ文字列が、グー、チョキ、パーのどれかを判別するには 先頭の一文字を比較すれば良い。たとえば、
char hand[3]; /* g,c,p,q のどれか + 改行 + \0 */ : : printf("じゃんけん…(グー=g チョキ=c、パー=p、やめる=q): "); fgets(hand, sizeof hand, stdin); /* キーボードから入力 */
として読み込むと、ユーザが入力したものが hand
配列に
格納される様子は、以下のようになる。
hand[0]
hand[1]
hand[2]
'g'
'\n'
'\0'
hand[0]
hand[1]
hand[2]
'c'
'\n'
'\0'
hand[0]
hand[1]
hand[2]
'p'
'\n'
'\0'
hand[0]
hand[1]
hand[2]
'q'
'\n'
'\0'
となるから、先頭、つまりhand[0]
が
'g', 'c', 'p', 'q'
のどれかで場合分けすれば良い。
: : if (hand[0] == 'g') { /* グー を入力したのね */ /* グーの場合の処理 */ } else if (hand[0] == 'c') { /* チョキ を入力したのね */ /* チョキの場合の処理 */ } else if (hand[0] == 'p') { /* パー を入力したのね */ /* パーの場合の処理 */ } else if (hand[0] == 'q') { /* やめる を入力したのね */ /* やめる場合の処理 */ } else { /* どれでもない */ /* エラーメッセージでも表示しとこか */ }
のようにすると勝負判定とやめる場合の判定ができるだろう。