运行界面如图: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210709182248438.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MzM5MTk1Nw==,size_16,color_FFFFFF,t_70) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210709182826826.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MzM5MTk1Nw==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021070918232156.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MzM5MTk1Nw==,size_16,color_FFFFFF,t_70)
代码如下:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
#include<graphics.h>
#include<mmsystem.h>
#pragma comment(lib,"winmm.lib")
const int WIDTH = 640;
const int HEIGHT = 500;
int right = 0;
int error = 0;
IMAGE picture;
struct TARGET
{
int x;
int y;
char* str;
}words[3];
struct USRKEY
{
int x;
int y;
char str[20];
}userkey = {320,500-30,""};
void outtextxy_int(int x, int y,const char* format, int num)
{
char str[20] = "";
sprintf(str, format, num);
outtextxy(x, y, str);
}
void outtextxy_double(int x, int y, const char* format, double num)
{
char str[20] = "";
sprintf(str, format, num);
outtextxy(x, y, str);
}
void divWindow()
{
line(WIDTH - 100, 0, WIDTH - 100, HEIGHT - 40);
line(0, HEIGHT - 40, WIDTH + 50, HEIGHT - 40);
line(WIDTH - 100, 130, WIDTH + 50, 130);
}
void initTarget(struct TARGET *words, int n)
{
static char str[32][10] =
{
"auto", "break", "case", "char", "const", "continue","default",
"do", "double", "else", "enum", "extern","float", "for", "goto",
"if", "int", "long","register", "return", "short", "signed", "sizeof",
"static","struct", "switch","typedef","union", "unsigned", "void",
"volatile", "while"
};
words[n].str = str[rand() % 32];
while (words[n].str == words[(n + 1) % 3].str || words[n].str == words[(n + 2) % 3].str)
{
words[n].str = str[rand() % 32];
}
words[n].x = rand() % (WIDTH - 200);
words[n].y = -20;
}
void drawMenu()
{
settextcolor(LIGHTBLUE);
settextstyle(20, 0, "隶书");
outtextxy(WIDTH - 90, 25, "关键字练习");
outtextxy(WIDTH - 90, 50, "程序员专属");
outtextxy(WIDTH - 90, 75, "练习游戏");
outtextxy(WIDTH - 90, 225, "正确数");
outtextxy_int(WIDTH - 90, 250, "%d",right);
outtextxy(WIDTH - 90, 285, "错误数");
outtextxy_int(WIDTH - 90, 310, "%d", error);
outtextxy(WIDTH - 90, 345, "正确率");
if (right + error == 0)
{
outtextxy_double(WIDTH - 90, 370, "%.2lf%%", 0.00);
}
else
{
double sum = right + error;
outtextxy_double(WIDTH - 90, 370, "%.2lf%%", right/sum*100);
}
}
void strDispose()
{
for (int n = 0; n < 3; n++)
{
words[n].y += 5;
if (words[n].y > (HEIGHT - 40 - textheight(words[n].str)))
{
initTarget(words, n);
}
}
for (int n = 0; n < 3; n++)
{
settextcolor(RGB(75, 213, 213));
outtextxy(words[n].x, words[n].y, words[n].str);
}
}
void loadResourse()
{
srand(time(NULL));
initgraph(WIDTH + 50, HEIGHT);
loadimage(&picture, "1.jpg", 690, 500);
setbkmode(TRANSPARENT);
mciSendString("open 1.mp3", 0, 0, 0);
mciSendString("play 1.mp3 repeat",0,0,0);
for (int n = 0; n < 3; n++)
{
initTarget(words, n);
words[n].y = -15 - n * 30;
}
}
int main()
{
int i = 0;
loadResourse();
BeginBatchDraw();
while (1)
{
cleardevice();
putimage(0, 0, &picture);
divWindow();
drawMenu();
strDispose();
if (_kbhit())
{
char target;
if ((target = _getch()) != '\r')
{
userkey.str[i++] = target;
}
else
{
int flagError = 0;
for (i = 0; i < 3; i++)
{
if (strcmp(userkey.str, words[i].str) == 0)
{
initTarget(words, i);
right++;
flagError = 1;
}
}
if (flagError == 0)
{
error++;
}
i = 0;
userkey.x = 320;
memset(userkey.str, 0, 20);
}
}
outtextxy(userkey.x, userkey.y, userkey.str);
FlushBatchDraw();
Sleep(50);
}
getchar();
closegraph();
return 0;
}
源代码资源链接:https://pan.baidu.com/s/1VaR1rzgxbq56mIjOHC9DeQ 提取码:z4wc
|