首页游戏c语言贪吃蛇游戏?用c语言编写贪吃蛇的代码

c语言贪吃蛇游戏?用c语言编写贪吃蛇的代码

编程之家2026-05-191085次浏览

各位老铁们,大家好,今天由我来为大家分享c语言贪吃蛇游戏,以及用c语言编写贪吃蛇的代码的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!

c语言贪吃蛇游戏?用c语言编写贪吃蛇的代码

用C语言怎么做贪吃蛇游戏

代码:

#define N 200

#include<graphics.h>

#include<stdlib.h>

#include<dos.h>

#define LEFT 0x4b00

c语言贪吃蛇游戏?用c语言编写贪吃蛇的代码

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

#define ESC 0x011b

int i,key;

int score=0;/*得分*/

c语言贪吃蛇游戏?用c语言编写贪吃蛇的代码

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

struct Food

{

int x;/*食物的横坐标*/

int y;/*食物的纵坐标*/

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

}food;/*食物的结构体*/

struct Snake

{

int x〔N〕;

int y〔N〕;

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");

cleardevice();

}

/*开始画面,左上角坐标为(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);/*右边*/

}

}

贪吃蛇游戏的C语言编程

#include<windows.h>

#include<ctime>

#include<iostream>

#include<vector>

#include<queue>

using namespace std;

#ifndef SNAKE_H

#define SNAKE_H

class Cmp

{

friend class Csnake;

int rSign;//横坐标

int lSign;//竖坐标

public:

// friend bool isDead(const Cmp& cmp);

Cmp(int r,int l){setPoint(r,l);}

Cmp(){}

void setPoint(int r,int l){rSign=r;lSign=l;}

Cmp operator-(const Cmp&m)const

{

return Cmp(rSign-m.rSign,lSign-m.lSign);

}

Cmp operator+(const Cmp&m)const

{

return Cmp(rSign+m.rSign,lSign+m.lSign);

}

};

const int maxSize= 5;//初始蛇身长度

class Csnake

{

Cmp firstSign;//蛇头坐标

Cmp secondSign;//蛇颈坐标

Cmp lastSign;//蛇尾坐标

Cmp nextSign;//预备蛇头

int row;//列数

int line;//行数

int count;//蛇身长度

vector<vector<char>> snakeMap;//整个游戏界面

queue<Cmp> snakeBody;//蛇身

public:

int GetDirections()const;

char getSymbol(const Cmp& c)const

//获取指定坐标点上的字符

{

return snakeMap[c.lSign][c.rSign];

}

Csnake(int n)

//初始化游戏界面大小

{

if(n<20)line=20+2;

else if(n>30)line=30+2;

else line=n+2;

row=line*3+2;

}

bool isDead(const Cmp& cmp)

{

return( getSymbol(cmp)=='@'|| cmp.rSign== row-1

|| cmp.rSign== 0|| cmp.lSign== line-1||

cmp.lSign== 0);

}

void InitInstance();//初始化游戏界面

bool UpdataGame();//更新游戏界面

void ShowGame();//显示游戏界面

};

#endif// SNAKE_H

using namespace std;

//测试成功

void Csnake::InitInstance()

{

snakeMap.resize(line);// snakeMap[竖坐标][横坐标]

for(int i=0;i<line;i++)

{

snakeMap[i].resize(row);

for(int j=0;j<row;j++)

{

snakeMap[i][j]='';

}

}

for(int m=1;m<maxSize+1;m++)

{

//初始蛇身

snakeMap[line/2][m]='@';

//将蛇身坐标压入队列

snakeBody.push(Cmp(m,(line/2)));

//snakeBody[横坐标][竖坐标]

}

//链表头尾

firstSign=snakeBody.back();

secondSign.setPoint(maxSize-1,line/2);

}

//测试成功

int Csnake::GetDirections()const

{

if(GetKeyState(VK_UP)<0) return 1;//1表示按下上键

if(GetKeyState(VK_DOWN)<0) return 2;//2表示按下下键

if(GetKeyState(VK_LEFT)<0) return 3;//3表示按下左键

if(GetKeyState(VK_RIGHT)<0)return 4;//4表示按下右键

return 0;

}

bool Csnake::UpdataGame()

{

//-----------------------------------------------

//初始化得分0

static int score=0;

//获取用户按键信息

int choice;

choice=GetDirections();

cout<<"Total score:"<<score<<endl;

//随机产生食物所在坐标

int r,l;

//开始初始已经吃食,产生一个食物

static bool eatFood=true;

//如果吃了一个,才再出现第2个食物

if(eatFood)

{

do

{

//坐标范围限制在(1,1)到(line-2,row-2)对点矩型之间

srand(time(0));

r=(rand()%(row-2))+1;//横坐标

l=(rand()%(line-2))+1;//竖坐标

//如果随机产生的坐标不是蛇身,则可行

//否则重新产生坐标

if(snakeMap[l][r]!='@')

{snakeMap[l][r]='*';}

}while(snakeMap[l][r]=='@');

}

switch(choice)

{

case 1://向上

//如果蛇头和社颈的横坐标不相同,执行下面操作

if(firstSign.rSign!=secondSign.rSign)nextSign.setPoint(firstSign.rSign,firstSign.lSign-1);

//否则,如下在原本方向上继续移动

else nextSign=firstSign+(firstSign-secondSign);

break;

case 2://向下

if(firstSign.rSign!=secondSign.rSign)nextSign.setPoint(firstSign.rSign,firstSign.lSign+1);

else nextSign=firstSign+(firstSign-secondSign);

break;

case 3://向左

if(firstSign.lSign!=secondSign.lSign)nextSign.setPoint(firstSign.rSign-1,firstSign.lSign);

else nextSign=firstSign+(firstSign-secondSign);

break;

case 4://向右

if(firstSign.lSign!=secondSign.lSign)nextSign.setPoint(firstSign.rSign+1,firstSign.lSign);

else nextSign=firstSign+(firstSign-secondSign);

break;

default:

nextSign=firstSign+(firstSign-secondSign);

}

//----------------------------------------------------------

if(getSymbol(nextSign)!='*'&&!isDead(nextSign))

//如果没有碰到食物(且没有死亡的情况下),删除蛇尾,压入新的蛇头

{

//删除蛇尾

lastSign=snakeBody.front();

snakeMap[lastSign.lSign][lastSign.rSign]='';

snakeBody.pop();

//更新蛇头

secondSign=firstSign;

//压入蛇头

snakeBody.push(nextSign);

firstSign=snakeBody.back();

snakeMap[firstSign.lSign][firstSign.rSign]='@';

//没有吃食

eatFood=false;

return true;

}

//-----吃食-----

else if(getSymbol(nextSign)=='*'&&!isDead(nextSign))

{

secondSign=firstSign;

snakeMap[nextSign.lSign][nextSign.rSign]='@';

//只压入蛇头

snakeBody.push(nextSign);

firstSign=snakeBody.back();

eatFood=true;

//加分

score+=20;

return true;

}

//-----死亡-----

else{cout<<"Dead"<<endl;cout<<"Your last total score is"<<score<<endl; return false;}

}

void Csnake::ShowGame()

{

for(int i=0;i<line;i++)

{

for(int j=0;j<row;j++)

cout<<snakeMap[i][j];

cout<<endl;

}

Sleep(1);

system("cls");

}

int main()

{

Csnake s(20);

s.InitInstance();

//s.ShowGame();

int noDead;

do

{

s.ShowGame();

noDead=s.UpdataGame();

}while(noDead);

system("pause");

return 0;

}

这个代码可以运行的,记得给分啦

用c语言写贪吃蛇

#include

#include

#include

#include/*引用的库函数*/

#define LEFT 0x4b00

#define RIGHT 0x4d00

#define DOWN 0x5000

#define UP 0x4800

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

#define N 200

int i,key;

int level;/*游戏等级*/

int score=0;/*得分*/

int gamespeed;/*游戏速度*/

struct Food

{

int x;/*食物的横坐标*/

int y;/*食物的纵坐标*/

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

}food;/*食物的结构体*/

struct Snake

{

int x[N];

int y[N];

int node;/*蛇的节数*/

int direction;/*蛇移动方向*/

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

}snake;/*蛇的结构体*/

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,gm;

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: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;}

}

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;break;

case 2: snake.x[0]-=10;break;

case 3: snake.y[0]-=10;break;

case 4: snake.y[0]+=10;break;

}

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

{

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

{

GameOver();/*显示失败*/

snake.life=1;/*蛇死*/

break;

}

}

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

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是表示填充的范围的函数*/

}

}

else

if(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是表示填充的范围的函数*/

}

}

else

if(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是表示填充的范围的函数*/

}

}

else

if(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)/*如果蛇死就跳出内循环,重新开始*/

break;

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=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;}

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.node;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)/*如果蛇死就跳出循环*/

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 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();

}

关于本次c语言贪吃蛇游戏和用c语言编写贪吃蛇的代码的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

ai在测试领域的应用,ai大模型在测试领域的应用编程app下载,自学编程的app