保定cms建站系统,wordpress主题网店,网站建设中最重要的环节是,宁德城乡建设部网站首页用C语言链表写的贪吃蛇(程序设计时做的#xff0c;做的不好大佬勿喷)借助游戏内容分析贪吃蛇所需的功能主要包括这几块#xff1a;移动光标模块打印地图模块和基本规则信息读取最高分文件打印初始蛇模块打印时给予蛇的初始移动方向产生食物模块1)、保证食物在地图内产生2)、保…用C语言链表写的贪吃蛇(程序设计时做的做的不好大佬勿喷)借助游戏内容分析贪吃蛇所需的功能主要包括这几块移动光标模块打印地图模块和基本规则信息读取最高分文件打印初始蛇模块打印时给予蛇的初始移动方向产生食物模块1)、保证食物在地图内产生2)、保证食物不能出现在蛇体蛇的生命状态判断模块1)、撞墙导致死亡2)、头撞身体部位死亡6.运行模块1)、让蛇移动2)、根据按键来改变蛇的移动方向3)、对待分数的增加游戏难度的增加4)、蛇在吃食物后分数的增加7.结束模块在遇到撞墙或者撞自己部位死亡时结束程序并进行分数与历史最高分作比较最终达到最高分的更新以下为代码#include #include #include //控制台输入和输出#include //窗口函数#include #define W 1//蛇的运动方向W上 S下 A: 左 D右#define S 2#define A 3#define D 4/*定义全局变量*/typedef struct{int x;int y;}place;//定义坐标结构体typedef struct ZB{place data;struct ZB *next;}snake;//定义蛇的链表/*定义全局链表*/snake *head,*p,*q,*h;//place food;//定义食物坐标int score0,bestscore,game_flag0,ch,sleep400;//定义得分score死亡判断game_flag方向判断ch蛇的速度sleep/*函数声明*/void gotoxy(int x,int y);//定位光标void map_creat();//运用定位函数打印地图void ini_snack();//随机产生蛇void cre_food();//随机产生食物void live_jud_1();//判断自己是否撞墙死亡void live_jud_2();//判断自己是否撞到自己void move();//蛇的移动void rungame();//游戏运行void gameover();//游戏结束界面void changch();//改变方向int color(int c);//改颜色函数/*构建定位函数*/int color(int c){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c); //更改文字颜色return 0;}void gotoxy(int x,int y)//定位光标{COORD pos;HANDLE handleGetStdHandle(STD_OUTPUT_HANDLE);pos.Xx;pos.Yy;SetConsoleCursorPosition(handle,pos);}/*打印地图*/void map_creat()//运用定位函数打印地图{FILE *fp;//创建一个记录最高分的文件fpfopen(score.1,r);fscanf(fp,%d,bestscore);//读取最高分fclose(fp);gotoxy(54,26);printf(Your Best Score : %d\t, bestscore);//打印出最高分int i,j;for(i0;i48;i){gotoxy(i,0);printf(#);color(6);gotoxy(i,26);printf(#);color(6);}for(j0;j26;j){gotoxy(0,j);printf(#);color(6);gotoxy(48,j);printf(#);color(6);}gotoxy(54,10);printf(游戏规则);gotoxy(54,12);printf(向上移动↑\n);gotoxy(54,14);printf(向下移动↓\n);gotoxy(54,16);printf(向左移动←\n);gotoxy(54,18);printf(向右移动→\n);gotoxy(54,20);printf(吃一个食物分数加10);gotoxy(54,22);printf(按空格键暂停游戏);gotoxy(54,24);printf(按ESC直接结束游戏);}/*构建初始蛇*/void ini_snack()//产生蛇{int i;/*采用尾插法构建蛇的链表初始长度设为二*/head(snake *)malloc(sizeof(snake));head-data.x48/2;head-data.y26/2;head-nextNULL;hhead;for(i1;i2;i){p(snake *)malloc(sizeof(snake));p-data.x48/2i;p-data.y26/2;h-nextp;hp;}p-nextNULL;/*将蛇打印出来*/hhead;while(h!NULL){gotoxy(h-data.x,h-data.y);color(5);printf();hh-next;}chW;//蛇的初始方向}/*随机产生食物*/void cre_food()//随机产生食物{srand((unsigned)time(NULL));//为了防止每次产生的随机数相同种子设置为time/*随机产生食物*/food.xrand()%(48-2)1;food.yrand()%(26-2)1;while(p!NULL){/*判断食物是否与蛇重合如果重合重新产生*/if(p-data.xfood.xp-data.yfood.y)cre_food();pp-next;}gotoxy(food.x,food.y);color(1);printf($);//打印食物}/*判断是否死亡*/void live_jud_1()//判断自己是否撞墙死亡{if(head-data.x0||head-data.x48||head-data.y0||head-data.y26)//撞墙{game_flag1;gameover();}}void live_jud_2()//判断自己是否撞到自己{qhead-next;while(q!NULL){if(head-data.xq-data.xhead-data.yq-data.y)//撞自己{{game_flag2;gameover();}break;}qq-next;}}/*游戏进行界面*/void move(){snake *l;live_jud_1();l(snake *)malloc(sizeof(snake));/*构建一个新的节点通过新节点来表示下一次头节点所在的位置将新节点当作移动后的头节点如果新头节点的坐标等于食物的坐标得分加10食物的标志变为1因为蛇的链表长度加了一如果是移动的话找出尾节点并打印出 然后删掉该尾节点如果吃到了食物就直接将蛇打印出来*/if(chW){l-data.xhead-data.x;l-data.yhead-data.y-1;if(l-data.xfood.xl-data.yfood.y){l-nexthead;headl;qhead;while(q!NULL)//将蛇重新打印一边{gotoxy(q-data.x,q-data.y);color(5);printf();qq-next;}score10;cre_food();//构建新的食物}else{l-nexthead;headl;qhead;while(q-next-next!NULL){gotoxy(q-data.x,q-data.y);color(5);printf();qq-next;}gotoxy(q-next-data.x,q-next-data.y);printf( );//将蛇尾去掉free(q-next);q-nextNULL;}}if(chA){l-data.xhead-data.x-1;l-data.yhead-data.y;if(l-data.xfood.xl-data.yfood.y){l-nexthead;headl;qhead;while(q!NULL){gotoxy(q-data.x,q-data.y);color(5);printf();qq-next;}score10;cre_food();}else{l-nexthead;headl;qhead;while(q-next-next!NULL){gotoxy(q-data.x,q-data.y);color(5);printf();qq-next;}gotoxy(q-next-data.x,q-next-data.y);printf( );free(q-next);q-nextNULL;}}if(chS){l-data.xhead-data.x;l-data.yhead-data.y1;if(l-data.xfood.xl-data.yfood.y){l-nexthead;headl;qhead;while(q!NULL){gotoxy(q-data.x,q-data.y);color(5);printf();qq-next;}score10;cre_food();}else{l-nexthead;headl;qhead;while(q-next-next!NULL){gotoxy(q-data.x,q-data.y);color(5);printf();qq-next;}gotoxy(q-next-data.x,q-next-data.y);printf( );free(q-next);q-nextNULL;}}if(chD){l-data.xhead-data.x1;l-data.yhead-data.y;if(l-data.xfood.xl-data.yfood.y){l-nexthead;headl;qhead;while(q!NULL){gotoxy(q-data.x,q-data.y);color(5);printf();qq-next;}score10;cre_food();}else{l-nexthead;headl;qhead;while(q-next-next!NULL){gotoxy(q-data.x,q-data.y);color(5);printf();qq-next;}gotoxy(q-next-data.x,q-next-data.y);printf( );free(q-next);q-nextNULL;}}live_jud_2();//判断是否撞自己死亡}void rungame()//运行游戏{while(1){gotoxy(54,8);printf(Your Score%d,score);/*以下确保不能向上运动时改方向为向下等情况*/if(GetAsyncKeyState(VK_UP)ch!S)chW;else if(GetAsyncKeyState(VK_DOWN)ch!W)chS;else if(GetAsyncKeyState(VK_LEFT)ch!D)chA;else if(GetAsyncKeyState(VK_RIGHT)ch!A)chD;/*根据分数和Sleep函数来确定游戏难度*/if(score50score100)sleep300;else if(score100score300)sleep250;else if(score300)sleep200;if(GetAsyncKeyState(VK_SPACE))//输入space暂停游戏{while(1){Sleep(300);if(GetAsyncKeyState(VK_SPACE))break;}}else if (GetAsyncKeyState(VK_ESCAPE))//输入ESC直接结束游戏{game_flag3;gameover();}Sleep(sleep);move();}}/*游戏结束界面*/void gameover()//游戏结束界面{FILE *fp;system(cls);//清屏gotoxy(48/2,26/2-2);printf(\tGame Over!!!);//打印出游戏结束界面gotoxy(48/2,26/2);if(game_flag1)printf(\t你撞墙了\n);else if(game_flag2)printf(\t傻孩子你不能吃你自己\n);else if(game_flag3)printf(\t您已结束游戏!);gotoxy(48/2,26/22);printf(\tYour score:%d\n,score);//打印出得到的分数if(scorebestscore)//如果此次游戏分数大于以前最高分{fpfopen(score.1,w);fprintf(fp,%d,score);//将此次分数保存在最高分文件里fclose(fp);}system(pause);exit(0);}/*主函数*/int main(){system(color 9);map_creat();ini_snack();cre_food();rungame();return 0;}标签head,food,gotoxy,next,链表,贪吃蛇,printf,C语言,data来源 https://blog.csdn.net/ippcp/article/details/106817372