以下是一个 平台跳跃游戏 的 Kivy 示例。这个游戏与之前的示例不同,展示了如何使用 Kivy 实现一个 2D 平台跳跃游戏,包括玩家控制、平台生成、跳跃逻辑和碰撞检测。
游戏简介
- 游戏目标:控制角色跳跃,避开障碍物,尽可能到达更高的平台。
- 游戏规则:
- 玩家通过左右移动角色来调整位置。
- 按下空格键使角色跳跃。
- 角色必须落在平台上,否则游戏结束。
- 每成功跳跃到一个新平台,得分加 1。
代码实现
以下是完整的 Kivy 平台跳跃游戏代码:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty, ReferenceListProperty, ObjectProperty
from kivy.vector import Vector
from kivy.clock import Clock
from kivy.core.window import Window
from random import randint
class Player(Widget):
velocity_x = NumericProperty(0) # 角色的水平速度
velocity_y = NumericProperty(0) # 角色的垂直速度
velocity = ReferenceListProperty(velocity_x, velocity_y)
gravity = NumericProperty(-0.5) # 重力
def move(self):
self.velocity_y += self.gravity # 应用重力
self.pos = Vector(*self.velocity) + self.pos
def jump(self):
if self.velocity_y == 0: # 只有在地面上才能跳跃
self.velocity_y = 10 # 跳跃速度
class Platform(Widget):
pass
class PlatformerGame(Widget):
player = ObjectProperty(None) # 角色
platforms = [] # 平台列表
score = NumericProperty(0) # 得分
game_over = False # 游戏是否结束
def __init__(self, **kwargs):
super(PlatformerGame, self).__init__(**kwargs)
self._keyboard = Window.request_keyboard(self._keyboard_closed, self)
self._keyboard.bind(on_key_down=self._on_keyboard_down)
Clock.schedule_interval(self.update, 1.0 / 60.0) # 游戏循环
self.generate_platforms()
def generate_platforms(self):
# 生成初始平台
for i in range(5):
platform = Platform(pos=(randint(0, self.width - 100), y=i * 100))
self.platforms.append(platform)
self.add_widget(platform)
def update(self, dt):
if not self.game_over:
self.player.move()
# 检测角色是否落在平台上
for platform in self.platforms:
if self.player.collide_widget(platform) and self.player.velocity_y < 0:
self.player.velocity_y = 0
self.player.y = platform.top
# 检测角色是否掉出屏幕
if self.player.y < 0:
self.game_over = True
print("游戏结束!")
# 滚动平台
if self.player.y > self.height * 0.6:
self.player.y = self.height * 0.6
for platform in self.platforms:
platform.y -= self.player.velocity_y
if platform.y < 0: # 移除屏幕外的平台并生成新平台
self.platforms.remove(platform)
self.remove_widget(platform)
new_platform = Platform(pos=(randint(0, self.width - 100), y=self.height))
self.platforms.append(new_platform)
self.add_widget(new_platform)
self.score += 1
def on_touch_move(self, touch):
if not self.game_over:
self.player.center_x = touch.x
def _keyboard_closed(self):
self._keyboard.unbind(on_key_down=self._on_keyboard_down)
self._keyboard = None
def _on_keyboard_down(self, keyboard, keycode, text, modifiers):
if keycode[1] == 'space' and not self.game_over:
self.player.jump()
return True
class PlatformerApp(App):
def build(self):
game = PlatformerGame()
return game
if __name__ == '__main__':
PlatformerApp().run()
代码说明
- Player:表示玩家角色,具有水平和垂直速度属性。
- Platform:表示平台,角色可以站在上面。
- PlatformerGame:游戏主逻辑,包括角色的移动、平台的生成和碰撞检测。
- PlatformerApp:Kivy 应用的主类,负责启动游戏。
运行游戏
- 将代码保存为
platformer_game.py
。 - 在终端中运行:
python platformer_game.py
- 使用鼠标左右移动角色,按下空格键使角色跳跃,尽可能到达更高的平台。
游戏截图
- 初始界面:角色站在第一个平台上,其他平台随机生成。
- 游戏进行中:角色跳跃到新平台,得分增加。
- 游戏结束:角色掉出屏幕,游戏停止。
扩展功能
- 增加难度:随着得分增加,平台之间的间距变大或重力增强。
- 添加音效:角色跳跃或落地时播放音效。
- 移动端适配:优化触摸事件,方便移动端玩家操作。
- 高分记录:保存玩家的最高分数。
打包为 APK
如果需要将游戏打包为 APK,可以参考之前的步骤,使用 Buildozer 进行打包。
通过这个示例,你可以学习如何使用 Kivy 开发平台跳跃游戏,并在此基础上扩展更多功能!