当前位置:   article > 正文

手把手教学,Python 游戏编程之实现飞机大战(含源代码)_python飞机大战

python飞机大战

前言

我想大家都是有玩过类似飞机大战的射击类游戏,也享受目标被消除通过后带来的愉悦感。

那么如果用Python来实现飞机大战游戏?

下面就跟大家一起用Python来做一个小游戏,不仅可以从中感受到乐趣,还可以提升自己的能力。


一、游戏设定

1、游戏界面展示和设定

游戏的基本设定:

  • 敌方共有大中小3款飞机,分为高中低三种速度;

  • 子弹的射程并非全屏,而大概是屏幕长度的80%;

  • 消灭小飞机需要1发子弹,中飞机需要8发,大飞机需要20发子弹;

  • 每消灭一架小飞机得1000分,中飞机6000分,大飞机10000分;

  • 每隔30秒有一个随机的道具补给,分为两种道具,全屏炸弹和双倍子弹;

  • 全屏炸弹最多只能存放3枚,双倍子弹可以维持18秒钟的效果;

  • 游戏将根据分数来逐步提高难度,难度的提高表现为飞机数量的增多以及速度的加快。


二、实现过程

1.我方飞机

首先创建一个myplane. py模块来定义我方飞机:

  1. import pygame
  2. class MyPlane(pygame.sprite.Sprite):
  3. def __init__(self, bg_size):
  4. pygame.sprite.Sprite.__init__(self)
  5. self.image1 = pygame.image.load("images/me1.png").convert_alpha()
  6. self.image2 = pygame.image.load("images/me2.png").convert_alpha()
  7. self.destroy_images = []
  8. self.destroy_images.extend([\
  9. pygame.image.load("images/me_destroy_1.png").convert_alpha(), \
  10. pygame.image.load("images/me_destroy_2.png").convert_alpha(), \
  11. pygame.image.load("images/me_destroy_3.png").convert_alpha(), \
  12. pygame.image.load("images/me_destroy_4.png").convert_alpha() \
  13. ])
  14. self.rect = self.image1.get_rect()
  15. self.width, self.height = bg_size[0], bg_size[1]
  16. self.rect.left, self.rect.top = \
  17. (self.width - self.rect.width) // 2, \
  18. self.height - self.rect.height - 60
  19. self.speed = 10
  20. self.active = True
  21. self.invincible = False
  22. self.mask = pygame.mask.from_surface(self.image1)
  23. # 分别定义moveUp()、moveDown()、moveLeft()和moveRight()控制我方飞机上、下、左、右移动:
  24. def moveUp(self):
  25. if self.rect.top > 0:
  26. self.rect.top -= self.speed
  27. else:
  28. self.rect.top = 0
  29. def moveDown(self):
  30. if self.rect.bottom < self.height - 60:
  31. self.rect.top += self.speed
  32. else:
  33. self.rect.bottom = self.height - 60
  34. def moveLeft(self):
  35. if self.rect.left > 0:
  36. self.rect.left -= self.speed
  37. else:
  38. self.rect.left = 0
  39. def moveRight(self):
  40. if self.rect.right < self.width:
  41. self.rect.left += self.speed
  42. else:
  43. self.rect.right = self.width
  44. def reset(self):
  45. self.rect.left, self.rect.top = \
  46. (self.width - self.rect.width) // 2, \
  47. self.height - self.rect.height - 60
  48. self.active = True
  49. self.invincible = True

2、敌方飞机

敌机分为小、中、大三个尺寸,它们的速度依次是快、中、慢,在游戏界面的上方位置创造位置随机的敌机,可以让它们不在同一排出现。将敌机的定义写在enemy. py模块中:

  1. import pygame
  2. from random import *
  3. class SmallEnemy(pygame.sprite.Sprite):
  4. def __init__(self, bg_size):
  5. pygame.sprite.Sprite.__init__(self)
  6. self.image = pygame.image.load("images/enemy1.png").convert_alpha()
  7. self.destroy_images = []
  8. self.destroy_images.extend([ \
  9. pygame.image.load("images/enemy1_down1.png").convert_alpha(), \
  10. pygame.image.load("images/enemy1_down2.png").convert_alpha(), \
  11. pygame.image.load("images/enemy1_down3.png").convert_alpha(), \
  12. pygame.image.load("images/enemy1_down4.png").convert_alpha() \
  13. ])
  14. self.rect = self.image.get_rect()
  15. self.width, self.height = bg_size[0], bg_size[1]
  16. self.speed = 2
  17. self.active = True
  18. self.rect.left, self.rect.top = \
  19. randint(0, self.width - self.rect.width), \
  20. randint(-5 * self.height, 0)
  21. self.mask = pygame.mask.from_surface(self.image)
  22. def move(self):
  23. if self.rect.top < self.height:
  24. self.rect.top += self.speed
  25. else:
  26. self.reset()
  27. def reset(self):
  28. self.active = True
  29. self.rect.left, self.rect.top = \
  30. randint(0, self.width - self.rect.width), \
  31. randint(-5 * self.height, 0)
  32. class MidEnemy(pygame.sprite.Sprite):
  33. energy = 8
  34. def __init__(self, bg_size):
  35. pygame.sprite.Sprite.__init__(self)
  36. self.
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/105406
推荐阅读
相关标签
  

闽ICP备14008679号