c语言编程打字通,C语言之打字通完整版

0?wx_fmt=jpeg

//包含头文件

#include

#include

#include

#include

#pragma warning(disable:4996)

//全局变量

char g_ch;//屏幕上出现的字符

int g_row, g_col;//行和列的坐标

int correct, error;//输入正确的和错误的字符的数量

int redraw = 0;//是否要重写信息,计算正确率

int running = 1;//运行状态

int pause = 0;//是否暂停状态,1是 2否

HANDLE hout;

//产生一个新的字符,并设置其出现的位置

void GetRandomChar()

{

g_ch = rand() % 26 + 'a';//能够得到从a到z之间的一个随机字符

g_row = 0;//出现在最上面的一行

g_col = rand() % 80;//横坐标的位置随机

}

//线程处理函数

DWORD CALLBACK Proc(LPVOID lpParam)

{

int r, c;

COORD pos = { 0, 0 };//坐标,初始为0,0,表示左上角位置

while (running)

{

if (pause)

continue;

SetConsoleCursorPosition(hout, pos);//把控制台光标位置定位到左上角00的位置

for (r = 0; r < 12; ++r)//共12行

{

for (c = 0; c < 80; ++c)//共80列

{

if (r == 10)//第11行

{

printf("-");

}

else if (r == 11)//第12行

{

if (redraw)

{

printf("  正确:%d  错误:%d  正确率:%6.2lf%%", correct, error,

(double)correct / (correct + error) * 100);

redraw = 0;

}

}

else if (r == g_row && c == g_col)

{

printf("%c", g_ch);

}

else

{

printf(" ");

}

}

}

if (g_row++ == 10)

{

++error;//错误的数量加1

GetRandomChar();// 重新产生字符

redraw = 1;//需要重新计算正确率

}

Sleep(300);

}

return 0;

}

int main()

{

int ch;//保存用户输入的按键

HANDLE hThread;//线程的句柄

system("color E0");

hout = GetStdHandle(STD_OUTPUT_HANDLE);

GetRandomChar();

//创建一个线程

hThread = CreateThread(NULL, 0, Proc, NULL, 0, NULL);

while (running)

{

if (ch = getch())

{

if (ch == 27)//按下了键盘上的ESC键

{

running = 0;

}

else if (ch == 13)//按下了键盘上的回车键

{

pause = !pause;

}

else if (ch == g_ch)

{

if (pause == 0)

{

//输入了正确的字符

++correct;//正确的数量加1

GetRandomChar();

redraw = 1;//需要重新计算正确率

}

}

else

{

if (pause == 0)

{

//输入了不正确的字符

++error; //错误数量加1

redraw = 1;//需要重新计算正确率

}

}

}

}

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值