c语言简单打字练习课程设计报告含完整源程序文档格式.docx
《c语言简单打字练习课程设计报告含完整源程序文档格式.docx》由会员分享,可在线阅读,更多相关《c语言简单打字练习课程设计报告含完整源程序文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
4、intnewWord()生成新字符函数
5、intmoving()字符下降函数
6、intwordHit()击中字符函数
7、intresult()结果输出函数
8、intstart()程序开始提示操作
9、voidleave()函数结束
五、流程图
N
Y
0
1
六、程序运行效果图
七、总结
通过这次的C语言课程设计,我对程序设计的过程有了很具体的认识,我明白了作为一个开发者应该具有坚持和吃苦耐劳的素质和乐于交流和共享的品德。
而且由于在程序设计和代码编写的时候,程序中用到的很多函数是我们在课堂上并没有接触到甚至是没有听说过的,因此我们还得大量地参考有关书籍,并且从互联网上查找函数等的相关信息。
与此同时,与同学的交流更是并不可少的,这个也是作为将来的一个开发者必须要具备的素质,那就是团队合作精神。
因为不论将来是走向企业还是做科学研发,系统和程序都是相当复杂和庞大的,我们不可能有能力能够一个人写了所有的代码,因此就得靠团队的协作。
所以,从这次的程序课程设计中,我充分得感受到了这一点,有时候和同学的交流绝对是提高工作效率的最好途径之一。
在后期,大体的代码写完了之后,我还经历了漫长的程序调试过程,因为是第一次真正地开始做一个小项目,所以在编写代码的过程中肯定存在着很多的错误。
调试是一项非常需要耐心和细致观察能力的工作,有时候我们可能会一两个小时都修改不了一个错误,这时候人是容易烦躁和选择放弃的,所以必须要有坚持不懈的精神,不然程序是不可能写的好的,我们最后也只能是半途而废。
当然,值得一提的是,我已经摒弃了最开始学习编程时会缺漏标点符号等等的小错误,这在一定程度上提高了调试的效率,节省了时间。
总的来说,通过这次的程序设计,我的收获良多!
对C语言的认识和掌握也进入新的一个阶段。
比如,switch语句的使用,我不但对switch语句的语法能够全面的掌握,而且能够很熟练的使用它。
另一点,我开始能够较为熟练的使用数组和掌握函数的编写和调用的关系。
本程序共用了九个函数,每一个函数的每一个语句都是经过不断的斟酌后才写出的,而且充分得利用的C语言的简洁高效表达的特点,让代码在最短的长度内发挥出最多的作用,提高了程序运行得速度。
我觉得C语言在这点上是非常的好用!
八、参考文献
李春葆C语言程序设计教程(第二版)清华大学出版社2011
李春葆C语言程序设计教程(第二版)学习指导清华大学出版社2012
刘汝佳算法竞赛入门经典清华大学出版社2012
九、程序清单
#include<
stdio.h>
time.h>
stdlib.h>
conio.h>
dos.h>
windows.h>
#definexLine70
#defineyLine20
#definefull100
#definetrue1
#definefalse0
/*---------------------------------------------------------------------*/
voidprintScreen(intlevel,int
right,intsum,charp[yLine][xLine])/*刷新屏幕的输出图像*/
{
inti,j;
system("
cls"
);
ColorE5"
printf("
等级:
%d按0退出;
1暂停得分:
%d/%d\n"
level,right,sum);
/*输出现在的等级,击中数和现在已下落总数*/
printf("
----------------------------------------------------------------------\n"
for(i=0;
i<
yLine;
i++)
{
for(j=0;
j<
xLine;
j++)
%c"
p[i][j]);
\n"
}/*for(i)*/
printf("
}/*printScreen*/
voidleave()/*离开程序时,调用该函数结束程序。
*/
ColorF3"
\n\n\n\n非常感谢您的使用."
Sleep(0);
exit(0);
}
/*----------------------------------------------------------------------*/
intlevelChoice(intlevel)/*进入游戏时选择游戏等级*/
while(true)/*void*/
system("
*\n***\n*****\n*******\n******************************\n************************\n******************\n**************\n**************\n****************\n******************\n********************\n************\n******\n**\n"
\n\n\n\n\n请输入数字1-9选择游戏等级,按0返回.\n\n"
level=getch();
level=level-48;
if(level>
0&
&
level<
10)
{printf("
选择等级:
%d"
level);
return(level);
}
elseif(level==0)
leave();
else
Pleaseinputacorrectnumber!
}/*while(true)*/
}/*levelChoice*/
intnewWord(intsum,charp[yLine][xLine])/*随生成一个新的字符并将其加入数组的首行*/
intj,w;
if(sum!
=full)
j=(rand()%(xLine-2))+1;
w=(rand()%26)+65;
p[0][j]=w;
return(++sum);
}/*if*/
return(sum);
}/*newWord*/
intmoving(intmiss,charp[yLine][xLine])/*将最后一行置空,并使所有在数组中其他行的字符下降一行*/
charw;
for(j=1,i=yLine-1;
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--)
w=p[i][j];
p[i+1][j]=w;
}/*for(j)*/
}/*for(i)*/
return(miss);
}/*moving*/
intwordHit(charp[yLine][xLine])
/*判断是否有字符从键盘键入。
如果有,则从最后一行的最后一个元素开始遍历该数组,找出该字符,并把对应位置置空,且返回1。
如果有输入,但屏幕上无对应项,或无输入则返回0*/
charkey;
if(kbhit())/*判断用户是否从键盘键入字符。
如果kbhit返回值为*/
key=getch();
if(key)
if(key=='
0'
)leave();
1'
按任意键继续打字游戏."
getch();
for(i=yLine;
i--)
for(j=xLine;
if(key-32==p[i-1][j-1])
p[i-1][j-1]='
return(true);
}/*for(j)*/
}/*if(key)*/
return(false);
}/*wordHit*/
intresult(intright)
/*判断该次的成绩并输出对应的结果,询问用户是否继续,若继续,判断是否可以进入下一级别。
*/
intscore;
charyn;
score=right*100/full;
Colorf5"
if(score==100)
\n\n\n\n\n\n\n\n\n太完美了!
你就是天才!
elseif(score>
=85)
\n\n\n\n\n\n\n\n\n很好!
继续努力哦!
=70)
\n\n\n\n\n\n\n\n\n亲,你现在的打字效果很一般!
\n\n\n\n\n\n\n\n\n你可能得加油咯!
\n\n还想继续吗?
亲。
\n\n继续按Y\n结束按N\n"
for(;
)/*void*/
yn=getch();
switch(yn)
case'
y'
:
if(score>
=70)return(true);
elsereturn(false);
}/*case*/
n'
default:
\n\n\n\n\n\n\n\n\n\n请输入一个正确的选项:
"
}/*switch*/
}/*for*/
}/*result*/
intstart()/*进入程序时调用该函数,提示其操作。
charc;
while(true)
Colora4"
\n\n\n欢迎来到鑫鑫打字通\n\n\n1.开始\n\n2.游戏须知\n\n0.退出"
c=getch();
switch(c)
leave();
/*用户选择退出,退出主程序*/
2'
\n\n\n\n\n打击你在屏幕上看到的字母.\n按0退出.\n按1暂停\n1.开始\n0.退出"
c=getch();
if(c=='
)return(true);
voidmain()
/*---------------------------------------------------------------------*/
/*函数声明*/
voidprintScreen(intlevel,intright,intsum,charp[yLine][xLine]);
voidleave();
intlevelChoice(intlevel);
intnewWord(intsum,charp[yLine][xLine]);
intmoving(intmiss,charp[yLine][xLine]);
intwordHit(charp[yLine][xLine]);
intresult(intright);
intstart();
charp[yLine][xLine];
inti,j,level,right,sum,n,m,miss;
srand(time(NULL));
start();
i++)/*初始化屏显数组*/
for(j=0;
if(j==0||j==xLine-1)
p[i][j]=20;
level=levelChoice(level);
)/*开始运行主程序*/
{sum=0;
right=0;
miss=0;
\n\n按任意键开始游戏!
m=getch();
printScreen(level,right,sum,p);
for(n=0,m=4;
n++)
Sleep
(2);
/*延迟*/
if(m%4==0)/*当m为4的整数倍,即上一个字母下落3行时生成一个新的字母在首行并刷新屏幕*/
sum=newWord(sum,p);
m=5;
}/*if(newWord)*/
if(wordHit(p)==true)/*如果用户输入了字符并且正确,则使答对的数加一,并刷新屏幕*/
right++;
}/*if(wordHit)*/
if(n==(37-4*level))/*当n=37-4*level时,屏幕上的字母下落一行,并刷新屏幕,若最后一行有字母,则使错过数加一*/
n=0;
m++;
miss=moving(miss,p);
}/*if(moving)*/
if(right+miss==full)break;
/*当正确数加错误数等于预置的总字母个数时跳出该循环*/
if(result(right)==true&
9)/*当用户成绩在70以上,并且等级小于9时,等级加一,即进入下一级别*/
level++;
}/*for(sum,right)*/