Python 的pygame 库编写的射击游戏示例

以下是一个用 Python 的 pygame 库编写的较为复杂的射击游戏示例:
你可以直接运行这段代码来玩这个射击游戏。玩家通过左右方向键控制角色移动,按下空格键发射子弹,击中敌人得分,敌人碰到玩家则减少一条生命,生命耗尽游戏结束。

python
 
import pygame
import random

# 初始化 pygame
pygame.init()

# 屏幕尺寸
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

# 创建屏幕
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("射击游戏")

# 玩家类
class Player:
    def __init__(self):
        self.x = SCREEN_WIDTH // 2
        self.y = SCREEN_HEIGHT - 50
        self.speed = 5
        self.lives = 3

    def move_left(self):
        self.x -= self.speed

    def move_right(self):
        self.x += self.speed

    def draw(self):
        pygame.draw.rect(screen, (0, 255, 0), (self.x, self.y, 50, 50))

# 敌人类
class Enemy:
    def __init__(self):
        self.x = random.randint(0, SCREEN_WIDTH - 50)
        self.y = random.randint(-200, -50)
        self.speed = random.randint(1, 3)

    def update(self):
        self.y += self.speed
        if self.y > SCREEN_HEIGHT:
            self.x = random.randint(0, SCREEN_WIDTH - 50)
            self.y = random.randint(-200, -50)
            self.speed = random.randint(1, 3)

    def draw(self):
        pygame.draw.rect(screen, (255, 0, 0), (self.x, self.y, 50, 50))

# 子弹类
class Bullet:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.speed = -10

    def update(self):
        self.y += self.speed

    def draw(self):
        pygame.draw.rect(screen, (0, 0, 255), (self.x, self.y, 10, 20))

# 创建玩家对象
player = Player()

# 敌人列表
enemies = [Enemy() for _ in range(10)]

# 子弹列表
bullets = []

# 游戏时钟
clock = pygame.time.Clock()

# 游戏主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_SPACE:
                bullets.append(Bullet(player.x + 20, player.y))

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player.move_left()
    if keys[pygame.K_RIGHT]:
        player.move_right()

    for enemy in enemies:
        enemy.update()

    for bullet in bullets:
        bullet.update()

    # 检测碰撞
    for enemy in enemies:
        for bullet in bullets:
            if (enemy.x < bullet.x < enemy.x + 50) and (enemy.y < bullet.y < enemy.y + 50):
                bullets.remove(bullet)
                enemies.remove(enemy)
                enemies.append(Enemy())
                break

        if (player.x < enemy.x < player.x + 50) and (player.y < enemy.y < player.y + 50):
            player.lives -= 1
            enemies.remove(enemy)
            enemies.append(Enemy())
            if player.lives == 0:
                running = False

    # 绘制屏幕
    screen.fill((0, 0, 0))
    player.draw()
    for enemy in enemies:
        enemy.draw()
    for bullet in bullets:
        bullet.draw()

    pygame.display.flip()

    clock.tick(60)

pygame.quit()
 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值