C程序贪吃蛇游戏编程无法继续游戏,帮帮看哪里出错了

疯子的世界,诗人在游走!!
犀哥教你用C写贪吃蛇
一,涉及知识点:
结构体链表,动态分配内存,键盘输入检测,设置光标。
二,实现逻辑
1,可以设置光标,就能实现制定位置打印制定符号。
2,涉及一个结构体,包含两个元素坐标元素和一个结构体指针。
3,结构体串联形成链表,遍历获取成员坐标,打印符号得到蛇身。
4,不断的加头,去尾,重新遍历坐标,再打印形成蛇的移动。
5,食物产生的位置判定,不能越界,也不能与蛇身体重合。
6,蛇的转向判定,一条规则,不允许倒退。
7,转向的实现,跟行进方向决定新的关节坐标(当前头的上下左右)
8,死亡检测,是否头节点坐标是否与墙壁重合,是否与身体其他关节重合。
9,加速减速,设置刷新休眠时间实现。
pragma comment(lib, “user32.lib”)
上面这句代码不加的话用VS的开发人员命令提示编译时不通过
具体这个东西是干嘛的,参考下面这位仁兄的博客:
源码,拿走不谢
#pragma comment(lib, "user32.lib")
#include&stdio.h&
#include&time.h&
#include&windows.h&
#include&stdlib.h&
#define U 1
#define D 2
#define L 3
#define R 4
typedef struct Node
struct Node *
Node *head,*food,*
void snake_create();
void wall_create();
void Pos(int, int);
void game_description();
void snake_move();
void game_control();
void start_game();
void pause_game();
void exit_game();
void isbitself();
void isbitwall();
void spawn_food();
int score = 0,
death_type,
direction = R,
sleeptime = 200;
void Pos(int x, int y)
hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOutput, pos);
void game_description()
Pos(40, 14);
printf("欢迎进入贪吃蛇游戏!\n\n");
system("pause");
system("color 5e");
system("cls");
Pos(10, 14);
printf("您将通过键盘控制蛇的移动: 上↑
退出Esc");
Pos(10, 15);
printf("吃到食物身体会变长\n");
Pos(10, 16);
printf("撞到身体或墙壁游戏都会结束\n");
system("pause");
system("cls");
wall_create();
snake_create();
spawn_food();
void wall_create()
for (i = 0; i&58; i += 2)
Pos(i, 0);
printf("▓");
Pos(i, 26);
printf("▓");
for (i = 1; i&26; i++)
Pos(0, i);
printf("▓");
Pos(56, i);
printf("▓");
Pos(70, 10);
printf("当前分数");
void snake_create()
tail = (Node*)malloc(sizeof(Node));
tail-&x = 24;
tail-&y = 5;
tail-&next = NULL;
for (i = 1; i &= 4; i++)
head = (Node*)malloc(sizeof(Node));
head-&next =
head-&x = 24 + 2 *
head-&y =5;
while (tail != NULL)
Pos(tail-&x, tail-&y);
printf("◆");
tail = tail-&
void spawn_food()
if (food != NULL)
Node* food_1 = (Node*)malloc(sizeof(Node));
food_1-&x = rand() % 52 + 2;
food_1-&y = rand() % 24 + 1;
while ((food_1-&x) % 2 != 0)
food_1-&x = rand() % 50 + 2;
while (index != NULL)
if (food_1-&x == index-&x && food_1-&y == index-&y)
free(food_1);
spawn_food();
index = index-&
food = food_1;
Pos(food-&x, food-&y);
printf("●");
void snake_move()
isbitwall();
Node *nexthead = (Node*)malloc(sizeof(Node));
switch (direction)
nexthead-&x = head-&x;
nexthead-&y = head-&y - 1;
nexthead-&x = head-&x;
nexthead-&y = head-&y + 1;
nexthead-&x = head-&x - 2;
nexthead-&y = head-&y;
nexthead-&x = head-&x + 2;
nexthead-&y = head-&y;
nexthead-&next =
isbitself();
if (nexthead-&x == food-&x
&& nexthead-&y == food-&y)
while (index != NULL)
Pos(index-&x,index-&y);
printf("◆");
index = index-&
free(food);
food = NULL;
spawn_food();
while (index-&next-&next != NULL)
Pos(index-&x, index-&y);
printf("◆");
index = index-&
Pos(index-&next-&x, index-&next-&y);
printf(" ");
free(index-&next);
index-&next = NULL;
void game_control()
Pos(64, 15);
printf("不能穿墙,不能咬到自己\n");
Pos(64, 16);
printf("用↑ ↓ ← → 控制蛇的移动.");
Pos(64, 17);
printf("F1 为加速,F2 为减速\n");
Pos(64, 18);
printf("ESC :退出游戏
space:暂停游戏.");
direction = R;
Pos(64, 10);
printf("得分:%d ", score);
Pos(64, 11);
printf("当前食物分值:%d分", add);
if (GetAsyncKeyState(VK_UP) && direction != D)
direction = U;
else if (GetAsyncKeyState(VK_DOWN) && direction != U)
direction = D;
else if (GetAsyncKeyState(VK_RIGHT) && direction != L)
direction = R;
else if (GetAsyncKeyState(VK_LEFT) && direction != R)
direction = L;
else if (GetAsyncKeyState(VK_ESCAPE))
death_type = 3;
else if (GetAsyncKeyState(VK_SPACE))
pause_game();
else if (GetAsyncKeyState(VK_F1))
if (sleeptime & 50)
sleeptime -= 30;
add = add + 2;
if (sleeptime == 320)
else if (GetAsyncKeyState(VK_F2))
if (sleeptime&350)
sleeptime = sleeptime + 30;
add = add - 2;
if (sleeptime == 350)
Sleep(sleeptime);
snake_move();
void pause_game()
Sleep(300);
if (GetAsyncKeyState(VK_SPACE))
void isbitwall()
if (head-&x == 0 || head-&x == 56 || head-&y == 0 || head-&y == 26)
death_type = 1;
exit_game();
void isbitself()
Node *self = head-&
while (self != NULL)
if (self-&x == head-&x && self-&y == head-&y)
death_type = 2;
exit_game();
self = self-&
void exit_game()
system("cls");
Pos(24, 12);
if (death_type == 1)
printf("对不起,您撞到墙了。游戏结束.");
else if (death_type == 2)
printf("对不起,您咬到自己了。游戏结束.");
else if (death_type == 3)
printf("您已经结束了游戏。");
Pos(24, 13);
printf("您的得分是%d\n", score);
getchar();
void main()
system("title ★★贪吃蛇★★");
system("mode con cols=100 lines=30");
game_description();
game_control();
system("pause");
运行效果截图:
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!用MFC写的C++贪吃蛇游戏,无法运行怎么回事?问题如图_百度知道
用MFC写的C++贪吃蛇游戏,无法运行怎么回事?问题如图
我有更好的答案
你在那个目录下找一下看看有没有这个dll
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。帮帮找找错,一个贪吃蛇游戏
[问题点数:40分,无满意结帖,结帖人Evankaka]
本版专家分:4
结帖率 93.33%
CSDN今日推荐
本版专家分:0
本版专家分:11985
本版专家分:0
本版专家分:4
结帖率 93.33%
本版专家分:0
匿名用户不能发表回复!|
CSDN今日推荐单片机贪吃蛇程序遇到点小问题_百度知道
单片机贪吃蛇程序遇到点小问题
仿真贪吃蛇没问题,但是实际做出来时int0和int1至少有一个接地才能运行,否则就会复位,不知道什么情况,求高手解答!
我有更好的答案
会不会是这条蛇太贪吃了?吃的太多导致内存不够用,最后复位了
和你开玩笑的,int0和int1是中断脚,原则上不会影响复位这个东西,复位的话,先排除下是不是代码的问题你可以写个最简单的程序,比如上电只闪5次灯,再对比下仿真和实物,如果还是有复位的情况(不停的重复闪灯),和硬件会有关系,确认下电源和复位的电压
采纳率:74%
ALE 和EA接上高电平试试
为您推荐:
其他类似问题
贪吃蛇的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。贪吃蛇怎么用C语言编写_百度知道
贪吃蛇怎么用C语言编写
我有更好的答案
#include &stdio.h&#include &graphics.h&#include &stdlib.h&#include &dos.h& /*引用的库函数*/#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b/*宏定义键名*/#define N 200int i,/*游戏等级*/int score=0;/*得分*//*游戏速度*/struct Food{/*食物的横坐标*//*食物的纵坐标*//*判断是否要出现食物的变量*/}/*食物的结构体*/struct Snake{int x[N];int y[N];/*蛇的节数*//*蛇移动方向*//* 蛇的生命,0活着,1死亡*/}/*蛇的结构体*/void Choicelevle(void);/*选择游戏等级*/void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DRAW(void);/*游戏区域*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*//*主函数*/void main(void){Init();/*图形驱动*/Choicelevle();/*选择游戏等级*/DRAW();/*游戏区域*/GamePlay();/*玩游戏具体过程*/Close();/*图形结束*/}/*图形驱动*/void Init(void){int gd=DETECT,initgraph(&gd,&gm,&\\turboc2&); /*初始化图形系统*/cleardevice(); /*清除图形界面*/}/*选择游戏等级*/void Choicelevle(void){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:&);/*制作人学号*/outtextxy(300,380,&class:computer science 0602&);/*制作人班级*/getch();printf(&please putin your name:&);gets(name);printf(&please choice levle:&);scanf(&%d&,&level);gamespeed=*level-300*level*if(level&9||level&1){cleardevice(); /*清除图形界面*/setcolor(YELLOW); /*设置字体颜色*/settextstyle(0,0,2); /*设置字体类型*/outtextxy(150,200,&level input error&); /*显示文本*/getch();level=1;}}void DRAW(void){cleardevice(); /*清屏*/setcolor(2);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/rectangle(45,45,465,325);}/*玩游戏具体过程*/void GamePlay(void){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)/*画面上有食物了就要显示*/{setcolor(GREEN);rectangle(food.x,food.y,food.x+10,food.y-10);}for(i=snake.node-1;i&0;i--)/*蛇的每个环节往前移动*/{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}/*1,2,3,4表示右,左,上,下四个方向,通过这个控制来移动蛇头*/switch(snake.direction){case 1: snake.x[0]+=10;case 2: snake.x[0]-=10;case 3: snake.y[0]-=10;case 4: snake.y[0]+=10;}for(i=3;i&snake.i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/{if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]){GameOver();/*显示失败*/snake.life=1; /*蛇死*/}}/*如果蛇头碰到墙壁,蛇头从对面墙出来*/if(snake.x[0]&50){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是表示填充的范围的函数*/}}elseif(snake.x[0]&450){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是表示填充的范围的函数*/}}elseif(snake.y[0]&60){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是表示填充的范围的函数*/}}elseif(snake.y[0]&320){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分*/if(score%100==0){level++;gamespeed=*level-300*level*/*每吃掉10食物提升一级,速度加快*/PrScore();/*输出新得分*/setcolor(YELLOW); /*设置字体颜色*/settextstyle(0,0,4); /*设置字体类型*/outtextxy(150,200,&LEVEL UP&); /*显示文本*/if(level==10){level=1,gamespeed=*level-300*level*}delay(6000000); delay(6000000); delay(6000000); delay(6000000); delay(6000000);delay(6000000); delay(6000000);bar(50,55,455,315);/*bar是表示填充的范围的函数*/}PrScore();/*输出新得分*/ } setcolor(4);/*画出蛇*/ for(i=0;i&snake.i++) rectangle(snake.x[i],snake.y[i],snake.x[i]+10, snake.y[i]-10); delay(gamespeed); /*控制游戏速度*/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); } /*endwhile(!kbhit)*/ /*用黑色去除蛇的的最后一节*/ if(snake.life==1)/*如果蛇死就跳出循环*/
key=bioskey(0);/*接收按键*/ if(key==ESC)/*按ESC键退出*/
else if(key==UP&&snake.direction!=4) /*判断是否往相反的方向移动*/ snake.direction=3; else if(key==RIGHT&&snake.direction!=2) snake.direction=1; else if(key==LEFT&&snake.direction!=1) snake.direction=2; else if(key==DOWN&&snake.direction!=3) snake.direction=4; }/*endwhile(1)*/ } /*游戏结束*/ void GameOver(void) { cleardevice(); /*清屏*/PrScore(); setcolor(RED); /*设置字体颜色*/settextstyle(0,0,4); /*设置字体类型*/outtextxy(200,200,&GAME OVER&); /*显示文本*/getch(); } /*输出成绩及游戏等级*/ void PrScore(void) { char str1[20];/*设置字符型数组*/ setfillstyle(SOLID_FILL,0); bar(50,15,390,35); /*填充矩形框*/setcolor(6); /*设置文本颜色*/settextstyle(0,0,2); /*设置数组显示位置*/sprintf(str1,&score %d level %d&,score,level);/*显示数组内容*/outtextxy(55,20,str1); setcolor(YELLOW); /*设置字体颜色*/settextstyle(0,0,2); /*设置字体类型*/outtextxy(250,400,&EXIT=ESC &);/*显示文本*/} void Close(void) { closegraph(); }
采纳率:36%
#include &stdio.h&#include &graphics.h&#include &stdlib.h&#include &dos.h& /*引用的库函数*/#define LEFT 0x4b00#define RIGHT 0x4d00#define DOWN 0x5000#define UP 0x4800#define ESC 0x011b/*宏定义键名*/#define N 200int i,/*游戏等级*/int score=0;/*得分*//*游戏速度*/struct Food{/*食物的横坐标*//*食物的纵坐标*//*判断是否要出现食物的变量*/}/*食物的结构体*/struct Snake{int x[N];int y[N];/*蛇的节数*//*蛇移动方向*//* 蛇的生命,0活着,1死亡*/}/*蛇的结构体*/void Choicelevle(void);/*选择游戏等级*/void Init(void);/*图形驱动*/void Close(void);/*图形结束*/void DRAW(void);/*游戏区域*/void GameOver(void);/*结束游戏*/void GamePlay(void);/*玩游戏具体过程*/void PrScore(void);/*输出成绩*//*主函数*/void main(void){Init();/*图形驱动*/Choicelevle();/*选择游戏等级*/DRAW();/*游戏区域*/GamePlay();/*玩游戏具体过程*/Close();/*图形结束*/}/*图形驱动*/void Init(void){int gd=DETECT,initgraph(&gd,&gm,&\\turboc2&); /*初始化图形系统*/cleardevice(); /*清除图形界面*/}/*选择游戏等级*/void Choicelevle(void){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:&);/*制作人学号*/outtextxy(300,380,&class:computer science 0602&);/*制作人班级*/getch();printf(&please putin your name:&);gets(name);printf(&please choice levle:&);scanf(&%d&,&level);gamespeed=*level-300*level*if(level&9||level&1){cleardevice(); /*清除图形界面*/setcolor(YELLOW); /*设置字体颜色*/settextstyle(0,0,2); /*设置字体类型*/outtextxy(150,200,&level input error&); /*显示文本*/getch();level=1;}}void DRAW(void){cleardevice(); /*清屏*/setcolor(2);setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/rectangle(45,45,465,325);}/*玩游戏具体过程*/void GamePlay(void){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)/*画面上有食物了就要显示*/{setcolor(GREEN);rectangle(food.x,food.y,food.x+10,food.y-10);}for(i=snake.node-1;i&0;i--)/*蛇的每个环节往前移动*/{snake.x[i]=snake.x[i-1];snake.y[i]=snake.y[i-1];}/*1,2,3,4表示右,左,上,下四个方向,通过这个控制来移动蛇头*/switch(snake.direction){case 1: snake.x[0]+=10;case 2: snake.x[0]-=10;case 3: snake.y[0]-=10;case 4: snake.y[0]+=10;}for(i=3;i&snake.i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/{if(snake.x[i]==snake.x[0]&&snake.y[i]==snake.y[0]){GameOver();/*显示失败*/snake.life=1; /*蛇死*/}}/*如果蛇头碰到墙壁,蛇头从对面墙出来*/if(snake.x[0]&50){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是表示填充的范围的函数*/}}elseif(snake.x[0]&450){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是表示填充的范围的函数*/}}elseif(snake.y[0]&60){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是表示填充的范围的函数*/}}elseif(snake.y[0]&320){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分*/if(score%100==0){level++;gamespeed=*level-300*level*/*每吃掉10食物提升一级,速度加快*/PrScore();/*输出新得分*/setcolor(YELLOW); /*设置字体颜色*/settextstyle(0,0,4); /*设置字体类型*/outtextxy(150,200,&LEVEL UP&); /*显示文本*/if(level==10){level=1,gamespeed=*level-300*level*}delay(6000000); delay(6000000); delay(6000000); delay(6000000); delay(6000000);delay(6000000); delay(6000000);bar(50,55,455,315);/*bar是表示填充的范围的函数*/}PrScore();/*输出新得分*/ } setcolor(4);/*画出蛇*/ for(i=0;i&snake.i++) rectangle(snake.x[i],snake.y[i],snake.x[i]+10, snake.y[i]-10); delay(gamespeed); /*控制游戏速度*/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); } /*endwhile(!kbhit)*/ /*用黑色去除蛇的的最后一节*/ if(snake.life==1)/*如果蛇死就跳出循环*/
key=bioskey(0);/*接收按键*/ if(key==ESC)/*按ESC键退出*/
else if(key==UP&&snake.direction!=4) /*判断是否往相反的方向移动*/ snake.direction=3; else if(key==RIGHT&&snake.direction!=2) snake.direction=1; else if(key==LEFT&&snake.direction!=1) snake.direction=2; else if(key==DOWN&&snake.direction!=3) snake.direction=4; }/*endwhile(1)*/ } /*游戏结束*/ void GameOver(void) { cleardevice(); /*清屏*/PrScore(); setcolor(RED); /*设置字体颜色*/settextstyle(0,0,4); /*设置字体类型*/outtextxy(200,200,&GAME OVER&); /*显示文本*/getch(); } /*输出成绩及游戏等级*/ void PrScore(void) { char str1[20];/*设置字符型数组*/ setfillstyle(SOLID_FILL,0); bar(50,15,390,35); /*填充矩形框*/setcolor(6); /*设置文本颜色*/settextstyle(0,0,2); /*设置数组显示位置*/sprintf(str1,&score %d level %d&,score,level);/*显示数组内容*/outtextxy(55,20,str1); setcolor(YELLOW); /*设置字体颜色*/settextstyle(0,0,2); /*设置字体类型*/outtextxy(250,400,&EXIT=ESC &);/*显示文本*/} void Close(void) { closegraph(); }
本回答被提问者和网友采纳
为您推荐:
其他类似问题
您可能关注的内容
贪吃蛇的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 贪吃蛇游戏 的文章

 

随机推荐