C言語 入門 ミニゲーム集

その1 タイピングゲーム 説明

ゲームプログラミングの入門に

HOME/ミニゲーム集 目次/その1 タイピングゲーム 説明/

広告

↓2016年02月29日発売↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

新品価格
¥2,462から
(2016/5/10 22:16時点)

もっと!C、C++言語本

目次へ戻る

タイピングゲーム 説明

画像(m-1-1)

アルファベット小文字を打つタイピングゲームになります。

連続して表示されるアルファベット一文字が画面の端に到達する前に小文字でタイピングしていきます。

ヘッダファイル

今回必要なヘッダファイルです。

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

<stdio.h>以外を説明します。

<stdlib.h>

画面をクリアする「system("cls")」・乱数を発生させる「rand()」で使います。

<conio.h>

キー入力の「_getch()」などで使います。

<time.h>

時間を調べる「time()」で使います。今回は乱数の命令と一緒に使ってます。

もう少し詳しくという方はわからなそうな用語集のヘッダファイルを見てください。

変数

int key = 0;
int i = 0;
int ran = 0;
int count = 0;
int score = 0;
int mistake = 0;

大事な役割を持つ変数が

int key = 0;入力されたキーを保存
int ran = 0;乱数を保存

こちらの2つの変数になります。あとはゲーム全体のループ用や得点用で使われてるだけです。

アルファベット26文字分の乱数を発生

乱数はよく使われるのでカタチで覚えてしまいましょう。

srand((unsigned)time(NULL));
ran = (rand() % 26);

まず一行目「srand()」というのは、乱数を使う時に必要な関数になるので深い事は気にせずそのままにしましょう。

そして2行目の後ろの「26」この数字を変える事によって必要な範囲の乱数を発生させる事ができます。

ここを「10」にすると「0〜9」まで、「50」にすると「0〜49」までという具合に乱数の範囲を決める事ができます。

今回はアルファベット26文字なので「26」ですね。

文字コードから計算

今回のプログラムの一番大事な部分です。

#include <stdio.h>

int main(){
	printf("a = %d\n",'a');
	printf("97 = %c\n",97);
	printf("98 = %c\n",98);

	return 0;
}

■実行結果■

画像(m-1-2)

最初に「a」の文字コードを表示して、次にその逆の文字コードから文字を表示するプログラムになります。

文字コードを知りたい時は「%d」、逆に文字コードから文字を表示させたい時は「%c」を使います。

実行結果から「a」の文字コードは「97」番、そしてその次の「98」番は「b」になる事がわかります。

つまり文字コード「97番〜122番」がアルファベット小文字の「a〜z」という事になります。

なのでこれを利用して最初の「97」番に乱数で発生させた「0〜25」の値を加えてやればアルファベットをランダムに発生させてあげる事ができるワケです。

printf("%c",(97 + ran));

文字コード「97」番にさきほど発生させた乱数「ran」を加えてます。

キー入力

こちらもカタチで覚えましょう。

if(_kbhit()){
	key = _getch();
	if(key == 0 || key == 224)key = _getch();
}

まず「if(_kbhit())」こちらはキー入力が合った時に反応する関数になります。

そして次に「key = _getch()」こちらで一文字だけ入力を受け取ります。

その次の「if(key == 0 || key == 224)」これは矢印など一部の特別なキーは入力をなぜか2回受け取るので、その余分な一回を受け流す処理になります。

もう少し詳しく知りたい方はさきほどの乱数も合わせて困った時の部品集を見てください。

ゲーム内容

あとはゲーム内容ですね。

画面の端まで80文字分アルファベットを表示させる

for(i=0;i<80;i++){
	printf("%c",(97 + ran));
}

その間にキー入力があれば途中で表示をやめる

for(i=0;i<80;i++){
	printf("%c",(97 + ran));
	timer();
	if(_kbhit()){
		key = _getch();
		if(key == 0 || key == 224)key = _getch();
		break;
	}
}

「timer()」は時間稼ぎ用に意味のない「for」ループを重ねているだけです。昔のプログラム手法なので多用はダメです。

判定

if(key == (ran + 97)){
	score++;
}
else{
	mistake++;
}

判定も難しく考えずにそのまま入力されたキーが乱数の値と同じかどうかを比べるだけです。「score」は得点、「mistake」はミスをカウントする変数です。

完成

そしてゲーム全体のカタチを整えれば完成です。

変数「count」でゲーム全体の回数、「timer()」の「for」ループで表示速度を変えられます。

乱数の範囲を変えればアルファベット以外のキーボード入力判定も加えられるのでいろいろと試してみてください。

ソースになります。

タイピングゲーム ソース

□ページの先頭へ□

□HOME□

広告

↓2014年06月20日発売↓

14歳からはじめるC言語わくわくゲームプログラミング教室 Visual Studio 2013編

新品価格
¥2,500から
(2016/5/10 22:17時点)

↓2014年10月25日発売↓

超本格! サンプルで覚えるC言語 3Dゲームプログラミング教室

新品価格
¥3,110から
(2016/5/10 22:18時点)

↓2013年07月25日発売↓

小学生からはじめるわくわくプログラミング

新品価格
¥2,052から
(2016/5/10 22:21時点)

↓2016年05月13日発売↓

小学生からはじめるわくわくプログラミング2

新品価格
¥2,052から
(2016/5/10 22:22時点)

もっと!C、C++言語本

□ページの先頭へ□

□HOME□