贪吃蛇小游戏--SFML实现

经典游戏 ---- 贪吃蛇。游戏的实现很简单,只要理清需要用什么数据结构表示蛇以及更新逻辑就好。这里使用 SFML 实现。

一、蛇的表示

我们可以将蛇身体每一部分存储起来,这里只需要储存每一部分的坐标值。如下

struct SnakeSegment {
    int x, y;

    SnakeSegment(int xx, int yy): x(xx), y(yy) {}

    bool operator == (const SnakeSegment& other) {
        return this->x == other.x && this->y == other.y;
    }
};

二、更新逻辑

这里的话,我们需要考虑的逻辑有:

  • 在每一步的更新中,蛇的每一部分的坐标都在变化
  • 如果撞到自身,那么游戏重新开始
  • 判断是否吃到了食物
  • 边界处理

代码如下:

void update() {
    int n = snake.size();

    for (int i = 0; i < n-1; i++)
        snake[i] = snake[i+1];

    if (dir == 0) snake[n-1].x--; if (dir == 1) snake[n-1].y++;
    if (dir == 2) snake[n-1].x++; if (dir == 3) snake[n-1].y--;

    if (std::find(snake.begin(), snake.end()-1, snake[n-1]) != snake.end()-1)
        init();

    if (snake[n-1].x == fruit.x && snake[n-1].y == fruit.y) {
        fruit.x = rand() % (windowWidth-2)+1;
        fruit.y = rand() % (windowHeight-2)+1;
        snake.push_back(snake[n-1]);
    }

    if (snake[n-1].x >= windowWidth-1) snake[n-1].x = 1;
    if (snake[n-1].x < 1) snake[n-1].x = windowWidth-2;

    if (snake[n-1].y >= windowHeight-1) snake[n-1].y = 1;
    if (snake[n-1].y < 1) snake[n-1].y = windowHeight-2;
}

三、其他东西

剩下的就是世界的绘制键盘事件的处理,这两部分实现比较简单,这里就不贴代码了。完整代码可以参见这里

游戏展示:

四、后续

作为展示,贪吃蛇游戏的代码实现过程较为简单,很多小细节没有去处理。例如,吃到食物之后蛇的身体没有立马更新、食物的随机生成没有考虑与蛇冲突、没有分数的展示等等,感兴趣的小伙伴可以动手去实现自己的贪吃蛇小游戏。?

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验!下载完使用问题请私信沟通。 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于SFML图形库的贪吃蛇小游戏源码+使用教程(课程大作业).zip 这是2022年春季复旦大学面向对象程序设计课程大作业 基于SFML图形库的贪吃蛇小游戏 编译环境的说明 - Windows 11 专业版 - GCC 11.2.0 - MinGW-w64 9.0.0 (linked with msvcrt) - GNU Make 4.3 - SFML 2.5.1 - 全部 static 编译 特点 相比原版和大部分走直线的贪吃蛇,界面直白简单,动画丝滑流畅,操作易上手 操作 点击或长按任意位置,变化蛇的方向 按w/a/s/d或者上/下/左/右键转向 蛇到边界的时候会从对称一边出来 按住空格可以加速 基于SFML图形库的贪吃蛇小游戏源码+使用教程(课程大作业).zip基于SFML图形库的贪吃蛇小游戏源码+使用教程(课程大作业).zip基于SFML图形库的贪吃蛇小游戏源码+使用教程(课程大作业).zip基于SFML图形库的贪吃蛇小游戏源码+使用教程(课程大作业).zip基于SFML图形库的贪吃蛇小游戏源码+使用教程(课程大作业).zip基于SFML图形库的贪吃蛇小游戏源码+使用教程(课程大作业).zip基于SFML图形库的贪吃蛇小游戏源码+使用教程(课程大作业).zip基于SFML图形库的贪吃蛇小游戏源码+使用教程(课程大作业).zip基于SFML图形库的贪吃蛇小游戏源码+使用教程(课程大作业).zip基于SFML图形库的贪吃蛇小游戏源码+使用教程(课程大作业).zip 基于SFML图形库的贪吃蛇小游戏源码+使用教程(课程大作业).zip

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值