一个及其简单的打字游戏
大一期末要交个C语言游戏+答辩,先来个小游戏练练手
一个简易的打字游戏,难得注释写的很全,就放上来了
有错欢迎指出,游戏有爱自取
C
#include
#include
#include
#include
#include
#include
#define MAXN 5//数组的大小
#define WIDTH 40//在[0,WIDTH]范围内生成字母
#define HIGH 20//垂直下降的高度
int grade,tier=1,hp=3;//分数,等级和生命值
int gameover=0;
struct ALPHA{int x;int y;char ch;int alive=0; //用来记录该元素是否存在,和judge()函数一起理解}alpha[MAXN];
void HideCursor(void)//隐藏光标
{CONSOLE_CURSOR_INFO Cursor_info={1,0};SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&Cursor_info);
}
void gotoxy(int x,int y)
{HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);COORD pos={x,y};SetConsoleCursorPosition(handle,pos);
}
void init(void)//隐藏指针和初始化随机数
{HideCursor();srand((unsigned)time(0));
}
void judge(void)//判断是否需要产生新的字母
{if(hp==0)//生命为0,游戏结束{gotoxy(0,HIGH+4);printf("gameover\n");system("pause");exit(0);}int i,count; //count用来记录已经拥有的字母,游戏采取count==tierfor(i=0,count=0;i<MAXN;i++)if(alpha[i].alive)count++;while(count<tier)//保证同时在屏幕上出现的字母数等于难度{for(i=0;i<MAXN;i++){if(!alpha[i].alive){alpha[i].x=rand()%WIDTH;alpha[i].y=-1;alpha[i].ch=rand()%26+'A';alpha[i].alive=1;count++;break;}}}if(tier==1&&grade==5)//根据分数增加难度tier++;else if(tier==2&&grade==10)tier++;else if(tier==3&&grade==15)tier++;else if(tier==4&&grade==20)tier++;for(i=0;i<MAXN;i++)//如果字母落到底,清除这个字母,生命值减一if(alpha[i].alive)if(alpha[i].y==HIGH){hp--;alpha[i].alive=0;}
}
void show(void)//实现从上往下落字母的效果
{int i;switch(tier)//根据难度指定字母下落的速度{case 1:Sleep(500);break;case 2:Sleep(400);break;case 3:Sleep(300);break;case 4:Sleep(200);break;case 5:Sleep(100);break;}for(i=0;i<MAXN;i++)//打印字母{if(alpha[i].alive){if(alpha[i].y!=-1)//要保证gotoxy()的y为有效值{gotoxy(alpha[i].x,alpha[i].y);putchar(' ');}alpha[i].y++;gotoxy(alpha[i].x,alpha[i].y);putchar(alpha[i].ch);}}gotoxy(0,HIGH);for(int i=0;i<WIDTH;i++)//打印边界以及统计信息putchar('-');printf("\n等级:%d\n",tier);printf("分数:%d\n",grade);printf("生命值%d\n",hp);
}
void get_input(void)//读取玩家输入
{int i;char input;if(_kbhit()){input=_getch();input=_toupper(input);for(i=0;i<MAXN;i++)if(alpha[i].alive)if(alpha[i].ch==input){gotoxy(alpha[i].x,alpha[i].y);putchar(' ');alpha[i].alive=0;grade++;}}
}
void start(void)
{init();while(1){judge();show();get_input();}
}
int main(void)
{start();return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
