c语言打字母游戏,C语言实现打字游戏

该程序在TC3.0环境下编译通过,共有9个函数。分别是printScreen,start,leave,levelChoice,newWord,moving,wordHit,result和main。

其功能分别是:

printScreen:刷新屏幕输出的图像。

Start:用户进入程序时选择开始,退出和求助。

Leave:用户离开程序事提示感谢使用

levelChoice:用户开始之前选择等级

newWord:生成一个新的字母并将其置于首行。

moving:将屏幕上的所有字母向下移动一行

wordHit:判断用户是否输入字母,如果输入,且屏幕上有该字母则将该字母所在位置置空。

result:判断该用户的得分,提示其是否进入下一等级。

main:总体控制以上各函数,判断其是否运行。

压缩包下载: 打字游戏

-------------------------------------------------------------以下是程序源码----------------------------------------------------

#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

{

for(j=0;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

{

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

{

for (j=0;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) */

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值