打字游戏
-
主页菜单
void help()
{
printf("\n*************************\n");
printf("\n*游戏即将开始 请做好准备*\n");
printf("\n*空格继续 任意键结束*\n");
printf("\n* 打字错误用!表示 *\n");
printf("\n*************************\n");
}
-
生成随机字母
使用rand()产生随机数
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int i;
i = rand();
cout << i;
}
但是发现产生出的i直至都是41,其实rand()产生的是伪随机数字,所以每次执行时的结果是相同的。
srand()初始化:rand()产生的是伪随机数字,每次执行时是相同的;若要不同,用函数srand()初始化它。
通过srand()函数来初始化随机种子,这个种子会对应一个随机数,如果直接使用rand(),会默认为种子为1,既srand(1)。
要想生成真随机数,则通常使用srand(time(NULL)),其中time()函数来返回从1970年1月1日0时0分0秒到现在的时间,以此来生成不同的种子,从此产生随机数。
#include<iostream>
#include<algorithm>
#include<time.h>
#include<stdlib.h>
using namespace std;
int main()
{
int i;
srand(time(NULL));
i = rand();
cout << i;
}
执行后发现每次生成的值不再重复了
那么如何产生随机字母呢?
产生0到25的数加上‘a’,就可以表示字母了。rand()%26既可以产生0到25的随机数。
srand(time(NULL)); //产生随机种子
for (i = 0;i < 50;i++)
{
str[i] = rand() % 26 + 'a'; //随机产生字母
}
str[50] = '\0';
for (i = 0;i < 50;i++)
{
printf("%c ", str[i]); //将产生的随机字母输出来
}
printf("\n");
-
开始打字匹配
从键盘得到输入,使用_getch()函数,阻塞函数,需要#include<conio.h>作为头文件,直到有输入时才返回。
用count记录打字成功的数量
count = 0;
for (i = 0;i < 50;i++)
{
if (i == 0)
{
start_time = time(NULL);
}
ch = _getch();
if (ch == str[i])
{
printf("%c ", str[i])
count++;
}
else
rintf("! ");
}
end_time = time(NULL);
-
求得所用时间
所用时间=结束时间-开始时间
再一次使用time()函数,time()函数返回值的数据类型为time_t。
start_time = time(NULL)表示从开始时间到1970年1月1日0时0分0秒的秒数,end_time = time(NULL) 表示从结束时间到1970年1月1日0时0分0秒的秒数。
两者时间相减得所用时间
-
控制空格继续,任意键结束
while (821)
{
ch = _getch();
if (ch == ' ')
break;
else
return 0;
}
-
附源码
#include<stdio.h>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
#include<corecrt.h>
void help()
{
printf("\n*************************\n");
printf("\n*游戏即将开始 请做好准备*\n");
printf("\n*空格继续 任意键结束*\n");
printf("\n* 打字错误用!表示 *\n");
printf("\n*************************\n");
}
int main()
{
char ch;
char str[51];
int i, count;
time_t start_time, end_time;
while (821) //不为0即可
{
system("cls");
help();
ch = _getch();
srand(time(NULL));
for (i = 0;i < 50;i++)
{
str[i] = rand() % 26 + 'a';
}
str[50] = '\0';
for (i = 0;i < 50;i++)
{
printf("%c ", str[i]);
}
printf("\n");
count = 0;
for (i = 0;i < 50;i++)
{
if (i == 0)
{
start_time = time(NULL);
}
ch = _getch();
if (ch == str[i])
{
printf("%c ", str[i]);
count++;
}
else
printf("! ");
}
//printf("\n");
end_time = time(NULL);
printf("\n你的准确率为%d%%", count * 100 / 50);
printf("\n你所用的时间为%ds", end_time - start_time);
if(count<25)
{
printf("\n别灰心,再接再厉,坚持就是胜利!!!!!!!\n");
}
else if (count < 40)
{
printf("\n已经很好了,以后会更好!!!!!!!\n");
}
else if (count <50)
{
printf("\n再坚持,差一点就成功了!!!!!!!!\n");
}
else if (count == 50)
{
printf("\n非常棒,你已经成功啦!!!!!!!!!!\n");
}
while (821)
{
ch = _getch();
if (ch == ' ')
break;
else
return 0;
}
}
return 0;
}