以下是一个用 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()