まだC言語でゲームを作ったことの無い人、「プログラムを賢く書く」ってどういうことかわからない人、プログラムの面白さを実感した事が無い人、
是非このトピの内容をご覧下さい^^
プログラム独特の考え方の紹介、ゲームプログラムの紹介をいたします☆
必要知識として
・scanf
・printf
・if文
・配列、文字列
の使い方さえわかっていれば大丈夫です!
ではまず、ジャンケンをするのにプレイヤーの意思を受け取る部分を作ってみましょう。
#include <stdio.h> int main(){ int you; printf("ジャンケン・・・。\n\n"); printf("0:グー 1:チョキ 2:パー\n\n"); scanf("%d",&you); printf("あなたの入力:%d\n\n",you); return 0; }
プレイヤーの入力情報を格納するyou変数を用意し、そこにscanfで取り込んでいるだけです。
後はprintfで表示を行っているだけです。
コンピュータにジャンケンを出させてみましょう。
プレイヤーは0~2の数字を入力してそれぞれ表現しましたね。
コンピュータにも0~2の数字を出させて見ましょう。
ランダムな数というのはゲームにとって最重要ポイントです。
「毎回同じ結果になる」ゲームはゲームとは言いません。
人間はいつも違う結果を残すからゲームになるわけですね。
ここでランダムな数を作るにはrand()関数を使います。
これは最初に
#include <stdlib.h>
と書くことで使えるようになる関数です。
rand()と書くとここの部分はその時によって0~32767の数に代わります。
つまり
int a;
a = rand();
とかくと、aには0~32767までの数字のどれかが入る事になります。
この数字を使って0~2の数字に変換するには?
「割ったあまり」という考え方をここで出してきます。
+-*/という四則演算子以外に%という割ったあまりを計算する演算子があります。
a = 5 % 2;
と書くと、5を2で割ったあまりが入ります。つまり1です。
a = 5 % 3;
と書くと、5を3で割ったあまりが入ります。つまり2です。
ここで連続で見てみましょう。
a = 0 % 3; ---->このとき a=0
a = 1 % 3; ---->このとき a=1
a = 2 % 3; ---->このとき a=2
a = 3 % 3; ---->このとき a=0
a = 4 % 3; ---->このとき a=1
a = 5 % 3; ---->このとき a=2
a = 6 % 3; ---->このとき a=0
a = 7 % 3; ---->このとき a=1
a = 8 % 3; ---->このとき a=2
a = 9 % 3; ---->このとき a=0
aの値が0,1,2,0,1,2,とループしている事に気が付きましたか?
そうこのように書くことで、xで割ったあまりを計算するとx種類の数が生成出来るのです。
つまり
com = rand() % 3;
と書くことで、0~2の数が生成できますね。これを利用してみましょう。
#include <stdio.h>
#include <stdlib.h>
int main(){
int you,com;
printf("ジャンケン・・・。\n\n0:グー 1:チョキ 2:パー\n\n");
scanf("%d",&you);
com = rand()%3;
printf("あなた\t\t%d\nコンピュータ\t\t%d\n\n",you,com);
return 0;
}
実行結果
ジャンケン・・・。
0:グー 1:チョキ 2:パー
1
あなた 1
コンピュータ 2
おぉ、これでゲームらしくなってきたな・・・
と思ったら間違いです。
これを何度も実行してみましょう。
コンピュータ 2
コンピュータ 2
コンピュータ 2
コンピュータ 2
コンピュータ 2
・・・あれ?コンピュータは2しか出さないぞ?
と気が付くと思います。そうなんです、コンピュータは「言った事しかしない。正確にその事しかしない」ので、「だいたいな数を出せ、ランダムな数を出せ」というのはホント苦手です。
ですから、ランダムな数にさせる「きっかけ」を持たせないといけないのです。
実行するたびに変わる数って何かいいものあるんだろうか・・。と考えると
実行するたびに変わる数で一ついいものがありますね。
そう、実行した瞬間の時刻です。
「○○日○○時間○○分○○秒」
という今の時刻の事ですね。おそらく前回実行したときと今回実行した時ではこの数は異なっているはずです。
これにきっかけをもたせてランダムな数を作らせたらいいでしょう。
それは
srand((unsigned)time(NULL));
を最初に書くと実現できます。
この関数は最初に
#include <time.h>
を書くことで使用できるようになります。
「ん・・なんか難しいな」
とお思いでしょうが、別に意味は知らなくてもOKです。
これを書けば乱数が質のよい乱数になるんだなと覚えて置いてください。
プログラムにまとめると以下のようになります
↓