|
import pygame
import random
import sys
# 初始化 Pygame
pygame.init()
# 游戏窗口设置
WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption("萤火突击枪战")
# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# 玩家类
class Player:
def __init__(self):
self.image = pygame.Surface((50, 50))
self.image.fill(GREEN)
self.rect = self.image.get_rect(center=(WINDOW_WIDTH // 2, WINDOW_HEIGHT - 50))
self.health = 100
self.score = 0 # 初始化得分
def move(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and self.rect.left > 0:
self.rect.x -= 5
if keys[pygame.K_RIGHT] and self.rect.right < WINDOW_WIDTH:
self.rect.x += 5
if keys[pygame.K_UP] and self.rect.top > 0:
self.rect.y -= 5
if keys[pygame.K_DOWN] and self.rect.bottom < WINDOW_HEIGHT:
self.rect.y += 5
# 子弹类
class Bullet:
def __init__(self, x, y):
self.image = pygame.Surface((5, 10))
self.image.fill(RED)
self.rect = self.image.get_rect(center=(x, y))
def update(self):
self.rect.y -= 10
# 敌人类
class Enemy:
def __init__(self):
self.image = pygame.Surface((50, 50))
self.image.fill(BLACK)
self.rect = self.image.get_rect(center=(random.randint(0, WINDOW_WIDTH), 0))
def update(self):
self.rect.y += 3
# 创建玩家
player = Player()
bullets = []
enemies = [Enemy() for _ in range(5)]
# 游戏主循环
running = True
clock = pygame.time.Clock()
while running:
screen.fill(WHITE)
# 事件处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
# 发射子弹
bullet = Bullet(player.rect.centerx, player.rect.top)
bullets.append(bullet)
# 更新玩家
player.move()
# 更新子弹
for bullet in bullets[:]:
bullet.update()
if bullet.rect.bottom < 0:
bullets.remove(bullet)
# 更新敌人
for enemy in enemies[:]:
enemy.update()
# 检测子弹是否击中敌人
for bullet in bullets[:]:
if bullet.rect.colliderect(enemy.rect):
bullets.remove(bullet)
enemies.remove(enemy)
player.score += 10 # 击中敌人加分
enemies.append(Enemy()) # 生一个新敌人
break # 确保退出循环
# 检测玩家与敌人撞击
if player.rect.colliderect(enemy.rect):
running = False # 停止主循环,结束游戏
# 如果敌人下移到屏幕底部,重新生成
if enemy.rect.top > WINDOW_HEIGHT:
enemies.remove(enemy)
enemies.append(Enemy())
# 绘制所有对象
screen.blit(player.image, player.rect)
for bullet in bullets:
screen.blit(bullet.image, bullet.rect)
for enemy in enemies:
screen.blit(enemy.image, enemy.rect)
# 绘制 UI
health_text = f"Health: {player.health}"
score_text = f"Score: {player.score}" # 显示得分
font = pygame.font.Font(None, 36)
health_surface = font.render(health_text, True, BLACK)
score_surface = font.render(score_text, True, BLACK) # 绘制得分
screen.blit(health_surface, (10, 10))
screen.blit(score_surface, (10, 50)) # 绘制得分
pygame.display.flip()
clock.tick(60)
# 显示游戏结束消息
screen.fill(WHITE)
font = pygame.font.Font(None, 74)
game_over_surface = font.render("Game Over!", True, BLACK)
screen.blit(game_over_surface, (WINDOW_WIDTH // 2 - 150, WINDOW_HEIGHT // 2 - 50))
score_surface = font.render(f"Score: {player.score}", True, BLACK)
screen.blit(score_surface, (WINDOW_WIDTH // 2 - 100, WINDOW_HEIGHT // 2 + 20))
pygame.display.flip()
pygame.time.wait(2000) # 暂停2秒以展示得分信息
pygame.quit()
sys.exit() |
|