打字游戏
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>//kbhit()函数需要包含的头文件
using namespace std;
void sleep(unsigned int mseconds)
{
clock_t goal = mseconds + clock(); //clock()功 能: 返回处理器调用某个进程或函数所花费的时间。
while (goal > clock());//停留15ms (150/1000s=15ms)
}
void setpos(int x,int y)
{
COORD coord;
coord.X=x;
coord.Y=y;
//SetConsoleCursorPosition是API中定位光标位置的函数。即将光标移动到(x,y)的位置
SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ), coord );
}
int main()
{
int h=20;
int w=40;
int s=150;
int x,y;
int c=0,cok=0;//cok正确的次数,c已经出现字母次数
char ch, k;
srand(time(0));//初始化随机数
while(1)
{
ch=rand()%26+'A'; //随机取A-Z
x=rand()%w; //随机取字母出现的x轴位置
y=0; //字母出现位置y轴为0
c++;
while(y<h) //控制y值不能超过h的值超过了将算是本次没有输入正确字母
{
if(_kbhit()) // _kbhit()函数检查当前是否有键盘输入,若有则返回一个非0值,否则返回0
{
k=getch(); //获取输入字符
if(k==ch||k==ch+32) //输入值是否为正确的输入(包括大小写)
{
cok++;
break; //如果输入正确退出到下一个字母
}
}
setpos(x,y); //设置光标的位置
cout<<ch; //在光标处显示字母(通过光标位置的移动实现字母的向下移动)
sleep(s); //字母显示停留15ms
setpos(x,y);
cout<<' '; //将原来出现字母的位置清空
y++;
}
setpos(0,h+1); //设置下一个字母出现的位置
cout<<cok<<"/"<<c<<" "<<cok*1.0/c*100<<"%"<<" "; //将已经出现字符的次数和输入正确的次数以及正确率打印出来
}
return 0;
}