找回密码
 中文实名注册
查看: 80|回复: 0

枪战

[复制链接]

3

主题

37

帖子

153

积分

注册会员

Rank: 2

积分
153
发表于 2025-1-11 09:53:32 | 显示全部楼层 |阅读模式
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()
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文实名注册

本版积分规则

小黑屋|东台市机器人学会 ( 苏ICP备2021035350号-1;苏ICP备2021035350号-2;苏ICP备2021035350号-3 )

GMT+8, 2025-3-14 21:09 , Processed in 0.039224 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表