注意
- 这是我大一时独立完成的纯C语言课程设计,不包含C++。
- 代码简单且烂,但交作业够用。
- 单词应放置在文本文档内,命名为"1.txt"。
- 需要根据单词总数量更改随机数代码。
- 已注释掉全部测试用语句。
- 本文提供完整代码及注释。
如果有帮到你,希望你能再整点花活儿。这匹马象征着我的一个同学。
需求
用C语言编程实现一个打字游戏,能够完成如下功能:
- 打字操作:要求系统包含至少30条信息(中英文都可),游戏开始可以随机选择一条或多条信息,随后按照根据显示的信息进行打字操作;
- 判断操作:判断输入字符是否正确;
- 成绩显示:给出分数并显示。
实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
#include<time.h>
extern void before_game(int,int,float);
extern void start_game(char*,int,int,int,float);
extern void creat_word(int);
void before_game(int x,int u,float y)
{
int a;
int *p;
int i=0;
FILE *fp;
fp = fopen("1.txt","r");
char s[40][128];
p=s[0];
for(a=0;a<40;a++)
{
fscanf(fp,"%s",s[a]);
}
srand(time(NULL));
int j,k;
int rad[40] ;
for(k=0;k<40;k++)
{
rad[k]=rand()%40;
for(j=0;j<k;j++)
{
if(rad[j]==rad[k])
{
j=-1;rad[k]=rand()%40;
}
}
}
char ch,sc[1000];
int n;
for(j=0;j<39;j++)
{
n=0;
for(k=0;k<128;k++)
{
if(s[rad[j]][k]==NULL)
{
break;
}
else
{
ch=s[rad[j]][k];
sc[i++]=ch;
n++;
}
}
sc[i]='\0';
printf("%s\n",s[rad[j]]);
start_game(sc,n,x,u,y);
}
}
void start_game(char* ch,int n,int x,int u,float y)
{
time_t start_time = 0;
time_t end_time = 0;
while (1)
{
char str;
int count = 0;
int i;
for (i = 0; i < n; i++)
{
str = _getch();
if (str == ch[i])
{
count++;
printf("%c", str);
}
else
{
printf("*");
}
if (i == 0)
start_time = time(NULL);
if (i == n-1)
end_time = time(NULL);
}
u++;
x=x+(end_time - start_time);
y=((y+(count*1.0 / n * 100))/u);
printf("\n");
printf(" 时间:%ds 准确率:%.2f%%\n",end_time - start_time,count*1.0 / n * 100);
printf("总时间:%ds 平均准确率:%.2f%%\n",x,y);
printf("按Esc退出,按任意键继续\n");
str = _getch();
if (str == 27)
{
system("cls");
if(y<60)
{
printf(" \n");
printf(" @@\. @@@\ \n");
printf(" 果 .@@@@ @@@@` \n");
printf(" =@@^ =@@@` ,]]]. \n");
printf(" ]/@@\]/@@@@@@@@@@@@@@@@@@@ \n");
printf(" ,\@@@@@@@@@@@@@/[[[ =@@^ \n");
printf(" 断 =@@^ ,@@^.]]` \n");
printf(" ,@@^ @@@@@@@@@` \n");
printf(" ]]]@@@@@@@@[[` .@@. \n");
printf(" .@@@[[[` ,@@@` /@@@` \n");
printf(" 就 =@@\ ,@@@@ /@@@` \n");
printf(" =@@@\ /@@@` /@@` \n");
printf(" \@@/ =@@@^,@@/ \n");
printf(" [[ *@@@ ,]]]]/@@@@@@@@\` \n");
printf(" 会 .@@@@@@@@@@@@@@@@@@@@@@[[[[[[. \n");
printf(" ,[[[[. /@@@@@@@@@` \n");
printf(" ./@@@/*@@@ ,@@@` \n");
printf(" ,@@@@` *@@@ \@@@` \n");
printf(" 白 ,/@@@/ *@@@ .\@@@] \n");
printf(" ,/@@@/ *@@@ ,@@@@@]` \n");
printf(" ]@@@@` =@@@ =@@@@@@@@@@^ \n");
printf(" =@@/[ .@@@@ \n");
printf(" 给 ,@@^ \n");
printf(" ,@@^ \n");
}
else
{
}
getchar();
exit(NULL);
}
system("cls");
before_game(x,u,y);
break;
}
}
int main(int argc, char *argv[])
{
int x=0,u=0;
float y=0;
printf(" _(|_/) \n");
printf(" ,((((^`| ┃ ┃ ━━┳━ \n");
printf(" (((( (6 | ┃ ━╋ ┃ \n");
printf(" ,((((( , | ┃ ┃ ┃ \n");
printf(" ,,,_ ,/ |'._ ,`, ┃ ┃ ┃ \n");
printf(" ((((// ,... ,(((( | `-.-' ┃ ╱┃ ┃ \n");
printf(" ))) /' `'''' ||||| | ┃ ┃ ┃ \n");
printf(" ((( / ((( | ┃ ┖┛ ━┛ \n");
printf(" )) | | ┃ \n");
printf(" (( | . ' | ┃ \n");
printf(" )) | _ ' `t ,.') ┃ \n");
printf(" ( | y;- -,-'' '-.| || ┃ 、 \n");
printf(" ) / ./ ) / `| | ┃ ┎━━━━━┒ \n");
printf(" |./ | | / |' ┃ ━━┓ \n");
printf(" || || ||'| ┃ ╱ \n");
printf(" || || _||'|| ┃ ━━━╋━━━ \n");
printf(" || || |_| || ┃ ┃ \n");
printf(" |_| |_| || ┃ ┛ \n");
printf(" `'' |_| \n");
printf(" ''' \n");
printf("\n 马哥打字游戏:马字打\n");
printf("输入过程中无法退出 输入出错则按*表示 按回车键开始测试 按下首字母开始计时\n");
getchar();
system("cls");
before_game(x,u,y);
return 0;
}
效果
- 启动程序,屏幕中出现了一匹马,它象征着我同学。
 - 按任意键开始,将随机出现一个单词。
- 输入过程中无法退出,输入出错则用*表示。
 - 得出时间和准确率。按任意键继续,出现下一个单词。输入总时间和综合成绩是累计的。
 - 如果综合成绩很低,则会输出一个大大的菜字。

|