赞
踩
- # 初始化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,感兴趣的伙伴可以试试。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。