godot2D复刻多种经典小游戏合集

前置说明

最近在学习 godot 游戏引擎,使用 GDScript,持续在做一些经典小游戏 demo(对于已经完成的 demo 会在下方游戏后打✅)

全部已经发布 github:https://github.com/abcnull/godot-mini-games-demo

snake 贪吃蛇

github 跳转

请添加图片描述
游戏介绍:复刻经典贪吃蛇小游戏
随机食物与随机 snake 开始位置
固定网格大小
方向键可操控蛇的移动
按键与蛇运动方向相同会让蛇以 2 倍速度移动
碰撞墙壁和蛇身检测
吃到食物后蛇身增长 1 格

demo锻炼:
GDScript 语法
图形绘制
逻辑思维

设计思路:

  • 1.先初始化蛇身体和食物位置
  • 2.每帧执行逻辑
    • 2.1 每帧监听键盘动作,是要加速,还是改变蛇的方向
    • 2.2 蛇的运动速度通过全局变量控制,到一定时间蛇头会运动,本质是绘制
    • 2.3 判定蛇头吃到食物与否,若吃到,蛇尾部不减少,若没吃到蛇尾减少;只要当蛇触发一次绘制时候,不论蛇尾是否减少,蛇头都会新绘制一个方格
    • 2.4 如果蛇头吃到食物,食物重新随机生成,注意不能生成到蛇身处
    • 2.5 如果蛇头碰到边界或者蛇头碰到身体,game over
  • 3._draw 逻辑
    • 3.1 绘制网格
    • 3.2 绘制蛇身
    • 3.3 绘制食物

flappy bird 飞翔的小鸟

github 跳转

在这里插入图片描述
游戏介绍:复刻经典飞翔的小鸟小游戏
随机管道位置
固定网格大小
点击屏幕可控制小鸟向上飞
碰撞检测
小鸟飞得分与存储最高分

demo锻炼:
GDScript 语法
碰撞检测
信号的用法
场景树的知识
界面绘制
初识图片添加
初识动画添加
初识音乐添加

设计逻辑:

  • 1.游戏开始初始化:游戏音乐,得分系统,按钮等初始化,发送游戏开始信号
  • 2.游戏开始后,触发背景,障碍物运动
    • 2.1 背景不断的运动,到一定时候滚动回来
    • 2.2 障碍物不断运动,到一定时候逃出界面的障碍物销毁释放,在一定时候在新的位置生成
    • 2.3 地板障碍物不断运动,到一定时候滚动回来
  • 3.小鸟监听键盘鼠标线上飞,否则下落
  • 4.障碍物进行碰撞检测
    • 4.1 小鸟逃出障碍物得分,最高分需要刷记录
    • 4.2 小鸟碰撞上树枝,game over
    • 4.3 小鸟碰撞上地板,game over
  • 5.游戏结束
    • 5.1 触发结束界面展示和游戏暂停(得分和最高分)
    • 5.2 重新开始游戏

brick breaker 打砖块

github 跳转

请添加图片描述
游戏介绍:复刻经典大砖块小游戏
砖块,墙体,小球以及挡板
小球与挡板,小球与墙体的碰撞检测
小球的速度的改变与反弹

demo锻炼:
GDScript 语法
碰撞检测
图形绘制

设计思路:

  • 1.点击开始,即可开始游戏
    • 1.1 初始化游戏数据,包括小球速度,小球于是可以运动
  • 2.通过监听键盘事件,控制滑板的左右移动
  • 3.当每帧绘制时候,判断当小球和周围物体发生碰撞时
    • 3.1 如果小球掉落出编辑,则 game over
    • 3.2 如果小球碰撞到墙壁,则小球反弹
    • 3.3 小球碰撞到砖块,小球反弹,且砖块消失
    • 3.4 小球碰撞到滑板,小球反弹(有发生碰撞那一刻滑板的速度决定反弹的角度和速度)
  • 4.小球和滑板的每帧绘制
  • 5.砖块和墙壁的绘制
    • 4.1 通过底层方法直接永久绘制墙壁
    • 4.2 通过底层方法直接永久绘制砖块
  • 6.游戏结束重新开始,init 游戏数据,清楚通过底层方法生成的墙壁和砖块

minesweeper 扫雷

github 跳转

请添加图片描述
游戏介绍:复刻经典扫雷小游戏

  • 扫雷方格底层隐藏的可能是地雷,区域空,或者 1-8 的数字。区域空表示周围一圈没地雷,1-8 表示周围一圈地雷的个数
  • 扫雷方格如果是没有被翻开的,可以被用户左键点击,表示翻牌,右键点击表示设置红旗,红旗标记表示此处有地雷
  • 扫雷方格如果是被红旗标记的,点击则会取消红旗标记
  • 扫雷方格如果是被翻开了,右键点击设置红旗没有效果,左键点击,如果点击是空白区域,则没有效果,如果点击的是数字区域,则会判定该数字周围一圈的红旗数量和数字是否一样,如果一样则该数字周围一圈区域全部打开,但是如果周围有地雷,游戏就结束
  • 当左键点击的未翻开的区域为数字时,该方格直接展现
  • 当左键点击的未翻开的区域为地雷时,游戏结束,并显示出所有的地雷和检查所有的红旗标记是否准确
  • 当左键点击的未翻开的区域为空白区域时,则会再次遍历周围一圈的每个方格(但是会过滤掉地雷的方格),如果又存在方格为空白区域时候在走一遍类似的逻辑,直到小方格代表一个 1-8 的数字
  • 把所有地雷找出来即算获胜

demo锻炼:

  • GDScript 语法
  • 逻辑思维

设计思路:

  • 1.首先给游戏设置众多方格,为一个数组,使用 TileMap
    • 1.1 方格数组中,底层隐藏着地雷或者数字,同时还得有一个属性表示它是否被翻开,所以使用 Vector2i(x, y),x 表示底部隐藏的是什么,y 表示翻开与否
    • 1.2 方格最开始需要被初始化一定的地雷,通过 shuffle 进行地雷随机分布
    • 1.3 每个方格都会有默认贴图,初始化时候当翻开单元格时候,本质是做了新的贴图操作
  • 2.点击 _input 需要翻开一些单元格
    • 2.1 当右键点击,最简单,设置红旗或者红旗消失,右键仅可操作未翻开的区域或者红旗标记的区域
    • 2.2 当左键点击,此处为关键逻辑
      • 2.2.1 当左键点击红旗,红旗消失
      • 2.2.2 当左键点击未翻开的区域
        • 2.2.2.1 未翻开的区域是地雷,game over
        • 2.2.2.2 未翻开的区域是 1-8 数字,直接翻开该数字
        • 2.2.2.3 未翻开的区域是空区域 0,则判断周围一圈方格,当不为地雷同也没有被翻开时候走递归
      • 2.2.3 当左键点击的是翻开的区域
        • 2.2.3.1 翻开的区域是地雷,不存在此情况
        • 2.2.3.2 翻开的区域是 1-8 数字,则判断周围一圈方格,当周围一圈方格的红旗数量等于当前翻开的区域的数字时候,则翻开周围一圈没有被翻开的方格,此处的翻开周围一圈其实也是走了递归
        • 2.2.3.3 翻开的区域是空区域 0,界面无任何效果
    • 2.3 当右键点击
      • 2.3.1 当右键点击红旗,红旗消失
      • 2.3.2 当右键点击未翻开的区域,出现红旗
      • 2.3.3 当右键点击翻开的区域,无任何效果
  • 3.游戏结束逻辑
    • 3.1 游戏失败结束:踩中地雷触发
    • 2.3 游戏胜利结束:剩余地雷数量 == 0 && 标记的红旗数量 == 初始的地雷数量

tic-tac-toe 井字棋

github 跳转

请添加图片描述

游戏规则介绍:复刻井字棋

  • 分别 2 人进行游戏,轮流进行
  • 谁能先让自己拥有的图案形成 3 连的场景,谁获胜
  • 格子大小 3 * 3

demo锻炼:

  • GDScript 语法
  • 图形绘制

设计思路:

  • 1.游戏开始先初始化数据,包括白板界面,玩家数据
  • 2.监听鼠标点击事件,每次点击后触发逻辑执行
    • 2.1 先 check 如果点击区域超出,或者点击了已经点过的区域,则不执行逻辑
    • 2.2 如果点击的单元格没点过,再点击的 postion 位置贴图
    • 2.3 判定是否获胜,获胜游戏结束,否则往下走(判断是否获胜需要计算下)
    • 2.4 判定是否平局,平局游戏结束,否则往下走(判断是否平局需要计算下)
    • 2.5 玩家更新成新的一位
  • 3.游戏结束时候,出现弹窗,弹窗中点击按钮游戏重新开始

pang 乒乓球游戏

github 跳转

请添加图片描述

游戏规则

  • 1.玩家控制上下键盘来控制面板
  • 2.电脑玩家自动控制另一个面板
  • 3.如果小球碰到面板和墙壁可以反弹
  • 4.如果球落入桌面以外算该球丢失,另一方得分

demo锻炼:

  • GDScript 语法
  • 场景树的知识
  • 碰撞检测

设计逻辑

  • 1.游戏开始,触发初始化
  • 2.玩家滑板的移动
    • 2.1 通过每帧中,监听键盘输入事件,来控制滑板移动
    • 2.2 滑板不能超出上下边界
  • 3.机器人滑板的移动
    • 3.1 通过每帧中,查看小球当前时刻的 y 值进而来控制机器人滑板的移动
    • 3.2 每帧中,当前时刻的小球的 y 如果是在滑板长度范围内,滑板也需要移动,因为滑板目标是正中心 position 碰撞到它
    • 3.2 滑板不能超出上下边界
  • 4.小球每帧检测碰撞
    • 4.1 小球碰撞墙壁,直接反弹
    • 4.2 小球碰撞滑板
      • 4.2.1 小球反弹
      • 4.2.2 小球获得加速度,由滑板移动带来的。由于滑板是 StaticBody,碰撞时速度本应该为 0 这是因为通过 position 控制其运动,因此需要额外保存速度,方便碰撞时小球能识别出来当前滑板的速度
  • 5.得分,信号检测

fruit-catcher 接水果

github 跳转
请添加图片描述

游戏规则

  • 1.鼠标左右移动控制篮子移动
  • 2.水果随机位置从空中掉落
  • 3.接住水果的一分,水果没接住生命值扣除 1/5

demo锻炼:

  • GDScript 语法
  • 场景树的知识
  • 信号的使用
  • 图形绘制

逻辑设计

  • 1.初始化游戏,包括得分,生命值,以及界面
  • 2.开始游戏点击信号监听
    • 2.1 一些初始化逻辑
    • 2.2 游戏内篮子逻辑执行
      • 2.2.1 篮子监听移动
      • 2.2.2 篮子监听碰撞信号,并向上发出,场景树根节点承接后进行得分处理
    • 2.3 游戏内水果 rigid 逻辑执行
      • 2.3.1 水果 rigit 是可以自动下落的,所以 ready 中设置其产生的随机位置
      • 2.3.2 水果如果监听到超出视口,则销毁且发出信号,场景树根节点代码监听到后进行扣血
      • 2.3.3 水果通过 Timer 每隔 1s 来生成
  • 3.暂停游戏界面
    • 3.1 通过监听 esc 触发
    • 3.2 界面展现
    • 3.3 重新开始游戏
    • 3.4 退出游戏
  • 4.游戏结束界面
    • 4.1 血条为 0 触发
    • 4.2 重新开始
    • 4.3 退出游戏

jump-and-dodge 跳跃和躲避

github 跳转

请添加图片描述

游戏规则

  • 1.随机产生障碍物
  • 2.恐龙需要跳跃或者下蹲来躲避
  • 3.恐龙行走的距离越远得分越高

demo锻炼

  • GDScript 语法
  • 动画播放
  • 物体运动和碰撞检测
  • godot 各节点的熟悉

游戏逻辑

  • 1.准备开始。监听按键开始
  • 2.游戏进行中
    • 2.1 每帧计算恐龙速度,达到一定时候恐龙速度 +1,但是有最大值
      • 2.1.1 恐龙每帧运动,判断未开始,播放站立
      • 2.1.2 恐龙每帧运动,判断 run,播放 run
      • 2.1.3 恐龙每帧运动,判断跳跃,播放跳跃,和音效
      • 2.1.4 恐龙每帧运动,判断下蹲,播放下蹲,更改碰撞检测区域
    • 2.2 注意 camera 跟随着也要跟着角色一起移动
    • 2.3 背景图片可使用 ParallaxLayer 不断更新
    • 2.4 地面位置也要更新
    • 2.5 生成障碍物(时机可自己定义)
      • 2.5.1 生成碰撞基础物体
      • 2.5.2 生成碰撞小鸟(一定概率)
      • 2.5.3 生成后注意 connect 上指定方法,方法内做游戏结束处理
    • 2.6 移除消失的障碍物
  • 3.游戏结束。计算最高分,界面绘制,游戏暂停
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abcnull

您的打赏是我创作的动力之一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值