这篇文章给大家介绍使用c++怎么编写一个贪吃蛇游戏,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
一、基本思路
制作贪吃蛇游戏,首先必须要有的材料是蛇和得分的食物;其次是游戏逻辑,1。要能使用键盘控制蛇的移动;2。食物被吃掉要能再次生成并且蛇要做出相应变化;3。蛇咬到自己的身体和墙会死亡;最后是图形界面的显示。
二、蛇和食物
蛇和食物使用结构体来储存,代码比较简单。
# include & lt; graphics.h> # include & lt; stdio.h> # include & lt; time.h> # include & lt; conio.h> # define SIZE 30 # define N 1000年,//蛇的长度限制 struct 作 { ,int x; ,int y; }; enum Ch {=, up 72年,down =, 80年,left =, 75年,right =, 77年,P=112,},//ASCII码,枚举 struct 蛇 { ,int n; [N], Coor 可控硅; ,Ch ch;//蛇的方向 }蛇; struct 食物 { ,Coor fsr;//食物坐标 ,int 旗帜;//标记食物是否被吃的掉 }食物;
三、游戏逻辑实现
<强> 1。键盘控制蛇的移动强>
蛇的移动和方向改变主要是依靠SnakeMove和ChangeSnake两个函数实现,ChangeSnake函数通过键盘输入的ch值来判断用户对蛇方向的控制,从而修改snake.ch(蛇的方向)的值,然后SnakeMove函数通过修改后的蛇。ch的值来控制蛇的移动,如果没有新的ch值从键盘输入,蛇会一直保持原来的方向移动到地图边界。
void SnakeMove (), { ,for (int 小姐:=,snake.n 作用;1;,小姐:祝辞,0;,我——),{ ,snake.scr[我].x =, snake.scr[小姐,安康;1]方式; ,snake.scr[我].y =, snake.scr[小姐,安康;1].y; ,} ,switch (snake.ch), { ,case : ,snake.scr [0] .y -=,大小; ,打破; , ,case 下: ,snake.scr [0] .y +=,大小; ,打破; , ,case 左: ,snake.scr [0] .x -=,大小; ,打破; ,case 右: ,snake.scr [0] .x +=,大小; ,打破; ,} } void ChangeSnake (), { ,switch (getch ()), { 72年,case ,if (snake.ch !=,向下),{=,snake.ch ; ,} ,打破; 80年,case ,if (snake.ch !=,), {=,snake.ch ; ,} ,打破; 75年,case ,if (snake.ch !=,右),{=,snake.ch ; ,} ,打破; 77年,case ,if (snake.ch !=,左),{=,snake.ch ; ,} ,打破; 112年,case ,系统(“pause"); ,} }
<强> 2。食物被吃的触发事件强>
当食物被蛇吃掉(蛇头坐标和食物坐标重合),蛇身长度加一,食物存在标记置0;
void EatFood (), { ,if (snake.scr [0] .x ==, food.fsr.x&, snake.scr [0] .y ==, food.fsr.y), { ,snake.n + +;=,food.flag 0; ,} }
<强> 3。游戏结束事件强>
当蛇头触碰边界或者自己的身体(蛇头坐标超出地图边界或与蛇身任一坐标重合),窗口打印OverGame函数中预设的界面,并且关闭程序。
void GameBreak (), { , ,//撞的墙 ,if (snake.scr [0] .y & lt;, 1, | |, snake.scr [0] .y> 706年,| |,snake.scr [0] .x & lt;, 1, | |, snake.scr [0] .x> 946), { ,OverGame (); ,} ,//撞身体 ,for (int 小姐:=,snake.n 作用;1;,小姐:祝辞,0;,我——),{ ,if (snake.scr [0] .x ==, snake.scr[我].x&, snake.scr [0] .y ==, snake.scr[我].y), { ,OverGame (); ,} ,} } void OverGame (), { ,清除设备(); ,settextcolor(红色); ,settextstyle (100, 0,, L"黑体“); ,outtextxy (400,, 250,, L"菜“); ,睡眠(2000); ,退出(0); }
四、图形界面的显示
<强> 1。素材准备强>
需要准备的素材有蛇头的图片(如果不是对称图形,可以准备四个不同方向的图片),蛇身的图片(如果制作蛇头和蛇身一样的话则可以直接使用蛇头的图片),得分果实的图片。
<强> 2。背景制作及图片导入强>
将所有图片放入vs的项目文件夹即可直接在代码中通过loadimage函数对图片名字调用,GameInit函数主要进行游戏初始化,将蛇长度置为一,坐标置为(0,0),食物存在标记置零,打印游戏欢迎界面(GameStart函数)。