找回密码
 中文实名注册
搜索
查看: 1020|回复: 6

射击变异体(无敌版)

[复制链接]

26

主题

34

回帖

2791

积分

金牌会员

积分
2791
发表于 2025-7-8 10:49:44 | 显示全部楼层 |阅读模式
购买主题 已有 6 人购买  本主题需向作者支付 3 金钱 才能浏览
回复

使用道具 举报

1

主题

29

回帖

119

积分

注册会员

积分
119
发表于 2025-7-8 18:08:54 | 显示全部楼层
:@:@:@:@:@:@
回复

使用道具 举报

1

主题

29

回帖

119

积分

注册会员

积分
119
发表于 2025-7-8 18:11:25 | 显示全部楼层
回复

使用道具 举报

2

主题

17

回帖

4119

积分

论坛元老

积分
4119
发表于 2025-7-10 14:48:50 | 显示全部楼层
import pygame
import random
import math

# 初始化Pygame
pygame.init()

# 设置窗口大小
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))

# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)

# 玩家类
class Player:
    def __init__(self):
        self.x = WIDTH // 2
        self.y = HEIGHT // 2
        self.width = 50
        self.height = 50
        self.zoomed = False

    def draw(self, screen):
        pygame.draw.rect(screen, WHITE, (self.x, self.y, self.width, self.height))

    def aim(self, target_x, target_y):
        if self.zoomed:
            target_x = (target_x - self.x) * 0.5 + self.x
            target_y = (target_y - self.y) * 0.5 + self.y
            pygame.draw.line(screen, RED, (self.x + self.width // 2, self.y + self.height // 2), (target_x, target_y), 1)
            return (target_x, target_y)
        return None

# 子弹类
class Bullet:
    def __init__(self, x, y, target_x, target_y):
        self.x = x
        self.y = y
        self.speed = 10
        dx = target_x - x
        dy = target_y - y
        distance = math.hypot(dx, dy)
        self.dx = (dx / distance) * self.speed
        self.dy = (dy / distance) * self.speed

    def move(self):
        self.x += self.dx
        self.y += self.dy

    def draw(self, screen):
        pygame.draw.circle(screen, RED, (int(self.x), int(self.y)), 5)

# 敌人基类
class Enemy:
    def __init__(self, x, y, width, height, health, speed):
        self.x = x
        self.y = y
        self.width = width
        self.height = height
        self.health = health
        self.speed = speed

    def move(self):
        # 随机移动敌人
        self.x += random.choice([-self.speed, self.speed])
        self.y += random.choice([-self.speed, self.speed])
        # 确保敌人在窗口内
        self.x = max(0, min(WIDTH - self.width, self.x))
        self.y = max(0, min(HEIGHT - self.height, self.y))

    def draw(self, screen):
        pygame.draw.rect(screen, GREEN, (self.x, self.y, self.width, self.height))

# 敌人类型
class FastEnemy(Enemy):
    def __init__(self):
        super().__init__(random.randint(0, WIDTH), random.randint(0, HEIGHT), 40, 40, health=1, speed=3)

class StrongEnemy(Enemy):
    def __init__(self):
        super().__init__(random.randint(0, WIDTH), random.randint(0, HEIGHT), 60, 60, health=3, speed=2)

class TankEnemy(Enemy):
    def __init__(self):
        super().__init__(random.randint(0, WIDTH), random.randint(0, HEIGHT), 80, 80, health=5, speed=1)

# 游戏类
class Game:
    def __init__(self):
        self.clock = pygame.time.Clock()
        self.player = Player()
        self.bullets = []
        self.enemies = []
        self.score = 0
        self.font = pygame.font.Font(None, 36)
        self.level = 1
        self.enemy_count = 5  # 每个关卡的敌人数量
        self.spawn_enemies()

    def spawn_enemies(self):
        self.enemies = []
        for _ in range(self.enemy_count):
            enemy_type = random.choice([FastEnemy, StrongEnemy, TankEnemy])
            self.enemies.append(enemy_type())

    def draw_score(self):
        score_text = self.font.render(f"Score: {self.score}", True, WHITE)
        level_text = self.font.render(f"Level: {self.level}", True, WHITE)
        screen.blit(score_text, (10, 10))
        screen.blit(level_text, (10, 40))

    def next_level(self):
        self.level += 1
        self.enemy_count += 2  # 每个关卡增加2个敌人
        self.spawn_enemies()

    def run(self):
        running = True
        while running:
            screen.fill(BLACK)

            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    running = False

            keys = pygame.key.get_pressed()
            if keys[pygame.K_w]:  # 上
                self.player.y -= 5
            if keys[pygame.K_s]:  # 下
                self.player.y += 5
            if keys[pygame.K_a]:  # 左
                self.player.x -= 5
            if keys[pygame.K_d]:  # 右
                self.player.x += 5
            
            if keys[pygame.K_z]:  # 开镜
                self.player.zoomed = True
            if keys[pygame.K_x]:  # 关镜
                self.player.zoomed = False

            mouse_x, mouse_y = pygame.mouse.get_pos()

            # 绘制玩家
            self.player.draw(screen)
            aim_target = self.player.aim(mouse_x, mouse_y)

            # 射击子弹
            if keys[pygame.K_SPACE] and aim_target:
                bullet = Bullet(self.player.x + self.player.width // 2, self.player.y + self.player.height // 2, aim_target[0], aim_target[1])
                self.bullets.append(bullet)

            # 更新和绘制子弹
            for bullet in self.bullets[:]:
                bullet.move()
                bullet.draw(screen)
                # 移除出屏幕的子弹
                if bullet.x < 0 or bullet.x > WIDTH or bullet.y < 0 or bullet.y > HEIGHT:
                    self.bullets.remove(bullet)
                else:
                    # 检测子弹与敌人碰撞
                    for enemy in self.enemies[:]:
                        if (bullet.x >= enemy.x and bullet.x <= enemy.x + enemy.width and
                            bullet.y >= enemy.y and bullet.y <= enemy.y + enemy.height):
                            self.bullets.remove(bullet)
                            enemy.health -= 1
                            # 如果敌人生命值为0,就移除敌人
                            if enemy.health <= 0:
                                self.enemies.remove(enemy)
                                self.score += 1  # 增加得分

            # 更新和绘制敌人
            for enemy in self.enemies[:]:
                enemy.move()
                enemy.draw(screen)

            # 检查是否击杀所有敌人
            if not self.enemies:
                self.next_level()

            # 绘制得分和关卡
            self.draw_score()

            pygame.display.flip()
            self.clock.tick(60)

        pygame.quit()

if __name__ == "__main__":
    game = Game()
    game.run()
回复

使用道具 举报

1

主题

29

回帖

119

积分

注册会员

积分
119
发表于 2025-7-12 17:20:37 | 显示全部楼层
回复

使用道具 举报

1

主题

29

回帖

119

积分

注册会员

积分
119
发表于 2025-7-12 17:37:15 | 显示全部楼层
:@:@:@:@:@:@:@:@:@
回复

使用道具 举报

11

主题

13

回帖

847

积分

高级会员

积分
847
发表于 2025-7-16 16:51:38 | 显示全部楼层
你这里面有错误
回复

使用道具 举报

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

本版积分规则

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