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

不好吃复旦复华--韩务

[复制链接]

2

主题

2

帖子

377

积分

中级会员

Rank: 3Rank: 3

积分
377
发表于 2025-1-19 17:42:05 | 显示全部楼层 |阅读模式
[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("对战小游戏")

# 颜色
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)

# 字体
font = pygame.font.Font(None, 36)


class Player:
    def __init__(self):
        self.health = 100
        self.x = screen_width // 2
        self.y = screen_height // 2
        self.size = 20
        self.speed = 5
        self.bullet_damage = 20

    def move(self, keys):
        if keys[pygame.K_LEFT]:
            self.x -= self.speed
        if keys[pygame.K_RIGHT]:
            self.x += self.speed
        if keys[pygame.K_UP]:
            self.y -= self.speed
        if keys[pygame.K_DOWN]:
            self.y += self.speed
        # 确保玩家不会移出屏幕
        self.x = max(self.size // 2, min(self.x, screen_width - self.size // 2))
        self.y = max(self.size // 2, min(self.y, screen_height - self.size // 2))

    def draw(self):
        pygame.draw.circle(screen, white, (self.x, self.y), self.size)


class Enemy:
    def __init__(self):
        self.health = 40
        self.x = random.randint(0, screen_width)
        self.y = random.randint(0, screen_height)
        self.size = 20
        self.speed = 3
        self.damage = 10

    def move_towards_player(self, player):
        dx = player.x - self.x
        dy = player.y - self.y
        dist = (dx ** 2 + dy ** 2) ** 0.5
        if dist!= 0:
            self.x += self.speed * dx / dist
            self.y += self.speed * dy / dist

    def draw(self):
        pygame.draw.rect(screen, red, (self.x - self.size // 2, self.y - self.size // 2, self.size, self.size))


def main():
    player = Player()
    enemies = [Enemy() for _ in range(10)]
    running = True
    clock = pygame.time.Clock()
    while running:
        screen.fill(black)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
        keys = pygame.key.get_pressed()
        player.move(keys)
        player.draw()
        for enemy in enemies:
            enemy.move_towards_player(player)
            enemy.draw()
            # 敌人攻击玩家
            if ((player.x - enemy.x) ** 2 + (player.y - enemy.y) ** 2) ** 0.5 < player.size:
                player.health -= enemy.damage
        # 玩家攻击敌人
        # 这里可以添加玩家攻击逻辑,例如按下空格键发射子弹,目前先简单模拟
        for enemy in enemies:
            if ((player.x - enemy.x) ** 2 + (player.y - enemy.y) ** 2) ** 0.5 < player.size:
                enemy.health -= player.bullet_damage
                if enemy.health <= 0:
                    enemies.remove(enemy)
        # 显示玩家血量
        health_text = font.render(f"Player Health: {player.health}", True, white)
        screen.blit(health_text, (10, 10))
        # 检查游戏结束条件
        if player.health <= 0:
            print("敌人胜利!")
            running = False
        if len(enemies) == 0:
            print("玩家胜利!")
            running = False
        pygame.display.flip()
        clock.tick(60)


if __name__ == "__main__":
    main()
    pygame.quit()
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-3-14 14:36 , Processed in 0.044217 second(s), 28 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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