C语言之打字通完整版

2017/3/7 来源:www.arpun.com 作者:小白

教育学习 金山打字通2015下载开始下载

//包含头文件

#include <stdio.h>

#include <time.h>

#include <conio.h>

#include <Windows.h>

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

}

网友评论
评论(...
全部评论