打字游戏框架步骤:
while(条件)
{
显示游戏规则
生成随机的字符串 -------->for循环
{
生成一个随机数,将随机数变成字母,存入字符数组中(参考ASCII表)
}
按下任意键开始游戏
打印生成字符数组(也就是字符串)
循环(指定或已知的次数)
{
获取键盘输入
由于需要记录过程时间,当你按下按键与字符串比较就(记录开始计时)---->if语句判断
如果输入字符与字符串中的字符相对应,(原样输出),并且定义变量记录正确个数
否则错误就用__(下划线)表示输出
}
记录结束计时
打印用时 = (结束计时) - (开始计时);
打印正确率 = 正确个数/(字符串总数)*100%
获取键盘输入,如果是(空格就继续) || (ESC退出程序)
}
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> void tygames(void);//函数提前声明 void frame(void); int main(int argc, char *argv[]) { //游戏规则框架 frame(); //游戏功能实现 tygames(); return 0; } void frame(void) { printf("*********************************************\n"); printf("* 输入过程中无法退出! *\n"); printf("* 请按所给字母敲击键盘! *\n"); printf("* 按下任意键开始测试,按下首个字母开始倒计时!*\n"); printf("* 输入错误,以 _ 表示! *\n"); printf("*********************************************\n"); return; } void tygames(void) { while(1) { char buf[26]=""; char ch ='\0'; //系统时间随机种子 srand(time(NULL)); int i = 0; for(i=0;i<25;i++) { buf[i] = rand()%26 + 'a';//随机a ~z字母并存入buf字符串数组中 } getch();//按任意键,显示字符串 printf("%s\n",buf); float count = 0;//记录输入字母对于正确个数 int start_time = 0,end_time = 0;//定义开始和结束变量 for(i=0;i<25;i++) { ch = getch();//无需回车输出(需要包含头文件#include <conio.h>) if(i == 0) { start_time = time(NULL);//记录开始时间 } if(ch == buf[i])//输入字符与字符串中字母对应 { printf("%c",ch);//则原样输出 count++; } else { printf("_");//否则下划线代替 } } end_time = time(NULL);//记录结束时间 printf("\n完成输入!\n"); printf("用时 %.2f s\n",(float)(end_time-start_time));//打印用时 int right = (count/25.0)*100.0;//计算正确率 printf("正确率:%d%%\n",right); int t = 1; while(t) { printf("按下ESC退出,空格继续\n"); char con = getch(); if(con == 32) { system("cls");//清屏 frame(); printf("\n游戏继续,请按任意键开始\n"); t = 0; } else if(con == 27) { return; } } } return; }
运行结果: