c语言贪吃蛇代码简单吗(关于C语言写贪吃蛇)

:暂无数据 2026-04-21 09:20:02 0
你是否好奇,为什么人人都在谈c语言贪吃蛇代码简单吗?它和关于C语言写贪吃蛇之间究竟存在着怎样微妙的联系?答案就在下文。

本文目录

关于C语言写贪吃蛇

我以实现一个~~请笑纳~#include "stdio.h"
#include "graphics.h"
#include "stdlib.h"
#include "dos.h"
#define N 200
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define Esc 0x011b
int i,key;
int score=0;
int gamespeed=50000;struct Food
{
int x;
int y;
int yes;
}food;
struct Snake
{
int x;
int y;
int node;
int direction;
int life;
}snake;void Init();
void DrawK();
void GamePlay();
void GameOver();
void PrScore();
void Close();
void main()
{
Init();/*图形界面驱动*/
DrawK();/*作围墙*/
GamePlay();
Close();

}
/*图形界面驱动模块*/
void Init()
{
int gd=DETECT,gm;
initgraph(&gd,&gm,"");
}
/*作矩形围墙*/
void DrawK()
{
setcolor(11);
setlinestyle(0,0,3);
for(i=50;i《=600;i+=10)
{
rectangle(i,40,i+10,49);
rectangle(i,451,i+10,460);
}
for(i=40;i《=450;i+=10)
{
rectangle(50,i,59,i+10);
rectangle(601,i,610,i+10);
}
getch();
}void GamePlay()
{
randomize();

/*初始状态*/
food.yes=1;
snake.life=0;
snake.direction=1;
snake.x=100;
snake.y=100;
snake.x=110;
snake.y=100;
snake.node=2;
PrScore();

/*重复玩游戏模块*/
while(1)
{

/*没有按键情况下蛇的运动*/
while(!kbhit())
{
/*食物的出现*/
if(food.yes==1)
{
food.x=rand()%400+60;
food.y=rand()%350+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;
snake.y;
}

/*按方向键时蛇的位置变化*/
switch(snake.direction)
{
case 1:snake.x+=10;break;
case 2:snake.x-=10;break;
case 3:snake.y-=10;break;
case 4:snake.y+=10;break;
}
/*蛇自己与自己相撞时生命结束*/
for(i=3;i《snake.node;i++)
{
if(snake.x)
{
GameOver();
snake.life=1;
break;
}
}
/*蛇撞墙时死亡*/
if(snake.x》455)
{
GameOver();
snake.life=1;
}

/*蛇的生命状态判断*/
if(snake.life==1)
break;

/*蛇吃食物*/
if(snake.x==food.y)
{
setcolor(0);
rectangle(food.x,food.y,food.x+=10,food.y-=10);
snake.x=-20;
snake.y=-20;
snake.node++;
food.yes=1;
score+=10;
PrScore();
}
/*画蛇*/
setcolor(4);
for(i=0;i《snake.node;i++)
rectangle(snake.x-10);
delay(gamespeed);
/*去除最后一节*/
setcolor(0);
rectangle(snake.x-10);
}/*end while(!kbhit())*/

if(snake.life==1)
break;

key=bioskey(0);
if(key==Esc)
break;
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()
{
cleardevice();
PrScore();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,"GAME OVER");
getch();
}/*打印分数*/
void PrScore()
{
char str;
setfillstyle(1,14);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);
} /*图形结束*/
void Close()
{
getch();
closegraph();
}

c语言简易版贪吃蛇怎么写用一个方块形状代表蛇的一个关节(如:printf(“%c“,4)是一个方块图样)

达到你说的要求,可以使用kbhit()函数,上百度搜一下它的用法,这个函数可以检测到游戏中是否有按键被按下,如果没有就使用一个死循环使蛇身一直移动,如果检测到了有按键被按下,就判断是否是方向键或者程序中设置的其他功能键(如ESC退出键,调速键等),如果不是,不做响应,如果是,就就bioskey()函数接收这个键,并根据这个键值做出相应的响应!
写游戏要注意模块化,你这样全写在main里很乱的。
使用数组解决贪吃蛇的问题有点挠头,最好是自己构造一个合适的数据类型。
还有就是学习一下《graphics.h》这个头文件,只需要里面的几个函数就可以设计贪吃蛇的图形界面。
给你个现成的贪吃蛇游戏,代码不长,仔细看一下里面的数据结构和算法思想。
/* 贪吃蛇游戏 */
#define N 200
#include 《graphics.h》
#include 《stdlib.h》
#include 《dos.h》
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define DOWN 0x5000
#define UP 0x4800
#define ESC 0x011b
int i,key;
int score=0;/*得分*/
int gamespeed=50000;/*游戏速度自己调整*/
struct Food
{
int x;/*食物的横坐标*/
int y;/*食物的纵坐标*/
int yes;/*判断是否要出现食物的变量*/
}food;/*食物的结构体*/
struct Snake
{
int x;
int y;
int node;/*蛇的节数*/
int direction;/*蛇移动方向*/
int life;/* 蛇的生命,0活着,1死亡*/
}snake;
void Init(void);/*图形驱动*/
void Close(void);/*图形结束*/
void DrawK(void);/*开始画面*/
void GameOver(void);/*结束游戏*/
void GamePlay(void);/*玩游戏具体过程*/
void PrScore(void);/*输出成绩*/
/*主函数*/
void main(void)
{
Init();/*图形驱动*/
DrawK();/*开始画面*/
GamePlay();/*玩游戏具体过程*/
Close();/*图形结束*/
}
/*图形驱动*/
void Init(void)
{
int gd=DETECT,gm;
/* initgraph(&gd,&gm,"c:\\tc"); */
initgraph(&gd,&gm,"c:\\JMSOFT\\DRV");
}
/*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/
void DrawK(void)
{
/*setbkcolor(LIGHTGREEN);*/
setcolor(11);
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);/*下边*/
}
for(i=40;i《=450;i+=10)
{
rectangle(50,i,59,i+10); /*左边*/
rectangle(601,i,610,i+10);/*右边*/
}
}
/*玩游戏具体过程*/
void GamePlay(void)
{
randomize();/*随机数发生器*/
food.yes=1;/*1表示需要出现新食物,0表示已经存在食物*/
snake.life=0;/*活着*/
snake.direction=1;/*方向往右*/
snake.x=100;/*蛇头*/
snake.x=100;
snake.node=2;/*节数*/
PrScore();/*输出得分*/
while(1)/*可以重复玩游戏,压ESC键结束*/
{
while(!kbhit())/*在没有按键的情况下,蛇自己移动身体*/
{
if(food.yes==1)/*需要出现新食物*/
{
food.x=rand()%400+60;
food.y=rand()%350+60;
while(food.x%10!=0)/*食物随机出现后必须让食物能够在整格内,这样才可以让蛇吃到*/
food.x++;
while(food.y%10!=0)
food.y++;
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;
snake.y;
}
/*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/
switch(snake.direction)
{
case 1:snake.x+=10;break;
case 2: snake.x-=10;break;
case 3: snake.y-=10;break;
case 4: snake.y+=10;break;
}
for(i=3;i《snake.node;i++)/*从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/
{
if(snake.x)
{
GameOver();/*显示失败*/
snake.life=1;
break;
}
}
if(snake.x《55||
snake.y》455)/*蛇是否撞到墙壁*/
{
GameOver();/*本次游戏结束*/
snake.life=1; /*蛇死*/
break;
}
if(snake.x==food.y)/*吃到食物以后*/
{
setcolor(0);/*把画面上的食物东西去掉*/
rectangle(food.x,food.y,food.x+10,food.y-10);
snake.x=-20;
/*新的一节先放在看不见的位置,下次循环就取前一节的位置*/
snake.node++;/*蛇的身体长一节*/
food.yes=1;/*画面上需要出现新的食物*/
score+=10;
PrScore();/*输出新得分*/
}
setcolor(4);/*画出蛇*/
for(i=0;i《snake.node;i++)
rectangle(snake.x+10,
snake.y-10);
delay(gamespeed);
setcolor(0);/*用黑色去除蛇的的最后一节*/
rectangle(snake.x,
snake.x-10);
} /*endwhile(!kbhit)*/
if(snake.life==1)/*如果蛇死就跳出循环*/
break;
key=bioskey(0);/*接收按键*/
if(key==ESC)/*按ESC键退出*/
break;
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 str;
setfillstyle(SOLID_FILL,YELLOW);
bar(50,15,220,35);
setcolor(6);
settextstyle(0,0,2);
sprintf(str,"score:%d",score);
outtextxy(55,20,str);
}
/*图形结束*/
void Close(void)
{
getch();
closegraph();
}
这个程序有只有一个地方需要改,就是initgraph(&gd,&gm,"c:\\JMSOFT\\DRV");
这句代码中的第三个参数是 bgi文件的路径,你按下键盘上的alt + f 搜索一下 *.bgi在哪个目录下,把那个路径复制到这个地方就可以了直接运行了,不然可能提示你 初始化错误!。

你对c语言贪吃蛇代码简单吗中的关于C语言写贪吃蛇还有啥想聊的?评论区交给你,我们接着唠。
本文编辑:admin

更多文章:


玩android(安卓开发模拟器选择推荐 安卓开发者用什么模拟器好)

玩android(安卓开发模拟器选择推荐 安卓开发者用什么模拟器好)

常言道:“万丈高楼平地起”。理解玩android这座大厦,也必须从安卓开发模拟器选择推荐 安卓开发者用什么模拟器好这块基石开始。

2026年4月21日 11:20

arm9开发板上电慢(本人想要串口,进行PC与ARM9的文件传输,一个1M的文件大概要传多长时间)

arm9开发板上电慢(本人想要串口,进行PC与ARM9的文件传输,一个1M的文件大概要传多长时间)

从一个常见的误区说起:很多人学arm9开发板上电慢,却忽略了本人想要串口,进行PC与ARM9的文件传输,一个1M的文件大概要传多长时间。结果事倍功半。希望你不会再犯这个错误。

2026年4月21日 11:00

cad视频教程全集 下载(CAD教程全套视频 要能下载的)

cad视频教程全集 下载(CAD教程全套视频 要能下载的)

为什么说不懂CAD教程全套视频 要能下载的,就等于没学明白cad视频教程全集 下载?这篇文章将给你一个令人信服的解释。

2026年4月21日 10:40

目前常用的动态网络编程语言(动态网页语言的简介)

目前常用的动态网络编程语言(动态网页语言的简介)

本文是您理解目前常用的动态网络编程语言的最后一站。我们将通过剖析动态网页语言的简介,帮你打通任督二脉,彻底领悟。

2026年4月21日 10:20

jquery prop和attr的区别(关于Jquery中radio的属性设置,是attr,还是prop问题)

jquery prop和attr的区别(关于Jquery中radio的属性设置,是attr,还是prop问题)

我们注意到,那些在jquery prop和attr的区别上表现突出的人,往往都对关于Jquery中radio的属性设置,是attr,还是prop问题有独到的见解。这并非巧合。

2026年4月21日 10:00

个人免费网站创建入口(如何建立自己的免费网站)

个人免费网站创建入口(如何建立自己的免费网站)

老铁们,关于个人免费网站创建入口,你可能听过不少说法。今天,咱们就坐下来好好聊聊如何建立自己的免费网站,保证让你豁然开朗。

2026年4月21日 09:40

c语言贪吃蛇代码简单吗(关于C语言写贪吃蛇)

c语言贪吃蛇代码简单吗(关于C语言写贪吃蛇)

你是否好奇,为什么人人都在谈c语言贪吃蛇代码简单吗?它和关于C语言写贪吃蛇之间究竟存在着怎样微妙的联系?答案就在下文。

2026年4月21日 09:20

进程和线程说**确的是(进程和线程是什么)

进程和线程说**确的是(进程和线程是什么)

很多朋友初次接触进程和线程说**确的是可能会觉得有点陌生,这很正常。今天这篇文章,咱们就一起把进程和线程是什么这事儿聊透,希望能帮您理清思路。

2026年4月21日 09:00

vb编程软件教程(vb如何编程二进制文件)

vb编程软件教程(vb如何编程二进制文件)

很多朋友初次接触vb编程软件教程可能会觉得有点陌生,这很正常。今天这篇文章,咱们就一起把vb如何编程二进制文件这事儿聊透,希望能帮您理清思路。

2026年4月21日 08:40

timestamp datetime(mysql中Timestamp,time,datetime 区别)

timestamp datetime(mysql中Timestamp,time,datetime 区别)

是不是总觉得timestamp datetime的知识体系太庞大,mysql中Timestamp,time,datetime 区别更是无从下手?本文将帮你化繁为简,抓住核心。

2026年4月21日 08:20

最近更新

jquery prop和attr的区别(关于Jquery中radio的属性设置,是attr,还是prop问题)
2026-04-21 10:00:02 浏览:0
timestamp datetime(mysql中Timestamp,time,datetime 区别)
2026-04-21 08:20:02 浏览:0
热门文章

**art和**artly区别(**art是啥)
2026-03-30 23:20:01 浏览:0
api接口如何使用(api接口是什么)
2026-03-31 12:40:01 浏览:0
floatleft是什么意思(displayflex和floatleft的区别)
2026-04-17 04:40:03 浏览:0
标签列表