当前位置:   article > 正文

小游戏坦克大战python代码

小游戏坦克大战python代码
  1. # 初始化pygame库
  2. pygame.init()
  3. # 定义游戏窗口大小和标题
  4. WINDOW_WIDTH = 800
  5. WINDOW_HEIGHT = 600
  6. TITLE = "坦克大战"
  7. # 创建游戏窗口
  8. screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
  9. pygame.display.set_caption(TITLE)
  10. # 创建时钟对象,用于控制游戏帧率
  11. clock = pygame.time.Clock()
  12. # 游戏结束标志位,默认为False表示游戏未结束
  13. game_over = False
  14. # 游戏分数,默认为0分
  15. score = 0
  16. # 坦克生命值,默认为100点生命值
  17. health = 100
  18. # 敌人列表,用于存储敌人对象
  19. enemies = []
  20. # 坦克初始位置和大小,位置为(350,550),大小为50x50像素
  21. tank = pygame.Rect(350, 550, 50, 50)
  22. # 子弹列表,用于存储子弹对象
  23. bullets = []
  24. # 基地初始位置和大小,位置为(380,580),大小为100x100像素
  25. base = pygame.Rect(380, 580, 100, 100)
  26. # 基地生命值,默认为100点生命值
  27. base_health = 100
  28. # 敌人生成间隔,单位为帧数
  29. enemies_spawn_rate = 20
  30. # 敌人移动速度,单位为像素/帧
  31. enemy_speed = 5
  32. # 子弹飞行速度,单位为像素/帧
  33. bullet_speed = 20
  34. # 子弹半径,单位为像素,用于碰撞检测
  35. bullet_radius = 5
  36. # 子弹颜色为红色
  37. bullet_color = (255, 0, 0)
  38. # 子弹发射间隔,单位为帧数
  39. bullet_cooldown = 20
  40. # 第一种敌人图像文件名 注释:指定敌人图像的文件名,用于在游戏中加载敌人图像。
  41. enemy_type1 = "enemy1.png"
  42. # 敌人类型2对应的图像文件名
  43. enemy_type2 = "enemy2.png"
  44. # 敌人类型3对应的图像文件名
  45. enemy_type3 = "enemy3.png"
  46. # 子弹的初始位置为坦克的中心
  47. bullet_spawn_x = tank.centerx
  48. bullet_spawn_y = tank.centery
  49. # 第一种敌人的攻击力,被第一种敌人击中减少10点生命值
  50. enemy_damage1 = 10
  51. # 第二种敌人的攻击力,被第二种敌人击中减少20点生命值
  52. enemy_damage2 = 20
  53. # 第三种敌人的攻击力,被第三种敌人击中减少30点生命值
  54. enemy_damage3 = 30
  55. # 游戏主循环
  56. while not game_over:
  57. # 处理退出游戏事件
  58. for event in pygame.event.get():
  59. if event.type == pygame.QUIT:
  60. game_over = True
  61. # 获取玩家输入
  62. keys = pygame.key.get_pressed()
  63. if keys[pygame.K_LEFT] and tank.left > 0:
  64. tank.move_ip(-5, 0)
  65. if keys[pygame.K_RIGHT] and tank.right < WINDOW_WIDTH:
  66. tank.move_ip(5, 0)
  67. if keys[pygame.K_SPACE] and len(bullets) < 5:
  68. bullets.append(tank.copy())
  69. bullets[-1].x += tank.width // 2 - bullet_radius
  70. bullets[-1].y += tank.height // 2 - bullet_radius
  71. bullets[-1].speed_y = -bullet_speed
  72. # 更新子弹位置和消除过期子弹
  73. for bullet in bullets[:]:
  74. bullet.move_ip(0, bullet.speed_y)
  75. if bullet.top < 0 or bullet.bottom > WINDOW_HEIGHT:
  76. bullets.remove(bullet)
  77. bullets[:] = [bullet for bullet in bullets if bullet not in enemies]
  78. # 生成敌人
  79. enemy_spawn = random.randint(0, enemies_spawn_rate)
  80. if enemy_spawn == 0:
  81. enemy_type = random.choice([enemy_type1, enemy_type2, enemy_type3])
  82. enemies.append(pygame.Rect(random.randint(0, WINDOW_WIDTH - 50), random.randint(-200, -100), 50, 50))
  83. enemies[-1].speed_y = enemy_speed
  84. enemies[-1].type = enemy_type
  85. # 更新敌人位置和消除过期敌人
  86. for enemy in enemies[:]:
  87. enemy.move_ip(0, enemy.speed_y)
  88. if enemy.bottom > WINDOW_HEIGHT:
  89. enemies.remove(enemy)
  90. 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)]]
  91. # 检查碰撞和伤害
  92. for bullet in bullets:
  93. for enemy in enemies:
  94. if pygame.Rect(bullet).colliderect(enemy):
  95. bullets.remove(bullet)
  96. enemies.remove(enemy)
  97. score += 10 + enemy.type[7:] if enemy in enemies[:len(enemies) // 2] else 10
  98. break # 如果子弹击中敌人,则从子弹列表和敌人列表中移除该子弹和敌人,并增加分数。同时跳出循环,继续检查其他子弹。
  99. if base in [bullet for bullet in bullets if pygame.Rect(bullet).colliderect(enemy)]:
  100. bullets.remove(bullet)
  101. enemies.remove(enemy)
  102. score += 10 + enemy.type[7:] if enemy in enemies[:len(enemies) // 2] else 10
  103. break # 如果基地被敌人击中,则从子弹列表和敌人列表中移除该子弹和敌人,并增加分数。同时跳出循环,继续检查其他敌人。
  104. # 绘制游戏画面
  105. screen.fill((0, 0, 0))
  106. pygame.draw.rect(screen, (255, 0, 0), pygame.Rect(tank.left, tank.top, tank.width, tank.height)) # 绘制坦克
  107. pygame.draw.rect(screen, (0, 255, 0), pygame.Rect(base.left, base.top, base.width, base.height)) # 绘制基地
  108. for bullet in bullets:
  109. pygame.draw.rect(screen, bullet_color, pygame.Rect(bullet.left, bullet.top, bullet.width, bullet.height)) # 绘制子弹
  110. for enemy in enemies:
  111. pygame.draw.rect(screen, (255, 255, 255), pygame.Rect(enemy.left, enemy.top, enemy.width, enemy.height)) # 绘制敌人
  112. pygame.display.update()
  113. # 控制游戏帧率
  114. clock.tick(60)
  115. # 游戏结束,退出游戏
  116. pygame.quit()

以上即是小游戏坦克大战的python代码,运行还需要安装pygame,感兴趣的伙伴可以试试。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/583872
推荐阅读
相关标签
  

闽ICP备14008679号