×

[PR]この広告は3ヶ月以上更新がないため表示されています。ホームページを更新後24時間以内に表示されなくなります。


C言語

プロフィール

プロフィール画像
■ 某国立大学に通う大学生です。
■ サッカー大好き
■ プログラミングを始めてまだ一年です。
>>プロフィールの詳細


C言語


〜じゃんけんゲームを作ろう〜

じゃんけんゲームを作るときには、コンピューターに手をランダムに出させることを
考えなければいけません。
その方法として、乱数を使う方法があります。
乱数の使い方はやり方を覚えれば、ワンパターンなのでしっかり使いこなしましょう。

必要な文法[乱数、switch文]
考え方
ソースプログラム
演習問題

必要な文法[乱数、switch文]


乱数
・0からRAND_MAXまでの乱数

#include <stdlib.h>
#include <time.h>
int main(void){
  srand((unsigned)time(NULL));
   int ransuu;
  ransuu=rand();
   .
   .
   .
}

乱数とは実行する度に値が変わるランダムな数字です。
そしてrand()というのが毎回戻り値が変わる関数です。
この関数を用いて毎回ランダムな数字を出すためには
stdlib.h
をインクルードしなければいけません。
乱数を使いたいときは必ず記述しましょう。
また必ず記述しなければいけない記述が
time.h、srand((unsigned)time(NULL));
です。
この記述がないと、コンパイルしたときに
生成される乱数列が決定してしまいます。
つまり同じプログラムを複数回実行したときに
毎回新しい乱数列が生成されなくなってしまいます。
例えば、じゃんけんゲームで考えると
一回目の勝負は、どちらかの勝ちが決まるまでランダムで勝負できますが
二回目以降の勝負では、コンピューターは一回目に出した手と同じ順番で
手を出してしまいます。
なお、rand()の戻り値の範囲は0〜RAND_MAXとなります。
RAND_MAXはコンパイラによって変わる数です。
・指定した範囲の乱数(整数)
i〜i+jまで
ransuu=i+rand()%j;
・指定した範囲の乱数(小数)
i〜i+jまで
ransuu=i+(int)(rand()*(j+1.0)/(1.0+RAND_MAX);
switch文

switch(式){
	case 条件式1:
	文1;
	break;
	case 条件式2:
	文2;
	break;
	case 条件式3:
	文3;
	break;
	.
	.
	.
	default:
	文L;
	break;
}

条件によって多数の分岐を作りたいときに使います。
式==条件式1なら文1を、式==条件式2なら文2を、式==条件式3なら文3を
式がどれにも当てはまらなければ、defaultにとび、文Lを実行します。
最後のdefaultはなくてもかまいません。
また「式」は整数、文字定数のみ使用可でdouble型等は使用不可です。
if文で書き換える事が出来ます。

考え方

じゃんけんなのであいこの場合はやりなおして、勝敗がつくまで続けなければなりません。
まず、プレイヤーの手を入力してもらいます。
グー、チョキ、パーをそれぞれ数字に置き換えると良いでしょう。
そしてコンピューターの手を乱数を使って決めます。
このとき先ほど決めた数字の範囲に絞るようにします。
そして、判定をする前に、勝負がついたかどうかを判断する変数し、0を代入しておきましょう。
これであいこの場合は変数を0のままにし、勝負がついた場合は1にします。
あとは変数が0の場合のみ、勝負を続けていく形でループさせれば完成です。

ソースプログラム



#include<stdlib.h>
#include<stdlib.h>
#include<time.h>
			
int main(){
    int player;
    int cpu;
    int hantei=0;
    srand((unsigned)time(NULL));
	
    while (hantei==0) {
        printf("手を選んでください\n");
        printf("グー:0、チョキ:1、パー:2\n");
        scanf("%d",&player);
        cpu=rand()%3;
        switch(player){
            case 0:
		    printf("あなたの手:グー\n");
            break;
            case 1:
            printf("あなたの手:チョキ\n");
            break;
            case 2:
            printf("あなたの手:パー\n");
            break;
        }
        switch(cpu){
            case 0:
            printf("CPUの手:グー\n");
            break;
            case 1:
			printf("CPUの手:チョキ\n");
            break;
			case 2:
            printf("CPUの手:パー\n");
            break;
        }
        if((player==0 && cpu==2) || (player==1 && cpu==0) || (player==2 && cpu==1)){
            printf("あなたの負けです\n");
            hantei=1;
        }else if(player==cpu){
            printf("あいこです\nもう一度");
        }else{
            printf("あなたの勝ちです\n");
            hantei=1;
        }
    }
    return 0;
}


実行結果
$ ./janken
手を選んでください
グー:0、チョキ:1、パー:2
1
あなたの手:チョキ
CPUの手:チョキ
あいこです
もう一度手を選んでください
グー:0、チョキ:1、パー:2
1
あなたの手:チョキ
CPUの手:グー
あなたの負けです
理解できましたか。
もし理解できたら以下のプログラムにチャレンジしてみてください。

演習問題


じゃんけんのプログラムにあっち向いてほいの機能をつけましょう。


C言語〜キーボードから入力した文字を出力しよう〜トップへ▲
C言語〜サンプルプログラム〜トップへ▲

ホームページ テンプレート フリー">

Design by