C语言简易贪吃蛇(附完整代码)

您所在的位置:网站首页 文本代码游戏 C语言简易贪吃蛇(附完整代码)

C语言简易贪吃蛇(附完整代码)

2023-11-17 13:02| 来源: 网络整理| 查看: 265

大家好,又见面了,我是你们的朋友全栈君。

贪吃蛇小游戏

刚学完C语言写的第一个小游戏,代码主要参考: https://blog.csdn.net/qq_37074040/article/details/54766680 我在模仿代码的过程中发现了原作者程序中的一些bug,以下f附有我加以改进后的代码。

1.游戏界面 这个小游戏游戏界面的核心在于光标的控制。只要我们能让光标到达我们想要的地方,我们就能完成游戏界面的绘制,蛋的生成。简直就像天上地下,无所不能。 实现:gotoxy()函数

2.游戏体验感 如何将用户的输入读入,而不显示在屏幕上? 实现:getch()函数(包含在中) 如何防止用户的非法输入?玩游戏的过程中难免会摁到其他的键,如何让它不影响到我们的游戏?如果蛇在往前行走,我们控制方向向后,该怎么处理? 实现:保存蛇的前进状态。

3.游戏关键 蛇该如何打印?如何实现蛇的行走? 如何完成吃蛋的过程? 游戏结束的条件是什么? 这几个问题都是实现游戏的关键步骤,但是实际操作起来并没有想象中的那么难,希望读者结合下文代码自行思考。

代码还可以大幅度优化,读者可以自行思考。

如果发现代码有bug,欢迎下方留言。

如果觉得楼主的代码对你有帮助的话,可以点个关注,点个赞,谢谢!

#include #include #include #include #include #define frame_height 30//地图尺寸 #define frame_width 50 #define UP 'w'//移动 #define DOWN 's' #define LEFT 'a' #define RIGHT 'd' int i,j,k,sp,score; char ch=UP,state=UP,choo,n;//初始化方向 int grow=0; struct Food//食物 { int x;//横坐标 int y;//纵坐标 } food; struct Snake//蛇 { /*用数组储存蛇的每一部分的坐标*/ int x[100]; int y[100]; int len;//长度 int speed;//速度 } snake; void map(void);//地图 void update_food(void);//更新食物 void move_snake(void);//蛇的移动 int alive(void);//判断蛇是否死亡 void get_speed(void);//更新速度 void gotoxy(int x,int y);//移动光标,进行游戏界面的打印 int main() { do { score=0;//初始化分数为0 /*让用户进行难度选择,有彩蛋*/ printf("Choose the degree of difficulty:\n1:easy\t2:middle 3:difficult\n"); n=getch(); switch(n) { case '1': { sp=300; break; } case '2': { sp=230; break; } case '3': { sp=180; break; } default: { printf("Congratulations!Welcome to Devil's difficulty\n"); sp=120; break; } } system("cls");//每次新一局游戏先清屏,包含在 map();//打印地图 /*开始游戏*/ while(1) { update_food();//生产食物 get_speed();//获取速度 move_snake();//移动 Sleep(snake.speed);//延时函数,speed数值越大延时越长 if(!(alive()))//判断蛇是否死亡 { break;//死亡则退出循环 } } printf("Game Over!\n"); printf("1:Restart\t2:exit"); choo=getch(); } while(choo=='1'); return 0; } void map() { srand(time(NULL)); /*打印第一个食物*/ /*Attention!此处留了一个bug:可能食物 的位置与初始的蛇重合,然后食物就会消 失,读者可以加以改进*/ food.x=rand()%(frame_height-2)+1; food.y=rand()%(frame_width-2)+1;//在框内 gotoxy(food.x,food.y);//把光标移动到该坐标 printf("$");//打印食物 /*snake的初始化*/ snake.x[0]=frame_height/2; snake.y[0]=frame_width/2; gotoxy(snake.x[0],snake.y[0]); printf("@"); snake.len=3; snake.speed=200; for(k=1; k


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3