第14回 簡単な応用

第14回
簡単な応用
簡単なゲームを作ってみよう
タイピングゲーム (1/6)
【実行例】
$ ./no14_1
第1回目です.お手本どおりにタイプしてください.
glsuapspxt
glsuapspxt
正解です.スコアは92点です.
New record! Are you Watanabe? Enter your name.
Watabe
第2回目です.お手本どおりにタイプしてください.
rememberit
remenberit
間違いです.スコアは0点です.
タイピングゲーム (2/6)
#include
#include
#include
#include
<stdio.h>
<stdlib.h>
<string.h>
<time.h>
#define MAXTRY 3
/* ゲームのトライの最大回数 */
#define STRLEN 10
/* 出題する文字列の長さ */
#define SIZE 256
/* 配列のサイズ(十分長くする) */
#define SCORE_FILE "score.dat"
/* ベストスコアとその達成者名を記録してあるファイルの名前 */
FILE *fp;
/* ベストスコアを格納するファイルのポインター */
int high_score = 0;
/* ベストスコア */
char champion[SIZE] = "Watanabe"; /* ベストスコアの達成者名 */
タイピングゲーム (3/6)
int main(void)
{
int try;
char problem[SIZE];
char input[SIZE];
int score;
int j;
time_t start_time, end_time;
/*
/*
/*
/*
/*
/*
トライの回数 */
出題する文字列 */
入力した文字列 */
今回のスコア */
出題する文字列用の添字 */
測定した時間 */
fp = fopen(SCORE_FILE, "r");
if(fp != NULL){
/* ファイルが存在するとき */
fscanf(fp, "%d %s", &high_score, champion);
fclose(fp);
}
time_t はシステム時刻をあらわすデータ型
タイピングゲーム (4/6)
srand((unsigned) time(NULL));
/* 乱数の初期化 */
for(try=1; try<=MAXTRY; try++){
/* ゲーム開始 */
printf("第%d回目です.お手本どおりにタイプしてください.¥n", try);
for(j=0; j<STRLEN; j++){
problem[j] = rand()%26 + 'a'; /* ランダムに子文字を生成 */
}
problem[STRLEN] = '¥0';
/* 文字列末尾のヌル文字 */
printf("%s¥n", problem);
/* 出題 */
start_time = time(NULL);
scanf("%s", input);
end_time = time(NULL);
/* 時間計測 */
タイピングゲーム (5/6)
if(strcmp(problem, input)==0){
/* 文字列が等しいとき */
printf("正解です.");
score = 100 - (end_time - start_time); /* スコア計算 */
if(score < 0){
score = 0;
}
}
else{
/* 文字列が等しくないとき */
printf("間違いです.");
score = 0;
}
タイピングゲーム (6/6)
printf("スコアは%d点です.¥n", score);
if(score > high_score){
/* ベストスコアを超えたとき */
high_score = score;
printf("New record! Are you %s? Enter your name.¥n",
champion);
scanf("%s", champion);
}
} /* end of for loop */
fp = fopen(SCORE_FILE, "w");
fprintf(fp, "%d %s", high_score, champion);
fclose(fp);
return 0;
}
授業アンケート
受講生の代表2名が回収して,
工学部の教務課学部担当窓口(1番)へ提出.
(TAも付き添います)
期末試験について
【配布物参照】
7月28日(木)
筆記試験: 9:00~10:00 (A13教室)
実技試験:10:30~12:00 (M棟計算機室)