c语言贪吃蛇流程图(c语言贪吃蛇最简单代码)

admin 315 0

今天给各位分享c语言贪吃蛇流程图的知识,其中也会对c语言贪吃蛇最简单代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

一、用C语言编写 贪吃蛇的思路什么怎么样的

int gamespeed=50000;/*游戏速度自己调整*/

int yes;/*判断是否要出现食物的变量*/

int life;/*蛇的生命,0活着,1死亡*/

void GameOver(void);/*结束游戏*/

void GamePlay(void);/*玩游戏具体过程*/

void PrScore(void);/*输出成绩*/

initgraph(&gd,&gm,"c:\\tc");

/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/

setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/

for(i=50;i<=600;i+=10)/*画围墙*/

rectangle(i,40,i+10,49);/*上边*/

rectangle(i,451,i+10,460);/*下边*/

rectangle(50,i,59,i+10);/*左边*/

rectangle(601,i,610,i+10);/*右边*/

food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/

snake.direction=1;/*方向往右*/

snake.x[0]=100;snake.y[0]=100;/*蛇头*/

snake.x[1]=110;snake.y[1]=100;

while(1)/*可以重复玩游戏,压ESC键结束*/

while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/

if(food.yes==1)/*需要出现新食物*/

while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/

if(food.yes==0)/*画面上有食物了就要显示*/

rectangle(food.x,food.y,food.x+10,food.y-10);

for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/

/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/

for(i=3;i<snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/

if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])

if(snake.x[0]<55||snake.x[0]>595||snake.y[0]<55||

snake.y[0]>455)/*蛇是否撞到墙壁*/

if(snake.life==1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/

if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/

setcolor(0);/*把画面上的食物东西去掉*/

rectangle(food.x,food.y,food.x+10,food.y-10);

snake.x[snake.node]=-20;snake.y[snake.node]=-20;

/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/

snake.node++;/*蛇的身体长一节*/

food.yes=1;/*画面上需要出现新的食物*/

rectangle(snake.x[i],snake.y[i],snake.x[i]+10,

setcolor(0);/*用黑色去除蛇的的最后一节*/

rectangle(snake.x[snake.node-1],snake.y[snake.node-1],

snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);

if(snake.life==1)/*如果蛇死就跳出循环*/

if(key==UP&&snake.direction!=4)

if(key==RIGHT&&snake.direction!=2)

if(key==LEFT&&snake.direction!=1)

if(key==DOWN&&snake.direction!=3)

outtextxy(200,200,"GAME OVER");

setfillstyle(SOLID_FILL,YELLOW);

sprintf(str,"score:%d",score);

二、c语言 贪吃蛇 程序

蛇每吃一个食物蛇身子就增加一格,用UP, DOWN, LEFT, RIGHT控制蛇头的运动,而蛇身子跟着蛇头走,每后一格蛇身子下一步走到上一格蛇身子的位置,以此类推。

typedef enum{UP, DOWN, LEFT, RIGHT} DIR;

struct Snake_body*next;//下一个蛇身

struct Snake_body*prev;//前一个蛇身

SetConsoleCursorPosition(hout, pos);

else if(j== 0|| j== WID- 1)//第一列或最后一列

PSNAKE pnew=(PSNAKE)calloc(1, sizeof(SNAKE));

pnew->next= head;//新创建蛇身的next指向原先的蛇头

head->prev= pnew;//原先的蛇头的prev指向新创建的蛇身

head= pnew;//把新创建的蛇身作为新的蛇头

SetConsoleCursorPosition(hout, head->pos);

if(head->pos.Y> BEG_Y+ 1)

if(head->pos.Y< BEG_Y+ HEI- 2)

if(head->pos.X> BEG_X+ 2)

if(head->pos.X< BEG_X+(WID- 2)* 2)

AddBody(pos);//添加了一个新的蛇头

SetConsoleCursorPosition(hout, ptmp->pos);

DIR dir= RIGHT;//初始蛇的方向是向右的

COORD pos={BEG_X+ 2, BEG_Y+ HEI/ 2};

system("mode con cols=90 lines=30");

hout= GetStdHandle(STD_OUTPUT_HANDLE);

printf("------------贪吃蛇的移动------------");

1,可以设置光标,就能实现制定位置打印制定符号。

2,涉及一个结构体,包含两个元素坐标元素和一个结构体指针。

3,结构体串联形成链表,遍历获取成员坐标,打印符号得到蛇身。

4,不断的加头,去尾,重新遍历坐标,再打印形成蛇的移动。

5,食物产生的位置判定,不能越界,也不能与蛇身体重合。

6,蛇的转向判定,一条规则,不允许倒退。

7,转向的实现,跟行进方向决定新的关节坐标(当前头的上下左右)

8,死亡检测,是否头节点坐标是否与墙壁重合,是否与身体其他关节重合。

9,加速减速,设置刷新休眠时间实现。

三、用c语言写贪吃蛇

#define ESC 0x011b/*宏定义键名*/

int yes;/*判断是否要出现食物的变量*/

int life;/*蛇的生命,0活着,1死亡*/

void Choicelevle(void);/*选择游戏等级*/

void GameOver(void);/*结束游戏*/

void GamePlay(void);/*玩游戏具体过程*/

void PrScore(void);/*输出成绩*/

Choicelevle();/*选择游戏等级*/

initgraph(&gd,&gm,"\\turboc2");/*初始化图形系统*/

cleardevice();/*清除图形界面*/

{char name[20];setcolor(YELLOW);settextstyle(0,0,6);outtextxy(150,150,"Snake");setcolor(GREEN);settextstyle(0,0,1);outtextxy(200,250,"please put in your English name:");outtextxy(200,270,"Choice levle from 1-9.");outtextxy(300,320,"name:yangzilong");/*制作人姓名*/outtextxy(300,350,"number:0902060226");/*制作人学号*/outtextxy(300,380,"class:computer science 0602");/*制作人班级*/getch();printf("please putin your name:");gets(name);printf("please choice levle:");scanf("%d",&level);gamespeed=100000-400*level-300*level*level;if(level>9||level<1){cleardevice();/*清除图形界面*/setcolor(YELLOW);/*设置字体颜色*/settextstyle(0,0,2);/*设置字体类型*/outtextxy(150,200,"level input error");/*显示文本*/getch();level=1;}

{cleardevice();/*清屏*/setcolor(2);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/rectangle(45,45,465,325);}

{setcolor(5);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/randomize();/*随机数发生器*/food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/snake.life=0;/*活着*/snake.direction=1;/*方向往右*/snake.x[0]=320;snake.y[0]=240;/*蛇头*/snake.x[1]=330;snake.y[1]=240;/*蛇的第二节位置*/snake.node=3;/*节数*/PrScore();/*输出得分*/while(1)/*可以重复玩游戏,压ESC键结束*/{while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/{if(food.yes==1)/*需要出现新食物*/{food.x=rand()%360+70;food.y=rand()%250+60;while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/food.x++;while(food.y%10!=0)food.y++;food.yes=0;/*画面上有食物了*/}

if(food.yes==0)/*画面上有食物了就要显示*/

rectangle(food.x,food.y,food.x+10,food.y-10);

for(i=snake.node-1;i>0;i--)/*蛇的每个环节往前移动*/

/*1,2,3,4表示右,左,上,下四个方向,通过这个控制来移动蛇头*/

for(i=3;i<snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/

if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0])

/*如果蛇头碰到墙壁,蛇头从对面墙出来*/

{snake.x[0]=450;/*如果蛇头越过左边界,则从右边界进入*/snake.y[0]=snake.y[0];/*纵坐标不变*/for(i=snake.node-1;i>0;i--){snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];/*蛇的其他节数向前推进*/}

setfillstyle(SOLID_FILL,0);/*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

{snake.x[0]=50;/*如果蛇头越过右边界,则蛇头从左边界进入*/snake.y[0]=snake.y[0];/*纵坐标不变*/for(i=snake.node-1;i>0;i--){snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];/*蛇的其他节数向前推进*/}

setfillstyle(SOLID_FILL,0);/*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

{snake.y[0]=320;/*如果蛇头越过上边界,则从下边界进入*/snake.x[0]=snake.x[0];/*横坐标不变*/for(i=snake.node-1;i>0;i--){snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];/*蛇的其他节数向前推进*/}

setfillstyle(SOLID_FILL,0);/*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

{snake.y[0]=60;/*如果蛇头越过下边界,则从上边界进入*/snake.x[0]=snake.x[0];/*横坐标不变*/for(i=snake.node-1;i>0;i--){snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];/*蛇的其他节数向前推进*/}

setfillstyle(SOLID_FILL,0);/*设置填充模式和颜色,0表示黑色*/

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

if(snake.life==1)/*如果蛇死就跳出内循环,重新开始*/

if(snake.x[0]==food.x&&snake.y[0]==food.y)/*吃到食物以后*/

setcolor(0);/*把画面上的食物东西去掉*/

rectangle(food.x,food.y,food.x+10,food.y-10);/*用当前线型和颜色画一矩形*/

snake.x[snake.node]=-20;snake.y[snake.node]=-20;

/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/

snake.node++;/*蛇的身体长一节*/

food.yes=1;/*画面上需要出现新的食物*/

score+=10;/*每吃掉一食物,得分累加10分*/

{level++;gamespeed=100000-400*level-300*level*level;/*每吃掉10食物提升一级,速度加快*/PrScore();/*输出新得分*/setcolor(YELLOW);/*设置字体颜色*/settextstyle(0,0,4);/*设置字体类型*/outtextxy(150,200,"LEVEL UP");/*显示文本*/if(level==10){level=1,gamespeed=100000-400*level-300*level*level;}

bar(50,55,455,315);/*bar是表示填充的范围的函数*/

rectangle(snake.x[i],snake.y[i],snake.x[i]+10,

delay(gamespeed);/*控制游戏速度*/

rectangle(snake.x[snake.node-1],snake.y[snake.node-1],

snake.x[snake.node-1]+10,snake.y[snake.node-1]-10);

}/*endwhile(!kbhit)*//*用黑色去除蛇的的最后一节*/

if(snake.life==1)/*如果蛇死就跳出循环*/

if(key==UP&&snake.direction!=4)

if(key==RIGHT&&snake.direction!=2)

if(key==LEFT&&snake.direction!=1)

if(key==DOWN&&snake.direction!=3)

setcolor(RED);/*设置字体颜色*/

settextstyle(0,0,4);/*设置字体类型*/

outtextxy(200,200,"GAME OVER");/*显示文本*/

char str1[20];/*设置字符型数组*/

bar(50,15,390,35);/*填充矩形框*/

settextstyle(0,0,2);/*设置数组显示位置*/

sprintf(str1,"score%d level%d",score,level);/*显示数组内容*/

setcolor(YELLOW);/*设置字体颜色*/

settextstyle(0,0,2);/*设置字体类型*/

outtextxy(250,400,"EXIT=ESC");/*显示文本*/

关于c语言贪吃蛇流程图和c语言贪吃蛇最简单代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。