# 初始化pygame库
pygame.init()
# 定义游戏窗口大小和标题
WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600
TITLE = "坦克大战"
# 创建游戏窗口
screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption(TITLE)
# 创建时钟对象,用于控制游戏帧率
clock = pygame.time.Clock()
# 游戏结束标志位,默认为False表示游戏未结束
game_over = False
# 游戏分数,默认为0分
score = 0
# 坦克生命值,默认为100点生命值
health = 100
# 敌人列表,用于存储敌人对象
enemies = []
# 坦克初始位置和大小,位置为(350,550),大小为50x50像素
tank = pygame.Rect(350, 550, 50, 50)
# 子弹列表,用于存储子弹对象
bullets = []
# 基地初始位置和大小,位置为(380,580),大小为100x100像素
base = pygame.Rect(380, 580, 100, 100)
# 基地生命值,默认为100点生命值
base_health = 100
# 敌人生成间隔,单位为帧数
enemies_spawn_rate = 20
# 敌人移动速度,单位为像素/帧
enemy_speed = 5
# 子弹飞行速度,单位为像素/帧
bullet_speed = 20
# 子弹半径,单位为像素,用于碰撞检测
bullet_radius = 5
# 子弹颜色为红色
bullet_color = (255, 0, 0)
# 子弹发射间隔,单位为帧数
bullet_cooldown = 20
# 第一种敌人图像文件名 注释:指定敌人图像的文件名,用于在游戏中加载敌人图像。
enemy_type1 = "enemy1.png"
# 敌人类型2对应的图像文件名
enemy_type2 = "enemy2.png"
# 敌人类型3对应的图像文件名
enemy_type3 = "enemy3.png"
# 子弹的初始位置为坦克的中心
bullet_spawn_x = tank.centerx
bullet_spawn_y = tank.centery
# 第一种敌人的攻击力,被第一种敌人击中减少10点生命值
enemy_damage1 = 10
# 第二种敌人的攻击力,被第二种敌人击中减少20点生命值
enemy_damage2 = 20
# 第三种敌人的攻击力,被第三种敌人击中减少30点生命值
enemy_damage3 = 30
# 游戏主循环
while not game_over:
# 处理退出游戏事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
# 获取玩家输入
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and tank.left > 0:
tank.move_ip(-5, 0)
if keys[pygame.K_RIGHT] and tank.right < WINDOW_WIDTH:
tank.move_ip(5, 0)
if keys[pygame.K_SPACE] and len(bullets) < 5:
bullets.append(tank.copy())
bullets[-1].x += tank.width // 2 - bullet_radius
bullets[-1].y += tank.height // 2 - bullet_radius
bullets[-1].speed_y = -bullet_speed
# 更新子弹位置和消除过期子弹
for bullet in bullets[:]:
bullet.move_ip(0, bullet.speed_y)
if bullet.top < 0 or bullet.bottom > WINDOW_HEIGHT:
bullets.remove(bullet)
bullets[:] = [bullet for bullet in bullets if bullet not in enemies]
# 生成敌人
enemy_spawn = random.randint(0, enemies_spawn_rate)
if enemy_spawn == 0:
enemy_type = random.choice([enemy_type1, enemy_type2, enemy_type3])
enemies.append(pygame.Rect(random.randint(0, WINDOW_WIDTH - 50), random.randint(-200, -100), 50, 50))
enemies[-1].speed_y = enemy_speed
enemies[-1].type = enemy_type
# 更新敌人位置和消除过期敌人
for enemy in enemies[:]:
enemy.move_ip(0, enemy.speed_y)
if enemy.bottom > WINDOW_HEIGHT:
enemies.remove(enemy)
enemies[:] = [enemy for enemy in enemies if base not in [bullet for bullet in bullets if bullet not in enemies and pygame.Rect(bullet).colliderect(enemy)]]
# 检查碰撞和伤害
for bullet in bullets:
for enemy in enemies:
if pygame.Rect(bullet).colliderect(enemy):
bullets.remove(bullet)
enemies.remove(enemy)
score += 10 + enemy.type[7:] if enemy in enemies[:len(enemies) // 2] else 10
break # 如果子弹击中敌人,则从子弹列表和敌人列表中移除该子弹和敌人,并增加分数。同时跳出循环,继续检查其他子弹。
if base in [bullet for bullet in bullets if pygame.Rect(bullet).colliderect(enemy)]:
bullets.remove(bullet)
enemies.remove(enemy)
score += 10 + enemy.type[7:] if enemy in enemies[:len(enemies) // 2] else 10
break # 如果基地被敌人击中,则从子弹列表和敌人列表中移除该子弹和敌人,并增加分数。同时跳出循环,继续检查其他敌人。
# 绘制游戏画面
screen.fill((0, 0, 0))
pygame.draw.rect(screen, (255, 0, 0), pygame.Rect(tank.left, tank.top, tank.width, tank.height)) # 绘制坦克
pygame.draw.rect(screen, (0, 255, 0), pygame.Rect(base.left, base.top, base.width, base.height)) # 绘制基地
for bullet in bullets:
pygame.draw.rect(screen, bullet_color, pygame.Rect(bullet.left, bullet.top, bullet.width, bullet.height)) # 绘制子弹
for enemy in enemies:
pygame.draw.rect(screen, (255, 255, 255), pygame.Rect(enemy.left, enemy.top, enemy.width, enemy.height)) # 绘制敌人
pygame.display.update()
# 控制游戏帧率
clock.tick(60)
# 游戏结束,退出游戏
pygame.quit()
以上即是小游戏坦克大战的python代码,运行还需要安装pygame,感兴趣的伙伴可以试试。