C++小游戏贪吃蛇

编程入门 行业动态 更新时间:2024-10-24 06:33:38

C++<a href=https://www.elefans.com/category/jswz/34/1769974.html style=小游戏贪吃蛇"/>

C++小游戏贪吃蛇

此项目需要使用到SFML库
SFML库环境配置

项目完整代码地址:.git
详细视频教程:=760

#include <SFML/Graphics.hpp>
#include<SFML/Audio.hpp>
#include<time.h>using namespace sf;//定义宏,蛇的最大长度定义为100
#define SNAKE_LEN_MAX 100const int WIDTH_BLOCK_COUNT = 20;
const int HEIGHT_BLOCK_COUNT = 12;
const int BlockSize = 64;
int GameWidth = BlockSize * WIDTH_BLOCK_COUNT;
int GameHeight = BlockSize * HEIGHT_BLOCK_COUNT;//方向,枚举类型
enum {DIR_DOWN,DIR_LEFT,DIR_RIGHT,DIR_UP,
};
int dir;//结构,第几行第几列,蛇的身体,身体每一个部位的坐标
struct Position {int x;int y;
};struct Position snake[SNAKE_LEN_MAX];	//数组,蛇的最大长度
int num = 4;	//蛇的最开始长度为4
struct Position fruit = { WIDTH_BLOCK_COUNT / 2,HEIGHT_BLOCK_COUNT / 2 };	//毒苹果最开始在屏幕中间Sound eat;	//吃的声音//蛇跑的函数
void snakeGo() {//除蛇头snake[0]之外,都向前移动一个位置,玩家控制蛇头,后面的每一块位置都移动到其前一块的位置for (int i = num - 1; i > 0; i--) {	//0是蛇头,num-1是蛇尾snake[i].x = snake[i - 1].x;snake[i].y = snake[i - 1].y;}//更新蛇头位置if (dir == DIR_DOWN) snake[0].y += 1;if (dir == DIR_UP) snake[0].y -= 1;if (dir == DIR_LEFT) snake[0].x -= 1;if (dir == DIR_RIGHT) snake[0].x += 1;//处理撞墙if (snake[0].x >= WIDTH_BLOCK_COUNT) snake[0].x = 0;if (snake[0].x < 0) snake[0].x = WIDTH_BLOCK_COUNT;if (snake[0].y > HEIGHT_BLOCK_COUNT) snake[0].y = 0;if (snake[0].y < 0) snake[0].y = HEIGHT_BLOCK_COUNT;//吃苹果处理if (snake[0].x == fruit.x && snake[0].y == fruit.y) {num++;//生成新水果,水果的随机坐标.需要进一步优化,避免苹果出现在蛇的身体上fruit.x = rand() % WIDTH_BLOCK_COUNT;	//0-19fruit.y = rand() % HEIGHT_BLOCK_COUNT;	//0-11//蛇的身体要加一个单位snake[num - 1].x = snake[num - 2].x;snake[num - 1].y = snake[num - 2].y;//播放一个吃苹果的音效eat.play();}//蛇头碰到自己的身体!//处理:把剩余部分截断for (int i = 1; i < num; i++) {if (snake[i].x == snake[0].x && snake[i].y == snake[0].y) {num = i;break;}}}int main(void) {srand(time(0));	//先设置种子//创建游戏窗口RenderWindow window(VideoMode(GameWidth, GameHeight), "Rock_Snack");float delay = 0.2;	//蛇0.2s动一次Clock clock;	//计时器float timer = 0;//加载纹理WTexture t1, t2;t1.loadFromFile("images/apple.png");t2.loadFromFile("images/snake.png");Sprite spriteApple(t1);Sprite spriteSnake(t2);SoundBuffer tmp;	//声音缓存tmp.loadFromFile("images/13358.wav");	//加载声音缓存eat.setBuffer(tmp);	//设置声音while (window.isOpen()) {float tmp = clock.getElapsedTime().asSeconds();	//从上次启动到现在有多少秒timer += tmp;clock.restart();Event e;while (window.pollEvent(e)) {if (e.type == Event::Closed) {window.close();}}//方向处理if (Keyboard::isKeyPressed(Keyboard::Left)) dir = DIR_LEFT;if (Keyboard::isKeyPressed(Keyboard::Right)) dir = DIR_RIGHT;if (Keyboard::isKeyPressed(Keyboard::Up)) dir = DIR_UP;if (Keyboard::isKeyPressed(Keyboard::Down)) dir = DIR_DOWN;//如果时间到了,就让蛇动起来if (timer > delay) {snakeGo();timer = 0;}//画面的渲染window.clear(Color::White);	//用白色清空画面//画蛇for (int i = 0; i < num; i++) {spriteSnake.setPosition(snake[i].x * BlockSize, snake[i].y * BlockSize);window.draw(spriteSnake);}//画毒苹果spriteApple.setPosition(fruit.x * BlockSize, fruit.y * BlockSize);window.draw(spriteApple);window.display();}return 0;}

更多推荐

C++小游戏贪吃蛇

本文发布于:2024-03-06 07:38:56,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1714749.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:小游戏   贪吃蛇

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!