问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

打字练习软件 C语言程序

发布网友 发布时间:2022-05-26 16:47

我来回答

1个回答

热心网友 时间:2023-10-29 07:17

#include "stdio.h"
#include "time.h"
#include "stdlib.h"
#include "conio.h"
#include "dos.h"
#define xLine 70
#define yLine 20
#define full 100
#define true 1
#define false 0
/*---------------------------------------------------------------------*/
void printScreen(int level,int right,int sum,char p[yLine][xLine])/* 刷新屏幕的输出图像 */
{
int i,j;
clrscr();
printf("level:%d Press 0 to exit;1 to pause score:%d/%d\n",level,right,sum);/* 输出现在的等级,击中数和现在已下落总数 */
printf ("----------------------------------------------------------------------\n");
for (i=0;i<yLine;i++)
{
for(j=0;j<xLine;j++)
printf ("%c",p[i][j]);
printf("\n");
}/* for (i) */
printf ("----------------------------------------------------------------------\n");
}/* printScreen */
/*---------------------------------------------------------------------*/
void leave()/* 离开程序时,调用该函数结束程序。 */
{
clrscr();
printf ("\n\n\n\nThank you for playing.");
delay (2500);
exit (0);
}
/*----------------------------------------------------------------------*/
int levelChoice(int level)/* 进入游戏时选择游戏等级 */
{

while (true)/* void */
{

clrscr ();
printf("please input 1-9 to choice level.choice 0 to return.\n");
level=getch();
level=level-48;
if (level>0&&level<10) return (level);
else if (level==0)
leave ();
else
printf ("Please input a correct number!\n");
}/* while (true) */
}/* levelChoice */
/*---------------------------------------------------------------------*/
int newWord(int sum,char p[yLine][xLine])/* 随生成一个新的字符并将其加入数组的首行 */
{
int j,w;
if (sum!=full)
{
j=(rand()%(xLine-2))+1;
w=(rand()%26)+65;
p[0][j]=w;
return (++sum);
}/* if */
return (sum);
}/* newWord */
/*---------------------------------------------------------------------*/
int moving(int miss,char p[yLine][xLine])/* 将最后一行置空,并使所有在数组中其他行的字符下降一行 */
{
int i,j;
char w;
for (j=1,i=yLine-1;j<xLine-1;j++)/* 遍历最后一行的所有字符,如果该字符非空则将其置空并使miss加一 */
{
if (p[i][j]!=' ')
{
miss++;
p[i][j]=' ';
}
}
for (i=yLine-2;i>=0;i--)/* 从倒数第二行的最后一个字符开始开始向前遍历该数组内的元素,如果该位置非空则将该字符移动至下一行 */
{
for (j=xLine-2;j>0;j--)
{
if (p[i][j]!=' ')
{
w=p[i][j];
p[i][j]=' ';
p[i+1][j]=w;
}/* if */
}/* for(j) */
}/* for(i) */
return (miss);
}/* moving */
/*---------------------------------------------------------------------*/
int wordHit(char p[yLine][xLine])
/*判断是否有字符从键盘键入。
如果有,则从最后一行的最后一个元素开始遍历该数组,找出该字符,并把对应位置置空,且返回1。
如果有输入,但屏幕上无对应项,或无输入则返回0*/
{
int i,j;
char key;
if(kbhit())/* 判断用户是否从键盘键入字符。如果kbhit返回值为 */
key=getch();
if(key)
{
if (key=='0') leave();
if (key=='1')
{
clrscr();
printf ("Press any key to continue.");
getch();
}
for (i=yLine;i>0;i--)
{
for (j=xLine;j>0;j--)
{
if (key-32==p[i-1][j-1])
{
p[i-1][j-1]=' ';
return (true);
}/* if */
}/* for (j) */
}/* for (i) */
sound(300);
}/* if (key) */
return (false);
}/* wordHit */
/*---------------------------------------------------------------------*/
int result(int right)
/*判断该次的成绩并输出对应的结果,询问用户是否继续,若继续,判断是否可以进入下一级别。*/
{
int score;
char yn;
score=right*100/full;
nosound();
clrscr();
if (score==100)
printf("perfect!\n");
else if (score>=85)
printf("good!\n");
else if (score>=70)
printf("That's OK!\n");
else
printf("you need to play again.\n");
printf("do you want to continue? Y/N\n");
for (;;)/* void */
{
yn=getch();
switch (yn)
{
case 'y' :
{
if (score>=70) return(true);
else return(false);
}/* case */
case 'n' : leave ();
default : printf("Please input a correct choice:");
}/* switch */
}/* for */
}/* result */
/*---------------------------------------------------------------------*/
int start()/* 进入程序时调用该函数,提示其操作。 */
{
char c;
while (true)
{
clrscr ();
printf ("\n\n\n\n\n Welcome to type game!\n\n\n 1.start\n 2.How to play\n 0.Exit");
c=getch();
switch (c)
{
case '0' : leave();/* 用户选择退出,退出主程序 */
case '2' :
{
clrscr();
printf ("\n\n\n\n\n Hit the type when you see it on the screen.\n Press 0 to exit.\n Press 1 to pause\n 1.start\n 0.exit");
while (true)
{
c=getch ();
if (c=='0') leave();
if (c=='1') return (true);
}
}
case '1' : return (true);
}
}
}
/*----------------------------------------------------------------------*/

void main()
{
/*---------------------------------------------------------------------*/
/*函数声明*/
void printScreen(int level,int right,int sum,char p[yLine][xLine]);
void leave();
int levelChoice(int level);
int newWord(int sum,char p[yLine][xLine]);
int moving(int miss,char p[yLine][xLine]);
int wordHit(char p[yLine][xLine]);
int result(int right);
int start();
/*---------------------------------------------------------------------*/
char p[yLine][xLine];
int i,j,level,right,sum,n,m,miss;
srand(time(NULL));
start();
for (i=0;i<yLine;i++)/* 初始化屏显数组 */
{
for (j=0;j<xLine;j++)
if (j==0||j==xLine-1)
p[i][j]=140;
else
p[i][j]=' ';
}/* for (i) */
level=levelChoice(level);
for (;;)/* 开始运行主程序 */
{ sum=0;
right=0;
miss=0;
printf("Press any key to start!");
m=getch();
printScreen(level,right,sum,p);
for (n=0,m=4;;n++)
{
delay(20);/* 延迟 */
nosound();
if(m%4==0)/* 当m为4的整数倍,即上一个字母下落3行时生成一个新的字母在首行并刷新屏幕 */
{
sum=newWord(sum,p);
m=5;
printScreen(level,right,sum,p);
}/*if(newWord)*/
if (wordHit(p)==true)/* 如果用户输入了字符并且正确,则使答对的数加一,并刷新屏幕 */
{
right++;
sound (1500);
printScreen(level,right,sum,p);
}/* if(wordHit) */
if(n==(37-4*level))/* 当n=37-4*level时,屏幕上的字母下落一行,并刷新屏幕,若最后一行有字母,则使错过数加一 */
{
n=0;
m++;
miss=moving(miss,p);
printScreen(level,right,sum,p);
}/* if (moving)*/
if(right+miss==full) break;/* 当正确数加错误数等于预置的总字母个数时跳出该循环 */
}
if (result (right)==true&&level<9)/* 当用户成绩在70以上,并且等级小于9时,等级加一,即进入下一级别 */
level++;
}/* for(sum,right) */
}

//在tc3.0下编译通过
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 一个打字练习的小程序(C语言) 人生得一知己足矣,斯世当以同怀视之 !什么意思? 人生在世得一知己真的那么难吗?? 人生得一知己足以是什么意思? 人生在世得多少知己足矣…… 人生在世,幸得一知己……出自于哪首歌? 最新版人教版二年级数学上册第八页的答案 高中同学结婚礼金一般送多少 马齿苋粉咋吃?是饭前吃?还是饭后吃?每天吃几次?每次吃多少? 有同学结婚了,送多少礼金 为什么变频空调到了设定温度室外机就停止了? 兴业证券2015年20天收市平均股价是多少 我用的是兴业证券 我买入3.30 100股 成本价怎么会是3.413呢? 兴业证券估价怎么这么低?而其他证券类的股票都是二三十块钱。 兴业证券什么时候发行股票及价格 股票的某日最低价,为什么在详细成交中看不到 得意天然气热水器报警是何因正常燃烧出热水,就是报警求答案 众艾感统有情绪控制的课程吗? 众艾感统的感统训练对体质有要求吗? 众艾感统的触觉训练有用吗? 辅助角公式例题 用c语言编写打字练习 怎么在wps里面把小写全部替换为大写字母 用c语言编个英文打字练习程序要用到哪些知识? C语言课程设计,打字训练游戏,只训练英文单词,随机读取文章到屏幕上,单击回车结束。 造梦西游ol紫金葫芦怎么收白骨精 用C语言编写一个简单的打字母游戏,给出基本思路及完整程序。 求求大佬救救孩子,高一辅助角公式的题目,拜托了 c语言制作一个简单的打字游戏(落下一个字母按相应字母消去,记录分数) 造梦西游ol白骨精技能介绍 三角函数辅助角公式问题!! 怎么用c语言写一个 程序。实现从键盘输入字符并写入一个文件。 C语言编写指法练习程序 造梦西游ol琉璃咋打败白骨精 造梦西游ol打死一次白骨精能得多少灵魂 造梦西游OL白骨精怎么打 唐僧打白骨精详解 造梦西游ol白骨精套装有什么用 造梦西游ol白骨精魂魄有什么用 研究生第一节课上课用“英文”自我介绍及爱好怎么说啊 要说两分钟的 介绍自己 我的爱好是画画 急用 谢谢 造梦西游ol悟空过白骨精条件是什么