Kivy 不仅可以用于开发移动应用,还可以用于创建简单的 2D 游戏。以下是一个不一样的 Kivy 游戏开发示例:一个简单的“躲避球”游戏。在这个游戏中,玩家需要控制一个小球,躲避从屏幕上方不断下落的障碍物。
示例:躲避球游戏
1. 安装 Kivy
确保你已经安装了 Kivy:
pip install kivy
2. 创建游戏代码
创建一个 Python 文件,例如 dodge_ball_game.py
,并添加以下代码:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.clock import Clock
from kivy.core.window import Window
from kivy.properties import NumericProperty, ReferenceListProperty
from kivy.vector import Vector
from random import randint
# 设置窗口大小
Window.size = (400, 600)
class Player(Widget):
# 玩家的速度
velocity_x = NumericProperty(0)
velocity_y = NumericProperty(0)
velocity = ReferenceListProperty(velocity_x, velocity_y)
def move(self):
# 更新玩家位置
self.pos = Vector(*self.velocity) + self.pos
class Obstacle(Widget):
# 障碍物的速度
velocity_y = NumericProperty(-2)
def move(self):
# 更新障碍物位置
self.y += self.velocity_y
class DodgeBallGame(Widget):
player = None
obstacles = []
score = NumericProperty(0)
def __init__(self, **kwargs):
super(DodgeBallGame, self).__init__(**kwargs)
self._keyboard = Window.request_keyboard(self._keyboard_closed, self)
self._keyboard.bind(on_key_down=self._on_keyboard_down)
# 初始化玩家
self.player = Player(pos=(Window.width / 2 - 25, 50), size=(50, 50))
self.add_widget(self.player)
# 定时生成障碍物
Clock.schedule_interval(self.spawn_obstacle, 1)
# 定时更新游戏状态
Clock.schedule_interval(self.update, 1 / 60)
def spawn_obstacle(self, dt):
# 随机生成障碍物
obstacle = Obstacle(pos=(randint(0, Window.width - 50), Window.height), size=(50, 50))
self.obstacles.append(obstacle)
self.add_widget(obstacle)
def update(self, dt):
# 更新玩家位置
self.player.move()
# 更新所有障碍物位置
for obstacle in self.obstacles:
obstacle.move()
# 检测碰撞
if self.player.collide_widget(obstacle):
print("Game Over! Final Score:", self.score)
App.get_running_app().stop()
# 移除超出屏幕的障碍物
if obstacle.y < 0:
self.remove_widget(obstacle)
self.obstacles.remove(obstacle)
self.score += 1
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] == 'left':
self.player.velocity_x = -5
elif keycode[1] == 'right':
self.player.velocity_x = 5
return True
def on_touch_up(self, touch):
# 停止移动
self.player.velocity_x = 0
class DodgeBallApp(App):
def build(self):
game = DodgeBallGame()
return game
if __name__ == '__main__':
DodgeBallApp().run()
3. 运行游戏
在终端中运行以下命令来启动游戏:
python dodge_ball_game.py
4. 游戏玩法
- 玩家控制:使用键盘的左右箭头键控制小球的移动。
- 目标:躲避从屏幕上方不断下落的障碍物。
- 得分:每成功躲避一个障碍物,得分加 1。
- 游戏结束:如果玩家碰到障碍物,游戏结束,控制台会显示最终得分。
5. 代码说明
- Player 类:代表玩家控制的小球,可以左右移动。
- Obstacle 类:代表从屏幕上方下落的障碍物。
- DodgeBallGame 类:游戏的主逻辑,包括玩家控制、障碍物生成、碰撞检测和得分计算。
- 键盘事件:通过监听键盘事件实现玩家控制。
- 定时器:使用
Clock.schedule_interval
定时生成障碍物和更新游戏状态。
6. 扩展游戏
你可以通过以下方式扩展游戏:
- 增加难度:随着得分增加,障碍物的下落速度加快。
- 添加音效:使用 Kivy 的
SoundLoader
播放背景音乐或音效。 - 美化界面:使用 Kivy 的图形库或加载图片资源,替换简单的矩形为更美观的精灵。
- 添加关卡:设置不同的关卡,每个关卡有不同的障碍物数量和速度。
这个示例展示了如何使用 Kivy 创建一个简单的 2D 游戏。Kivy 的跨平台特性使得你可以轻松地将游戏部署到 Android 或 iOS 设备上。希望这个示例能激发你的创意,开发出更多有趣的游戏!