画像(logo)

HOME/[C言語]サンプルプログラム集 目次/タイピングゲーム

広告

[C言語 サンプルプログラム集]
タイピングゲーム

広告

↓2016年02月29日発売↓

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

目次へ戻る

タイピングゲーム

今回は入門プログラムの定番、タイピングゲームを作ります。

画像(cs_8_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 rnd = 0;
int count = 0;
int score = 0;
int mistake = 0;

大事な役割を持つ変数が

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

こちらの2つの変数になります。あとはゲーム全体のループ用や得点用などになります。

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

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

srand((unsigned)time(NULL));
rnd = (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;
}

■実行結果■

画像(cs_8_2)

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

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

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

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

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

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

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

キー入力

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

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 + rnd));
}

そしてその間にキー入力があれば途中で表示をやめます。

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

「timer()」は時間稼ぎ用に意味のない「for」ループを重ねているだけです。入門用のお遊びプログラムなのでこのような手法をとっておりますが、きちんと作る時は他の方法でゲーム内の時間をカウントするか、「sleep()」みたいな名前でスレッドを止める命令があるのでそちらをご使用ください。

あとは入力されたキーが合っているかどうかの判定をします。

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

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

完成

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

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

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

ソースになります。

タイピングゲームソース

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓2017年06月16日発売↓

やさしいC 第5版 (「やさしい」シリーズ)

新品価格
¥2,700から
(2017/5/1 13:05時点)

↓2014年08月09日発売↓

新・明解C言語 入門編 (明解シリーズ)

新品価格
¥2,484から
(2017/5/1 13:08時点)

↓2016年02月20日発売↓

新・解きながら学ぶC言語

新品価格
¥2,160から
(2017/5/1 13:10時点)

↓2017年02月11日発売↓

C言語プログラミング基本例題88 88

新品価格
¥3,024から
(2017/5/1 13:12時点)

↓2016年12月15日発売↓

Cの絵本 第2版 C言語が好きになる新しい9つの扉

新品価格
¥1,490から
(2017/5/1 13:13時点)

↓2017年02月08日発売↓

新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ)

新品価格
¥2,700から
(2017/5/1 13:15時点)