本文作为开发过程记录用。

目前游戏画面:

下一个添加的功能:敌机可以进行射击。

弹幕类

  1. from pygame.sprite import Sprite
  2. from pygame import transform
  3. import math
  4.  
  5. class Barrage(Sprite):
  6. def __init__(self,raiden_settings,screen,ship,enemy,angle=0):
  7. self.barrage_type = enemy.barrage_type
  8. self.screen = screen
  9. self.raiden_settings = raiden_settings
  10.  
  11. self.ship = ship
  12.  
  13. self.image = pygame.image.load(raiden_settings. \
  14. barrage_image[barrage_type-1])
  15.  
  16. self.rect = self.image.get_rect()
  17.  
  18. self.rect.x = enemy.rect.x
  19. self.rect.y = enemy.rect.y
  20.  
  21. self.x = float(self.rect.x)
  22. self.y = float(self.rect.y)
  23.  
  24. self.angle = angle
  25.  
  26. if self.barrage_type == 1:
  27. self.image = pygame.transform.rotate(self.image,
  28. raiden_settings.direction_angle)
  29.  
  30. def update(self):
  31. if self.barrage_type == 1 or self.barrage_type == 2:
  32. self.x += self.raiden_settings.barrage_speed_factor * \
  33. math.sin(self.angle)
  34. self.y += self.raiden_settings.barrage_speed_factor * \
  35. math.cos(self.angle)
  36. if self.barrage_type == 3:
  37. tmp = ((self.x - self.ship.x) ** 2 + (self.y -self.ship.y) \
  38. ** 2) ** 0.5
  39. self.x += self.raiden_settings.barrage_speed_factor * \
  40. (self.ship.x - self.x)/tmp
  41. self.y += self.raiden_settings.barrage_speed_factor * \
  42. (self.y - self.ship.y)/tmp
  43. self.rect.x = self.x
  44. self.rect.y = self.y

子弹类

  1. import pygame
  2. from pygame.sprite import Sprite
  3. import math
  4. from pygame import transform
  5.  
  6. class Bullet(Sprite):
  7. def __init__(self,raiden_settings,screen,ship,angle):
  8. super().__init__()
  9. self.screen = screen
  10. self.image = pygame.image.load(raiden_settings.bullet_image)
  11. self.image = pygame.transform.rotate(self.image,angle)
  12. self.rect = self.image.get_rect()
  13. self.rect.centerx = ship.rect.centerx
  14. self.rect.top = ship.rect.top
  15.  
  16. self.y = float(self.rect.y)
  17. self.x = float(self.rect.x)
  18.  
  19. self.angle = angle
  20. self.speed_factor = raiden_settings.bullet_speed_factor
  21.  
  22. def update(self):
  23. self.y -=self.speed_factor * math.cos(self.angle)
  24. self.x +=self.speed_factor * math.sin(self.angle)
  25. self.rect.y = self.y
  26. self.rect.x = self.x
  27.  
  28. def draw_bullet(self):
  29. pygame.draw.rect(self.screen,self.color,self.rect)

按钮类

  1. import pygame.font
  2.  
  3. class Button():
  4.  
  5. def __init__(self,raiden_settings,screen,msg):
  6. self.screen = screen
  7. self.screen_rect = screen.get_rect()
  8.  
  9. self.width = raiden_settings.button_width
  10. self.height = raiden_settings.button_height
  11. self.button_color = raiden_settings.button_color
  12. self.text_color = raiden_settings.button_text_color
  13. self.font = pygame.font.SysFont(None,
  14. raiden_settings.button_font_size)
  15.  
  16. self.rect = pygame.Rect(0,0,self.width,self.height)
  17. self.rect.center = self.screen_rect.center
  18.  
  19. self.prep_msg(msg)
  20.  
  21. def prep_msg(self,msg):
  22. self.msg_image = self.font.render(msg,True,self.text_color,
  23. self.button_color)
  24. self.msg_image_rect = self.msg_image.get_rect()
  25. self.msg_image_rect.center = self.rect.center
  26.  
  27. def draw_button(self):
  28. self.screen.fill(self.button_color,self.rect)
  29. self.screen.blit(self.msg_image,self.msg_image_rect)

掉落物类

  1. import pygame
  2. from pygame.sprite import Sprite
  3.  
  4. class DropItem(Sprite):
  5. def __init__(self,raiden_settings,screen,enemy,ship):
  6. super().__init__()
  7. self.screen = screen
  8. self.raiden_settings = raiden_settings
  9. self.image = pygame.image.load( \
  10. raiden_settings.dropitem_image[ship.arms_level - 1]). \
  11. convert_alpha()
  12. self.rect = self.image.get_rect()
  13. self.rect.centerx = enemy.rect.centerx
  14. self.rect.top = enemy.rect.bottom
  15. self.y = self.rect.y
  16. self.speed_factor = raiden_settings.dropitem_speed_factor
  17. self.level = ship.arms_level + 1
  18.  
  19. def update(self):
  20. self.y +=self.speed_factor
  21. self.rect.y = self.y
  22.  
  23. def draw_dropitem(self):
  24. self.screen.blit(self.image,self.rect)

敌机类

  1. import pygame
  2. from pygame.sprite import Sprite
  3. from pygame import transform
  4. from random import randint
  5.  
  6. class Enemy(Sprite):
  7.  
  8. def __init__(self,raiden_settings,screen):
  9. super().__init__()
  10. self.screen = screen
  11. self.raiden_settings = raiden_settings
  12. self.enemy_type = randint(1,3)
  13.  
  14. self.image = pygame.image.load(raiden_settings. \
  15. enemy_image[self.enemy_type - 1]).convert_alpha()
  16. self.image = transform.smoothscale(self.image,
  17. raiden_settings.enemy_image_rect)
  18. self.image = pygame.transform.rotate(self.image,
  19. raiden_settings.direction_angle)
  20. self.rect = self.image.get_rect()
  21.  
  22. self.x = float(self.rect.x)
  23. self.y = float(self.rect.y)
  24.  
  25. self.barrage_type = self.enemy_type
  26.  
  27. self.set_enemy_rect()
  28.  
  29. def blitme(self):
  30. self.screen.blit(self.image,self.rect)
  31.  
  32. def update(self):
  33. # ~ self.x += (self.raiden_settings.enemy_speed_factor *
  34. # ~ self.raiden_settings.fleet_direction)
  35. # ~ self.rect.x = self.x
  36. if self.enemy_type == 1:
  37. self.y += self.raiden_settings.enemy_speed_factor
  38. if self.enemy_type == 2:
  39. if self.x < 100 :
  40. self.x += self.raiden_settings.enemy_speed_factor
  41. elif self.x >self.screen.get_rect().right - 100:
  42. self.x -= self.raiden_settings.enemy_speed_factor
  43. if self.enemy_type == 3:
  44. if self.x <= self.screen.get_rect().right:
  45. self.x += self.raiden_settings.enemy_speed_factor
  46. else:
  47. self.x -= self.raiden_settings.enemy_speed_factor
  48. self.y += self.raiden_settings.enemy_speed_factor
  49.  
  50. self.rect.x = self.x
  51. self.rect.y = self.y
  52.  
  53. def check_edges(self):
  54. screen_rect = self.screen.get_rect()
  55. if self.rect.right >= screen_rect.right:
  56. return True
  57. elif self.rect.left <= 0:
  58. return True
  59.  
  60. def set_enemy_rect(self):
  61. if self.enemy_type == 1:
  62. self.x = randint(0,self.screen.get_rect().width)
  63. self.y = 0
  64. elif self.enemy_type == 2:
  65. self.y = 200
  66. if randint(1,2) == 1:
  67. self.x = 0
  68. else:
  69. self.x = self.screen.get_rect().right
  70. elif self.enemy_type == 3:
  71. self.y = randint(0,300)
  72. if randint(1,2) == 1:
  73. self.x = 0
  74. else:
  75. self.x = self.screen.get_rect().right
  76. self.rect.x = self.x
  77. self.rect.y = self.y

游戏内功能函数类

  1. import sys
  2. import pygame
  3.  
  4. from Bullet import Bullet
  5. from Enemy import Enemy
  6. from time import sleep
  7. from dropitem import DropItem
  8. from random import random
  9. from barrage import Barrage
  10.  
  11. #检查输入
  12. def check_events(raiden_settings,screen,stats,ship,enemys,bullets,
  13. play_button,sprites):
  14. for event in pygame.event.get():
  15. if event.type == pygame.QUIT:
  16. sys.exit()
  17. elif event.type == pygame.KEYDOWN:
  18. check_keydown_event(event,raiden_settings,screen,ship,
  19. bullets,sprites)
  20. elif event.type == pygame.KEYUP:
  21. check_keyup_event(event,ship)
  22. elif event.type == pygame.MOUSEBUTTONDOWN:
  23. mouse_x,mouse_y = pygame.mouse.get_pos()
  24. check_play_button(raiden_settings,stats,screen,play_button,
  25. mouse_x,mouse_y)
  26. elif event.type == pygame.USEREVENT:
  27. create_enemy(raiden_settings,screen,enemys,sprites)
  28.  
  29. #更新屏幕
  30. def update_screen(screen,stats,play_button,sprites):
  31. if not stats.game_active:
  32. play_button.draw_button()
  33. else:
  34. updates = sprites.draw(screen)
  35. pygame.display.update(updates)
  36. pygame.display.flip()
  37.  
  38. #检查按下输入
  39. def check_keydown_event(event,raiden_settings,screen,ship,bullets,
  40. sprites):
  41. if event.key == pygame.K_d:
  42. ship.moving_right = True
  43. elif event.key == pygame.K_a:
  44. ship.moving_left = True
  45. elif event.key == pygame.K_SPACE:
  46. fire_bullet(raiden_settings,screen,ship,bullets,sprites)
  47. elif event.key == pygame.K_w:
  48. ship.moving_up = True
  49. elif event.key == pygame.K_s:
  50. ship.moving_down = True
  51. elif event.key == pygame.K_q:
  52. sys.exit()
  53.  
  54. #检查放开输入
  55. def check_keyup_event(event,ship):
  56. if event.key == pygame.K_d:
  57. ship.moving_right = False
  58. elif event.key == pygame.K_a:
  59. ship.moving_left = False
  60. elif event.key == pygame.K_w:
  61. ship.moving_up = False
  62. elif event.key == pygame.K_s:
  63. ship.moving_down = False
  64.  
  65. #更新子弹
  66. def update_bullets(raiden_settings,screen,stats,ship,enemys,bullets,
  67. dropitems,scoreboard,sprites):
  68. for bullet in bullets.copy():
  69. if bullet.rect.bottom <=0 or bullet.rect.x <= 0 or \
  70. bullet.rect.x >= raiden_settings.screen_width:
  71. bullets.remove(bullet)
  72. collisions = pygame.sprite.groupcollide(bullets,enemys,True,True)
  73. if collisions:
  74. enemy_hit(raiden_settings,screen,stats,ship,enemys,dropitems,
  75. scoreboard,collisions,sprites)
  76.  
  77. #敌人被击中
  78. def enemy_hit(raiden_settings,screen,stats,ship,enemys,dropitems,
  79. scoreboard,collisions,sprites):
  80. for bullet,enemy_list in collisions.items():
  81. stats.score += raiden_settings.score_up_factor
  82. scoreboard.prep_score()
  83. scoreboard.show_score()
  84. if check_drop(raiden_settings):
  85. for enemy in enemy_list:
  86. new_dropitem = DropItem(raiden_settings,screen,enemy,
  87. ship)
  88. dropitems.add(new_dropitem)
  89. sprites.add(new_dropitem)
  90.  
  91. #更新掉落物
  92. def update_dropitems(raiden_settings,screen,stats,ship,dropitems,
  93. sprites):
  94. for dropitem in dropitems.copy():
  95. if dropitem.rect.bottom <= 0:
  96. sprites.remove(dropitem)
  97. dropitems.remove(dropitem)
  98. collision = pygame.sprite.spritecollideany(ship,dropitems)
  99. if collision:
  100. sprites.remove(collision)
  101. dropitems.remove(collision)
  102. if collision.level == ship.arms_level + 1:
  103. ship.update_arms()
  104.  
  105. #开火
  106. def fire_bullet(raiden_settings,screen,ship,bullets,sprites):
  107. bullet_list = []
  108. if ship.arms_level == raiden_settings.arms_1_level:
  109. bullet_list.append(Bullet(raiden_settings,screen,ship,
  110. raiden_settings.vertical_angle))
  111. elif ship.arms_level == raiden_settings.arms_2_level:
  112. bullet_list.append(Bullet(raiden_settings,screen,ship,
  113. raiden_settings.left_deflectical_angle))
  114. bullet_list.append(Bullet(raiden_settings,screen,ship,
  115. raiden_settings.right_deflectical_angle))
  116. elif ship.arms_level == raiden_settings.arms_3_level:
  117. bullet_list.append(Bullet(raiden_settings,screen,ship,
  118. raiden_settings.vertical_angle))
  119. bullet_list.append(Bullet(raiden_settings,screen,ship,
  120. raiden_settings.left_deflectical_angle))
  121. bullet_list.append(Bullet(raiden_settings,screen,ship,
  122. raiden_settings.right_deflectical_angle))
  123. elif ship.arms_level == raiden_settings.arms_4_level:
  124. bullet_list.append(Bullet(raiden_settings,screen,ship,
  125. raiden_settings.vertical_angle))
  126. bullet_list.append(Bullet(raiden_settings,screen,ship,
  127. raiden_settings.left_deflectical_angle))
  128. bullet_list.append(Bullet(raiden_settings,screen,ship,
  129. raiden_settings.right_deflectical_angle))
  130. bullet_list.append(Bullet(raiden_settings,screen,ship,
  131. raiden_settings.left_horizontal_angle))
  132. bullet_list.append(Bullet(raiden_settings,screen,ship,
  133. raiden_settings.right_horizontal_angle))
  134. for bullet in bullet_list:
  135. bullets.add(bullet)
  136. sprites.add(bullet)
  137.  
  138. #创建敌人
  139. def create_enemy(raiden_settings,screen,enemys,sprites):
  140. enemy = Enemy(raiden_settings,screen)
  141. enemys.add(enemy)
  142. sprites.add(enemy)
  143.  
  144. def update_enemys(raiden_settings,stats,lifeboard,screen,ship,enemys,
  145. bullets,sprites):
  146. if pygame.sprite.spritecollideany(ship,enemys):
  147. ship_hit(raiden_settings,stats,lifeboard,screen,ship,enemys,
  148. bullets,sprites)
  149.  
  150. #玩家被击中
  151. def ship_hit(raiden_settings,stats,lifeboard,screen,ship,enemys,
  152. bullets,sprites):
  153. if stats.ships_left > 0:
  154. stats.ships_left -= 1
  155. ship.reset_ship()
  156. lifeboard.dead(stats,sprites)
  157. reset_game(raiden_settings,screen,ship,enemys,bullets,sprites)
  158. sleep(1)
  159. else:
  160. stats.game_active = False
  161. pygame.mouse.set_visible(False)
  162. stats.ship_left = raiden_settings.ship_init_life
  163. stats.score = 0
  164. stats.reset_stats()
  165. ship.reset_ship()
  166. reset_game(raiden_settings,screen,ship,enemys,bullets,sprites)
  167. pygame.mouse.set_visible(True)
  168. lifeboard.dead(stats,sprites)
  169.  
  170. #重置游戏
  171. def reset_game(raiden_settings,screen,ship,enemys,bullets,sprites):
  172. for enemy in enemys:
  173. sprites.remove(enemy)
  174. enemys.empty()
  175. for bullet in bullets:
  176. sprites.remove(bullet)
  177. bullets.empty()
  178. sprites.clear(screen,clear_callback)
  179. ship.center_ship()
  180.  
  181. #检查玩家是否点击play按钮
  182. def check_play_button(raiden_settings,stats,screen,play_button,
  183. mouse_x,mouse_y):
  184. if play_button.rect.collidepoint(mouse_x,mouse_y) and not \
  185. stats.game_active:
  186. stats.game_active = True
  187. pygame.mouse.set_visible(False)
  188. screen.fill(raiden_settings.bg_color)
  189.  
  190. #是否掉落物品
  191. def check_drop(raiden_settings):
  192. if random() < raiden_settings.chance:
  193. return True
  194. else:
  195. return False
  196.  
  197. #检查掉落物是否到达屏幕底
  198. def check_dropitem_bottom(raiden_settings,stats,screen,dropitems):
  199. screen_rect = screen.get_rect()
  200. for dropitem in dropitems.sprite():
  201. if dropitem.rect.bottom >= screen_rect.bottom:
  202. dropitems.remove(dropitem)
  203.  
  204. #清除子图形
  205. def clear_callback(surf, rect):
  206. bg = 255,255,255
  207. surf.fill(bg, rect)

生命值记录板类

  1. from pygame.sprite import Sprite
  2. from pygame.sprite import Group
  3. from Ship import Ship
  4. from pygame import transform
  5.  
  6. class Lifeboard(Sprite):
  7.  
  8. def __init__(self,raiden_settings,screen,stats,sprites):
  9. super().__init__()
  10. self.stats = stats
  11. self.screen = screen
  12. self.rect = screen.get_rect()
  13. self.raiden_settings = raiden_settings
  14. self.ships = Group()
  15. self.ship_list = []
  16. self.prep_ships()
  17.  
  18. for ship in self.ships:
  19. sprites.add(ship)
  20. ship.image = transform.smoothscale(ship.image,
  21. raiden_settings.lifeboard_image_rect)
  22.  
  23. def prep_ships(self):
  24. for ship_number in range(self.stats.ships_left):
  25. ship = Ship(self.raiden_settings,self.screen)
  26. ship.center = self.raiden_settings.lifeboard_ship_center + \
  27. ship_number * self.raiden_settings. \
  28. lifeboard_ship_center_growth
  29. ship.bottom = self.raiden_settings.lifeboard_ship_bottom
  30. self.ships.add(ship)
  31. self.ship_list.append(ship)
  32.  
  33. def dead(self,stats,sprites):
  34. self.ships.remove(self.ship_list[-1])
  35. sprites.remove(self.ship_list[-1])
  36. del self.ship_list[-1]

游戏类(主程序)

  1. import sys
  2. import pygame
  3.  
  4. from Settings import Settings
  5. from Ship import Ship
  6. import game_functions as gf
  7. from pygame.sprite import Group
  8. from Enemy import Enemy
  9. from GameStats import GameStats
  10. from Button import Button
  11. from Scoreboard import Scoreboard
  12. from Lifeboard import Lifeboard
  13.  
  14. def run_game():
  15. pygame.init()
  16. raiden_settings = Settings()
  17. screen = pygame.display.set_mode((raiden_settings.screen_width,
  18. raiden_settings.screen_height))
  19.  
  20. EVENT_CREATE_ENEMY = pygame.USEREVENT
  21. pygame.time.set_timer(EVENT_CREATE_ENEMY,300)
  22.  
  23. pygame.display.set_caption("Raiden")
  24. play_button = Button(raiden_settings,screen,"Play!")
  25. ship = Ship(raiden_settings,screen)
  26. bullets = Group()
  27. enemys = Group()
  28. dropitems = Group()
  29. sprites = pygame.sprite.RenderUpdates()
  30. stats = GameStats(raiden_settings)
  31. scoreboard = Scoreboard(raiden_settings,screen,stats)
  32. lifeboard = Lifeboard(raiden_settings,screen,stats,sprites)
  33. screen.fill(raiden_settings.bg_color)
  34. sprites.add(ship)
  35. sprites.add(scoreboard)
  36.  
  37. while True:
  38. gf.check_events(raiden_settings,screen,stats,ship,enemys,
  39. bullets,play_button,sprites)
  40. if stats.game_active:
  41. sprites.clear(screen,gf.clear_callback)
  42. sprites.update()
  43. gf.update_bullets(raiden_settings,screen,stats,ship,enemys,
  44. bullets,dropitems,scoreboard,sprites)
  45. gf.update_dropitems(raiden_settings,screen,stats,ship,
  46. dropitems,sprites)
  47. gf.update_enemys(raiden_settings,stats,lifeboard,screen,
  48. ship,enemys,bullets,sprites)
  49. gf.update_screen(screen,stats,play_button,sprites)
  50.  
  51. run_game()

计分板类

  1. import pygame.font
  2. from pygame.sprite import Sprite
  3. from pygame.sprite import Group
  4.  
  5. from Ship import Ship
  6.  
  7. class Scoreboard(Sprite):
  8. def __init__(self,raiden_settings,screen,stats):
  9. super().__init__()
  10. self.screen = screen
  11. self.screen_rect = screen.get_rect()
  12. self.raiden_settings = raiden_settings
  13. self.stats = stats
  14.  
  15. self.text_color = raiden_settings.scoreboard_text_color
  16. self.font = pygame.font.SysFont(None,
  17. raiden_settings.scoreboard_font_size)
  18.  
  19. self.prep_score()
  20.  
  21. def prep_score(self):
  22. score_str = str(self.stats.score)
  23. self.image = self.font.render(score_str,True,
  24. self.text_color,self.raiden_settings.bg_color)
  25.  
  26. self.rect = self.image.get_rect()
  27. self.rect.right = self.screen_rect.right
  28. self.rect.top = 0
  29.  
  30. def show_score(self):
  31. self.screen.blit(self.image,self.rect)

常数类

  1. import math
  2.  
  3. class Settings():
  4. def __init__(self):
  5. #屏幕设置
  6. self.screen_width = 300
  7. self.screen_height = 600
  8. self.bg_color = (255,255,255)
  9. #飞行速度设置
  10. self.ship_speed_factor = 0.3
  11. self.enemy_speed_factor = 0.3
  12. self.fleet_drop_speed = 8
  13. self.enemy_speed_up_factor = 0.1
  14. self.bullet_speed_factor = 0.7
  15. self.barrage_speed_factor = 0.7
  16. #飞行方向设置
  17. self.fleet_direction = 1
  18. #生命值
  19. self.ship_init_life = 3
  20. #分数设置
  21. self.score_up_factor = 10
  22. #掉落物设置
  23. self.dropitem_speed_factor = 0.1
  24. #掉落指数设置
  25. self.chance = 0.5
  26. #武器等级设置
  27. self.init_arms_level = 1
  28. self.max_arms_level = 4
  29. self.arms_1_level = 1
  30. self.arms_2_level = 2
  31. self.arms_3_level = 3
  32. self.arms_4_level = 4
  33. #角度
  34. self.vertical_angle = 0
  35. self.right_deflectical_angle = math.pi/6
  36. self.left_deflectical_angle = -math.pi/6
  37. self.left_horizontal_angle = -math.pi/2
  38. self.right_horizontal_angle = math.pi/2
  39. self.direction_angle = 180
  40. self.angle_left_10 = -10
  41. self.angle_right_10 = 10
  42. #图片位置
  43. self.enemy_image = [
  44. 'image/enemy1.png',
  45. 'image/enemy2.png',
  46. 'image/enemy3.png',
  47. ]
  48.  
  49. self.ship_image = 'image/9.png'
  50. self.bullet_image = 'image/bullet.png'
  51. self.dropitem_image = [
  52. 'image/dropitem1.png',
  53. 'image/dropitem2.png',
  54. 'image/dropitem3.png',
  55. 'image/dropitem4.png',
  56. ]
  57. self.barrage_image = [
  58. 'image\barrage1.png',
  59. 'image\barrage2.png',
  60. 'image\barrage3.png',
  61. ]
  62. #enemy图片大小
  63. self.enemy_image_rect = (30,30)
  64. #lifeboard图片大小
  65. self.lifeboard_image_rect = (30,30)
  66. #ship图片大小
  67. self.ship_image_rect = (50,50)
  68. #计分板字体颜色
  69. self.scoreboard_text_color = (30,30,30)
  70. #计分板字体大小
  71. self.scoreboard_font_size = 48
  72. #计分板位置
  73. self.lifeboard_ship_center = 25
  74. self.lifeboard_ship_bottom = 50
  75. self.lifeboard_ship_center_growth = 15
  76. #button设置
  77. self.button_text_color = (255,255,255)
  78. self.button_color = (0,255,0)
  79. self.button_width = 200
  80. self.button_height = 50
  81. self.button_font_size = 48

飞船类

  1. import pygame
  2. from Settings import Settings
  3. from pygame.sprite import Sprite
  4. from pygame import transform
  5.  
  6. class Ship(Sprite):
  7.  
  8. def __init__(self,raiden_settings,screen):
  9. super().__init__()
  10. self.screen = screen
  11. self.raiden_settings = raiden_settings
  12.  
  13. self.image = pygame.image.load(raiden_settings.ship_image). \
  14. convert_alpha()
  15. self.image = transform.smoothscale(self.image,
  16. raiden_settings.ship_image_rect)
  17. self.rect = self.image.get_rect()
  18. self.screen_rect = screen.get_rect()
  19.  
  20. self.rect.centerx = self.screen_rect.centerx
  21. self.rect.bottom = self.screen_rect.bottom
  22.  
  23. self.arms_level = raiden_settings.init_arms_level
  24.  
  25. self.center = float(self.rect.centerx)
  26. self.bottom = float(self.rect.bottom)
  27.  
  28. self.moving_right = False
  29. self.moving_left = False
  30. self.moving_up = False
  31. self.moving_down = False
  32.  
  33. def update(self):
  34. if self.moving_right and self.rect.right < \
  35. self.screen_rect.right:
  36. self.center += self.raiden_settings.ship_speed_factor
  37. if self.moving_left and self.rect.left > 0:
  38. self.center -= self.raiden_settings.ship_speed_factor
  39. if self.moving_up and self.rect.top > 0:
  40. self.bottom -=self.raiden_settings.ship_speed_factor
  41. if self.moving_down and self.rect.bottom < \
  42. self.screen_rect.bottom:
  43. self.bottom +=self.raiden_settings.ship_speed_factor
  44.  
  45. self.rect.centerx = self.center
  46. self.rect.bottom = self.bottom
  47.  
  48. def blitme(self):
  49. self.screen.blit(self.image,self.rect)
  50.  
  51. def center_ship(self):
  52. self.center = self.screen_rect.centerx
  53.  
  54. def update_arms(self):
  55. if self.arms_level < self.raiden_settings.max_arms_level:
  56. self.arms_level += 1
  57.  
  58. def reset_ship(self):
  59. self.rect.centerx = self.screen_rect.centerx
  60. self.rect.bottom = self.screen_rect.bottom
  61. self.center = self.screen_rect.centerx
  62. self.bottom = self.screen_rect.bottom
  63. self.arms_level = self.raiden_settings.init_arms_level

游戏内部记录类

  1. class GameStats():
  2. def __init__(self,raiden_settings):
  3. self.raiden_settings = raiden_settings
  4. self.reset_stats()
  5. self.game_active = False
  6. self.score = 0
  7.  
  8. def reset_stats(self):
  9. self.ships_left = self.raiden_settings.ship_init_life

使用pygame开发一个弹幕射击游戏(一)的更多相关文章

  1. pygame开发滑雪者游戏

    pygame开发滑雪者游戏 一.实验说明 下述介绍为实验楼默认环境,如果您使用的是定制环境,请修改成您自己的环境介绍. 1. 环境登录 无需密码自动登录,系统用户名 shiyanlou,该用户具备 s ...

  2. 基于pygame的一个小游戏

    class GameStats(): """跟踪游戏的统计信息""" #def __int__(self, ai_settings): de ...

  3. 【h5-egret】如何快速开发一个小游戏

    1.环境搭建 安装教程传送门:http://edn.egret.com/cn/index.php?g=&m=article&a=index&id=207&terms1_ ...

  4. Pygame:编写一个小游戏 标签: pythonpygame游戏 2017-06-20 15:06 103人阅读 评论(0)

    大学最后的考试终于结束了,迎来了暑假和大四的漫长的"自由"假期.当然要自己好好"玩玩"了. 我最近在学习Python,本意是在机器学习深度学习上使用Python ...

  5. Swift - 跑酷游戏开发(SpriteKit游戏开发)

    一,下面演示了如何开发一个跑酷游戏,实现的功能如下: 1,平台工厂会不断地生成平台,并且向左移动.当平台移出游戏场景时就可将其移除. 2,生成的平台宽度随机,高度随机.同时短平台踩踏的时候会下落. 3 ...

  6. 使用pygame制作一个简单的游戏

    翻译自Will McGugan的<Beginning Game Development with Python and Pygame –From Novice to Professional&g ...

  7. 如何开发一个简单的HTML5 Canvas 小游戏

    原文:How to make a simple HTML5 Canvas game 想要快速上手HTML5 Canvas小游戏开发?下面通过一个例子来进行手把手教学.(如果你怀疑我的资历, A Wiz ...

  8. Unity3D游戏开发初探—4.开发一个“疯狂击箱子”游戏

    一.预备知识—对象的”生“与”死“ (1)如何在游戏脚本程序中创建对象而不是一开始就创建好对象?->使用GameObject的静态方法:CreatePrimitive() 以上一篇的博文中的“指 ...

  9. pygame开发PC端微信打飞机游戏

    pygame开发PC端微信打飞机游戏 一.项目简介 1. 介绍 本项目类似曾经火爆的微信打飞机游戏.游戏将使用Python语言开发,主要用到pygame的API.游戏最终将会以python源文件gam ...

随机推荐

  1. tomcat访问日志关闭

    在tomcat(实例)路径下[conf/server.xml]中修改,以下节点(注释掉该节点): tomcat catalina.out日志关闭 在tomcat(主目录)路径下[bin/catalin ...

  2. 2、Tensorflow中的变量

    2.Tensorflow中的变量注意:tf中使用 变量必须先初始化下面是一个使用变量的TF代码(含注释): # __author__ = "WSX" import tensorfl ...

  3. Application received signal SIGABRT

    Application received signal SIGABRT (null) (( 0 CoreFoundation 0x0000000182bbadc8 <redacted> + ...

  4. 【webservice】Two classes have the same XML type name(转)

    引言 需要调用另一个系统的提供的webservice接口,但是调用之后总是报错,用SoapUI测试接口却没有问题: 那就应该是代码的问题了,但是同样的代码也调用过其他系统却没有问题,不过最终还是解决了 ...

  5. python大作业-图书管理系统

    #缺少循环执行和错误处理 #add()函数 添加了循环执行 #错误处理:regist()函数 登录和退出选择的时候添加了错误处理 import sys import importlib importl ...

  6. python学习之路---day20--面向对象--多继承和super() 函数

    一:python多继承 python多继承中,当一个类继承了多个父类时候,这个类拥有多个父类的所欲非私有的属性 l例子: class A: pass class B(A): pass class C( ...

  7. c3m快速入门

  8. 51Nod-1259-整数划分 V2

    51Nod-1259-整数划分 V2 将N分为若干个整数的和,有多少种不同的划分方式,例如:n = 4,{4} {1,3} {2,2} {1,1,2} {1,1,1,1},共5种.由于数据较大,输出M ...

  9. Apache Shiro(五)-登录认证和权限管理ssm

    创建一个web动态项目 jar包 web.xml web.xml做了如下几件事情1. 指定spring的配置文件有两个 applicationContext.xml: 用于链接数据库的 applica ...

  10. vue点击tab跳转页面,给点击的tab添加样式,且解决刷新以后点击的tab样式消失问题

    <ul class="nij"> <li v-for="item in nav" @click="selectNav(item.ti ...