• 周二. 4 月 21st, 2026

物嫩软件资讯网

软件资讯来物嫩

Kivy游戏开发示例——太空射击游戏

admin@wunen

6 月 14, 2025

以下是一个

太空射击游戏

的 Kivy 示例。这个游戏与之前的示例不同,展示了如何使用 Kivy 实现一个简单的 2D 射击游戏,包括玩家控制、敌人生成、子弹发射和碰撞检测。




游戏简介


  • 游戏目标

    :控制飞船,消灭所有敌人,避免被敌人击中。

  • 游戏规则

    • 玩家通过左右移动飞船来躲避敌人的攻击。
    • 按下空格键发射子弹,击中敌人后敌人消失。
    • 如果飞船被敌人击中,游戏结束。



代码实现

以下是完整的 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 SpaceShip(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 Bullet(Widget):
    velocity_y = NumericProperty(10)  # 子弹的垂直速度

    def move(self):
        self.y += self.velocity_y

class Enemy(Widget):
    velocity_y = NumericProperty(-2)  # 敌人的垂直速度

    def move(self):
        self.y += self.velocity_y

class SpaceShooter(Widget):
    ship = ObjectProperty(None)  # 飞船
    bullets = []  # 子弹列表
    enemies = []  # 敌人列表
    game_over = False  # 游戏是否结束

    def __init__(self, **kwargs):
        super(SpaceShooter, 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)  # 游戏循环
        Clock.schedule_interval(self.generate_enemy, 1)  # 每秒生成一个敌人

    def update(self, dt):
        if not self.game_over:
            self.ship.move()

            # 移动子弹
            for bullet in self.bullets[:]:
                bullet.move()
                if bullet.y > self.height:  # 移除屏幕外的子弹
                    self.remove_widget(bullet)
                    self.bullets.remove(bullet)

            # 移动敌人
            for enemy in self.enemies[:]:
                enemy.move()
                if enemy.y < 0:  # 移除屏幕外的敌人
                    self.remove_widget(enemy)
                    self.enemies.remove(enemy)

            # 检测子弹与敌人的碰撞
            for bullet in self.bullets[:]:
                for enemy in self.enemies[:]:
                    if bullet.collide_widget(enemy):
                        self.remove_widget(bullet)
                        self.bullets.remove(bullet)
                        self.remove_widget(enemy)
                        self.enemies.remove(enemy)

            # 检测飞船与敌人的碰撞
            for enemy in self.enemies:
                if self.ship.collide_widget(enemy):
                    self.game_over = True
                    print("游戏结束!")

    def generate_enemy(self, dt):
        if not self.game_over:
            enemy = Enemy(pos=(randint(0, self.width - 50), y=self.height))
            self.enemies.append(enemy)
            self.add_widget(enemy)

    def shoot_bullet(self):
        if not self.game_over:
            bullet = Bullet(pos=(self.ship.center_x - 5, self.ship.top))
            self.bullets.append(bullet)
            self.add_widget(bullet)

    def on_touch_move(self, touch):
        if not self.game_over:
            self.ship.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.shoot_bullet()
        return True

class SpaceShooterApp(App):
    def build(self):
        game = SpaceShooter()
        return game

if __name__ == '__main__':
    SpaceShooterApp().run()



代码说明


  1. SpaceShip

    :表示玩家的飞船,可以左右移动。

  2. Bullet

    :表示子弹,具有垂直速度。

  3. Enemy

    :表示敌人,具有垂直速度。

  4. SpaceShooter

    :游戏主逻辑,包括飞船的移动、子弹的发射、敌人的生成和碰撞检测。

  5. SpaceShooterApp

    :Kivy 应用的主类,负责启动游戏。



运行游戏

  1. 将代码保存为

    space_shooter.py

  2. 在终端中运行:

    python space_shooter.py
    
  3. 使用鼠标左右移动飞船,按下空格键发射子弹,消灭敌人。



游戏截图


  • 初始界面

    :飞船在屏幕底部,敌人从顶部生成。

  • 游戏进行中

    :飞船发射子弹,消灭敌人。

  • 游戏结束

    :飞船被敌人击中,游戏停止。



扩展功能


  1. 增加难度

    :随着时间增加,敌人的生成速度加快或子弹速度减慢。

  2. 添加音效

    :子弹发射或敌人被击中时播放音效。

  3. 移动端适配

    :优化触摸事件,方便移动端玩家操作。

  4. 高分记录

    :保存玩家的最高分数。



打包为 APK

如果需要将游戏打包为 APK,可以参考之前的步骤,使用 Buildozer 进行打包。


通过这个示例,你可以学习如何使用 Kivy 开发太空射击游戏,并在此基础上扩展更多功能!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注