贪吃蛇游戏的c语言编程

# include & ltwindows.h & gt

# include & ltctime & gt

# include & ltiostream & gt

# include & ltvector & gt

# include & lt队列& gt

使用命名空间std

#ifndef SNAKE_H

#定义SNAKE_H

Cmp级

{

友类Csnake

int rSign//横坐标

int lSign//垂直坐标

公共:

//friend bool is dead(const Cmp & amp;CMP);

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

Cmp(){}

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

Cmp操作员-(const Cmp & amp;m)常数

{

返回Cmp(rSign-m.rSign,l sign-m . l sign);

}

Cmp运算符+(const Cmp & amp;m)常数

{

返回Cmp(rSign+m.rSign,l sign+m . l sign);

}

};

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

Csnake级

{

Cmp firstSign//蛇头坐标

Cmp第二设计。//蛇颈坐标

Cmp lastSign//蜗牛坐标

Cmp nextSign//准备黑鱼

int行;//列数

int线;//行数

int计数;//蛇身长度

向量& lt向量& ltchar & gt& gtsnakeMap//整个游戏界面

队列& ltCmp & gt蛇身;//蛇身

公共:

int get directions()const;

char get symbol(const Cmp & amp;c)常数

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

{

return snake map[c . l sign][c . r sign];

}

Csnake(int n)

//初始化游戏界面大小

{

如果(n & lt20)线= 20+2;

else if(n & gt;30)线= 30+2;

else line = n+2;

row = line * 3+2;

}

bool is dead(const Cmp & amp;cmp)

{

return(get symbol(CMP)= = ' @ ' | | CMP . rsign = = row-1

| | CMP . rsign = = 0 | | CMP . lsign = = line-1 | |

CMP . lsign = = 0);

}

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

bool updata game();//更新游戏界面

void show game();//显示游戏界面

};

#endif // SNAKE_H

使用命名空间std

//测试成功

void Csnake::InitInstance()

{

snake map . resize(line);// snakeMap[纵坐标][横坐标]

for(int I = 0;我& lt线;i++)

{

蛇图[i]。调整大小(行);

for(int j = 0;j & lt排;j++)

{

snake map[I][j]=“”;

}

}

for(int m = 1;m & ltmaxSize+1;m++)

{

//初始蛇体

snake map[line/2][m]= ' @ ';

//将蛇坐标压入队列。

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

//snakeBody[横坐标][纵坐标]

}

//链表头和链表尾

first sign = snake body . back();

second sign . setpoint(maxSize-1,line/2);

}

//测试成功

int cs nake::get directions()const

{

if(getkey state(VK _ UP)& lt;0)返回1;//1表示按向上键。

if(getkey state(VK _唐)& lt0)返回2;//2表示按键。

if(getkey state(VK _左)& lt0)返回3;//3表示按左键。

if(getkey state(VK _右)& lt0)返回4;//4表示按下右键。

返回0;

}

bool Csnake::UpdataGame()

{

// -

//初始化分数0

静态int得分= 0;

//获取用户密钥信息

int选择;

choice = get directions();

cout & lt& lt总分:" & lt& lt得分& lt& ltendl

//随机生成食物的坐标。

int r,l;

//一开始吃,产生一个食物。

静态bool eatFood = true

//吃了一个,第二个食物就出现了。

如果(吃食物)

{

{

//坐标范围限定为(1,1)到(line-2,row-2)对跖类型。

srand(time(0));

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

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

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

//否则,重新生成坐标。

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

{ snake map[l][r]= ' * ';}

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

}

开关(选择)

{

案例1:// Up

//如果蛇头和棒颈的横坐标不同,则执行以下操作。

if(firstSign.rSign!= second sign . r sign)next sign . setpoint(first sign . r sign,first sign . l sign-1);

//否则,继续向原始方向移动,如下所示

else next sign = first sign+(first sign-second sign);

打破;

情况2://向下

if(firstSign.rSign!= second sign . r sign)next sign . setpoint(first sign . r sign,first sign . l sign+1);

else next sign = first sign+(first sign-second sign);

打破;

案例3://左

if(firstSign.lSign!= second sign . l sign)next sign . setpoint(first sign . r sign-1,first sign . l sign);

else next sign = first sign+(first sign-second sign);

打破;

案例4://对

if(firstSign.lSign!= second sign . l sign)next sign . setpoint(first sign . r sign+1,first sign . l sign);

else next sign = first sign+(first sign-second sign);

打破;

默认值:

next sign = first sign+(first sign-second sign);

}

// -

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

//如果食物没有被碰到(而且没有死亡),就删除蛇头,压入一个新的蛇头。

{

//删除蛇尾

last sign = snake body . front();

snake map[last sign . l sign][last sign . r sign]=“”;

snake body . pop();

//更新黑鱼

secondSign = firstSign

//按下黑鱼

snake body . push(next sign);

first sign = snake body . back();

snake map[first sign . l sign][first sign . r sign]= ' @ ';

//没吃

eatFood = false

返回true

}

吃东西-

else if(get symbol(next sign)= ' * ' & amp;& amp!isDead(nextSign))

{

secondSign = firstSign

snake map[nextsign . l sign][nextsign . r sign]= ' @ ';

//只按下黑鱼

snake body . push(next sign);

first sign = snake body . back();

eatFood = true

//奖励积分

得分+= 20;

返回true

}

//-死亡-

else { cout & lt& lt“死了”& lt& ltendlcout & lt& lt“您的最后总分是”& lt& lt得分& lt& ltendl返回false}

}

void Csnake::ShowGame()

{

for(int I = 0;我& lt线;i++)

{

for(int j = 0;j & lt排;j++)

cout & lt& ltsnake map[I][j];

cout & lt& ltendl

}

睡眠(1);

系统(“cls”);

}

int main()

{

cs nake s(20);

南InitInstance();

//s . show game();

int noDead

{

南show game();

noDead = s . updata game();

} while(noDead);

系统(“暂停”);

返回0;

}

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