条件判定とループ課題:じゃんけんゲームを作る
目次
- 条件判定:if文, switch文
- 条件ループ:for文, while文
- 練習課題その4:じゃんけんゲームを作る
1. 条件判定:if文, switch文
ある条件によりプログラムの流れを変えるためには、条件判定文を使います。条件判定文には、if文とswitch文の2種類があります。
条件判定文 |
if文
‾‾
if ( 条件式 )
{
条件式が真の時の動作
}
else
{
条件式が偽の時の動作
}
switch文
‾‾‾‾
switch ( 整数値式 )
{
case n:
整数値式 = n の時の動作
break;
...
default:
上記のどのcaseにも洩れた場合の動作
}
|
条件式に使う比較演算子は「簡単な数値計算プログラム」のところに出てきましたね。
次に、if文、switch文の例を示します。分かりますか?
if文の例 |
この例では整数変数aが100より大きいか、等しいか、それ以外かで
動作を3通りに変えています。
if ( a > 100 )
{
printf("aは100より大きい\n");
}
else if ( a == 100 ) /* "=="であることに注意! "="では代入になります */
{
printf("aは100と等しい\n");
}
else
{
printf("aは100より小さい\n");
}
|
switch文の例 |
この例では整数変数aの値により画面への表示を3通りに変えています。
switch( a )
{
case 1:
printf("aは1だよ!\n");
break;
case 2:
printf("aは2だよ!\n");
break;
case 3:
printf("aは3だよ!\n");
break;
default:
printf("aは1でも2でも3でもないよ!\n");
}
|
2. 条件ループ:for文, while文
ある条件の下で繰り返し処理を行なうには、条件ループを使います。
条件ループの書き方は幾つかありますが、ここではfor文とwhile文の2つ
を説明します。
条件判定ループ |
for 文
‾‾‾
for ( 初期化 ; 繰返し条件 ; 繰返し式 )
{
繰返したい動作
}
|
これだけでは分かりづらいですね。次の例を見て下さい。
for文の例 |
この例では、iが0から9まで1ずつ増えながら繰り返し10回ループします。
i++は i=i+1の意味です。
int i;
for ( i=0; i<10; i++)
{
printf("i=%d\n", i);
}
|
条件判定ループ |
while 文
‾‾‾‾
while ( 繰り返し条件 )
{
繰返したい動作
}
|
こちらの方がfor文よりも簡単そうですね。では次の例を見てみましょう。
while文の例 |
この例も、iが0から9まで1ずつ増えながら10回ループします。
for文の場合との違いに注意して下さい。
int i;
i=0;
while ( i<10 )
{
printf("i=%d\n", i);
i++;
}
|
3. 練習課題その4:じゃんけんゲームを作る
条件判定、条件ループを使って、じゃんけんゲームを作りましょう。
じゃんけんゲームの流れは次のようになります。
じゃんけんゲームの流れ |
ゲーム終了フラグに0を代入する
ゲーム終了フラグが1でなければ次のループを繰り返す
(1) printf(...)を用いてメニューを表示する「1.グー 2.チョキ 3.パー 4.終了」
(2) scanf(...)を用いて整数を入力する
(3) if文で入力された数字を調べる。それが4なら以下を実行する。
(a) ゲーム終了フラグに1を代入する
それが4でなければ以下を実行する。
(a) コンピュータの手を作る(drand48()を使用。詳細は後で)
(b) if文でコンピュータとプレーヤの勝敗を判定し、
判定結果を表示する。
ゲーム終了メッセージの表示
|
たったこれだけで作れ!というのも酷だと思いますので、以下に上の流れに沿っ
た雛型を示します。全部自分で作る自身がない人はこれを参考に穴埋めをしてゲー
ムを完成させて下さい。
/* "jgame.c" --- じゃんけんゲームプログラム */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* メイン関数(必ず必要。C言語ではこの中が最初に実行される) */
int main(void)
{
int game_end; /* ゲーム終了フラグ */
int player; /* プレーやの手 */
int computer; /* コンピュータの手 */
game_end = 0; /* ゲーム終了フラグの初期化 */
srand48(time(NULL)); /* 乱数列の初期化 */
/*
* ゲームが終了するまでのループ
*/
while ( game_end != 1 )
{
/* メニュー表示 */
printf("1. グー 2.チョキ 3.パー 4.終了\n");
printf("input>");
/* 入力(変数playerに入る) */
scanf("%d", &player);
/* 入力が4なら*/
if ( player == 4 )
{
game_end = 1; /* ゲーム終了フラグを1にする */
}
else /* そうでなければ */
{
/* 乱数によりコンピュータの手を作る(1 or 2 or 3) */
computer = (int)( 2.9999 * drand48() ) + 1;
/* 自分とコンピュータの手が同じ場合 */
if ( player == computer )
{
printf("あいこでしょ\n");
}
(残りのif文は自分で考えよう)
}
}
printf("ゲーム終了\n");
return 0;
}
|
じゃんけんゲームの解答例
/* "jgame.c" --- じゃんけんゲームプログラム */
#include
#include
#include
/* メイン関数(必ず必要。C言語ではこの中が最初に実行される) */
int main(void)
{
int game_end; /* ゲーム終了フラグ */
int player; /* プレーヤの手 */
int computer; /* コンピュータの手 */
game_end = 0; /* ゲーム終了フラグの初期化 */
srand48(time(NULL)); /* 乱数列の初期化 */
/* ゲームが終了するまでのループ*/
while ( game_end != 1 )
{
/* メニュー表示 */
printf("1. グー 2.チョキ 3.パー 4.終了\n");
printf("input>");
/* 入力(変数playerに入る) */
scanf("%d", &player);
/* 入力が4なら*/
if ( player == 4 )
{
game_end = 1; /* ゲーム終了フラグを1にする */
}
else /* そうでなければ */
{
/* 乱数によりコンピュータの手を作る(1 or 2 or 3) */
computer = (int)( 2.9999 * drand48() ) + 1;
/* 自分とコンピュータの手が同じ場合 */
if ( player == computer )
{
printf("あいこでしょ\n");
}
else if( (player == 1 && computer == 2)
||
(player == 2 && computer == 3)
||
(player == 3 && computer == 1))
{
printf("あなた: %d\n",player);
printf("こんぴゅーた: %d\n",computer);
printf("あなたのかち\n");
// game_end = 1; /* ゲーム終了フラグを1にする */
}
else{
printf("あなた: %d\n",player);
printf("こんぴゅーた: %d\n",computer);
printf ("あなたのまけ\n");
// game_end = 1; /* ゲーム終了フラグを1にする */
}
}
}
printf("ゲーム終了\n");
return 0;
}
|
drand48()は0.0〜1.0の間の乱数を生成する関数です。
drand48()を使用する前には、srand48()を呼び出して乱数を初期化する必要があります。
プログラムを打ち込み終ったら、コンパイルし、実行して下さい。
ゲームはちゃんとできるでしょうか。早く終った人は、コンピュータの手の表示等、
工夫を凝らして下さい。
戻る