打字游戏--随机 练习打字的小游戏

打字游戏

  1. 主页菜单

void help()

{

printf("\n*************************\n");

printf("\n*游戏即将开始 请做好准备*\n");

printf("\n*空格继续   任意键结束*\n");

printf("\n*   打字错误用!表示    *\n");

printf("\n*************************\n");

}
  1. 生成随机字母

使用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");
  1. 开始打字匹配

从键盘得到输入,使用_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);
  1. 求得所用时间

所用时间=结束时间-开始时间

再一次使用time()函数,time()函数返回值的数据类型为time­_t。

start_time = time(NULL)表示从开始时间到1970年1月1日0时0分0秒的秒数,end_time = time(NULL) 表示从结束时间到1970年1月1日0时0分0秒的秒数。

两者时间相减得所用时间

  1. 控制空格继续,任意键结束

while (821)
{
 ch = _getch();
 if (ch == ' ')
 break;
 else
 return 0;
}
  1. 附源码

#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;
}

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听不懂思密达

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值