当前位置:   article > 正文

pygame 赛亚人打怪

pygame 赛亚人打怪

笔者最近学了一点pygame,献丑了。

代码附上,大佬勿喷!

  1. import random
  2. import time
  3. import pygame
  4. WIDTH = 410
  5. HEIGHT = 750
  6. ENEMY_BORN = pygame.USEREVENT + 1
  7. BULLET_BORN = pygame.USEREVENT + 10
  8. ENEMY_BULLET_BORN = pygame.USEREVENT + 100
  9. REWARD_BORN = pygame.USEREVENT + 1000
  10. class AudioManage:
  11. # @staticmethod
  12. # def play_bg_music():
  13. # pygame.mixer.music.load("../素材/素材1/game.mp3")
  14. # # pygame.mixer.music.set_volume(0.1)#设置声音大小
  15. # pygame.mixer.music.play(loops=True)
  16. @staticmethod
  17. def bg_music():
  18. pygame.mixer.music.load("../素材/素材1/bg.wav")
  19. pygame.mixer.music.play(loops=True)
  20. @staticmethod
  21. def play_sound(name):
  22. sound_play = pygame.mixer.Sound(f"../素材/素材1/{name}")
  23. sound_play.play()
  24. @staticmethod
  25. def end_sound(name):
  26. sound_end = pygame.mixer.Sound(f"../素材/素材1/{name}")
  27. sound_end.play()
  28. @staticmethod
  29. def bullet_sound(name):
  30. sound_bullet = pygame.mixer.Sound(f"../素材/素材1/{name}")
  31. sound_bullet.play()
  32. @staticmethod
  33. def gui_sound(name):
  34. sound_gui = pygame.mixer.Sound(f"../素材/素材1/{name}")
  35. sound_gui.play()
  36. @staticmethod
  37. def bianshen_sound(name):
  38. sound_bianshen = pygame.mixer.Sound(f"../素材/素材1/{name}")
  39. sound_bianshen.play()
  40. @staticmethod
  41. def attack_sound(name):
  42. sound_attack = pygame.mixer.Sound(f"../素材/素材1/{name}")
  43. sound_attack.play()
  44. @staticmethod
  45. def add_life_sound(name):
  46. sound_add_life = pygame.mixer.Sound(f"../素材/素材1/{name}")
  47. sound_add_life.play()
  48. @staticmethod
  49. def get_sound(name):
  50. sound_get = pygame.mixer.ound(f"../素材/素材1/{name}")
  51. sound_get.play()
  52. @staticmethod
  53. def enemy_hurt_sound(name):
  54. sound_enemy_hurt = pygame.mixer.Sound(f"../素材/素材1/{name}")
  55. sound_enemy_hurt.play()
  56. @staticmethod
  57. def success_sound(name):
  58. success_get = pygame.mixer.Sound(f"../素材/素材1/{name}")
  59. success_get.play()
  60. class BaseSprite(pygame.sprite.Sprite):
  61. def __init__(self, image_name):
  62. super().__init__()
  63. self.image = pygame.image.load(image_name).convert_alpha()
  64. self.rect = self.image.get_rect()
  65. class EnemySprite(BaseSprite):
  66. def __init__(self, image_name, start_x, destroy_images, gm, speed=7, hp=3):
  67. super().__init__(image_name)
  68. self.rect.left = start_x
  69. self.speed = speed
  70. self.gm = gm
  71. self.max_hp = self.hp = hp
  72. self.rect.top = 0
  73. self.current_index = 0
  74. self.destroy_images = [pygame.image.load(destroy_image) for destroy_image in destroy_images]
  75. def hurt(self):
  76. if self.gm.bullet_manage.bullet_type == 1:
  77. self.hp -= 1
  78. elif self.gm.bullet_manage.bullet_type == "u":
  79. self.hp -= 3
  80. elif self.gm.bullet_manage.bullet_type == "i":
  81. self.hp -= 3
  82. def update(self):
  83. pygame.draw.rect(self.image, "red", (0, 0, self.rect.width, 5))
  84. pygame.draw.rect(self.image, "green", (0, 0, self.rect.width * self.hp / self.max_hp, 5))
  85. self.rect.top += self.speed
  86. if self.rect.top > HEIGHT:
  87. self.kill()
  88. if self.hp <= 0:
  89. self.image = self.destroy_images[self.current_index // 5]
  90. self.current_index += 1
  91. if self.current_index == len(self.destroy_images) * 5:
  92. self.kill()
  93. class EnemyManage:
  94. def __init__(self, gm):
  95. self.gm = gm
  96. self.enemy_group = pygame.sprite.Group()
  97. def born(self):
  98. image_name = random.choice(
  99. ["../素材/素材1/guai1.png", "../素材/素材1/guai2.png", "../素材/素材1/guai3.png",
  100. "../素材/素材1/guai4.png"])
  101. start_x = random.randint(0, WIDTH - 100)
  102. self.enemy = EnemySprite(image_name, start_x,
  103. ["../素材/素材1/enemy_baozha1.png", "../素材/素材1/enemy_baozha2.png"], self.gm)
  104. self.enemy.add(self.enemy_group)
  105. def clear(self):
  106. self.enemy_group.empty()
  107. def update(self):
  108. self.enemy_group.draw(self.gm.screen)
  109. self.enemy_group.update()
  110. class RewardSprite(BaseSprite):
  111. def __init__(self, image_name, start_x, gm, speed=7):
  112. self.image_name = image_name
  113. super().__init__(image_name)
  114. self.rect.left = start_x
  115. self.speed = speed
  116. self.gm = gm
  117. self.rect.top = 0
  118. self.is_use()
  119. def is_use(self):
  120. if self.image_name == "../素材/素材1/life.png":
  121. self.use = "add_life"
  122. if self.image_name == "../素材/素材1/zidan2_reward.png":
  123. self.use = "zidan2_reward"
  124. if self.image_name == "../素材/素材1/zidan3_reward.png":
  125. self.use = "zidan3_reward"
  126. def update(self):
  127. self.rect.top += self.speed
  128. if self.rect.top > HEIGHT:
  129. self.kill()
  130. class RewardManage:
  131. def __init__(self, gm):
  132. self.gm = gm
  133. self.reward_group = pygame.sprite.Group()
  134. def born(self):
  135. image_name = random.choice(
  136. ["../素材/素材1/life.png", "../素材/素材1/zidan2_reward.png", "../素材/素材1/zidan3_reward.png"])
  137. start_x = random.randint(0, WIDTH - 50)
  138. self.reward = RewardSprite(image_name, start_x, self.gm)
  139. self.reward.add(self.reward_group)
  140. def clear(self):
  141. self.reward_group.empty()
  142. def update(self):
  143. self.reward_group.draw(self.gm.screen)
  144. self.reward_group.update()
  145. class EnemyBulletSprite(BaseSprite):
  146. def __init__(self, image_name, enemy_pos, bullet_speed=15):
  147. super().__init__(image_name)
  148. self.rect.center = enemy_pos
  149. self.bullet_speed = bullet_speed
  150. def update(self):
  151. self.rect.bottom += self.bullet_speed
  152. if self.rect.bottom > HEIGHT:
  153. self.kill()
  154. class EnemyBulletManage:
  155. def __init__(self, gm):
  156. self.gm = gm
  157. self.enemy_bullet_group = pygame.sprite.Group()
  158. self.last_enemy_bullet_time = pygame.time.get_ticks()
  159. def born(self):
  160. current_time = pygame.time.get_ticks()
  161. if current_time - self.last_enemy_bullet_time > 1500: # 每隔 1 秒生成一个敌人子弹
  162. for enemy in self.gm.enemy_manage.enemy_group:
  163. enemy_bullet = EnemyBulletSprite("../素材/素材1/enemy_zidan.png", enemy.rect.center)
  164. self.enemy_bullet_group.add(enemy_bullet)
  165. self.last_enemy_bullet_time = current_time
  166. def clear(self):
  167. self.enemy_bullet_group.empty()
  168. def update(self):
  169. self.enemy_bullet_group.draw(self.gm.screen)
  170. self.enemy_bullet_group.update()
  171. class PlayerSprite(BaseSprite):
  172. def __init__(self, image_name, change_images, player_speed=10):
  173. super().__init__(image_name)
  174. self.rect.center = (WIDTH / 2, HEIGHT - 150)
  175. self.player_speed = player_speed
  176. self.current_index = 0
  177. self.change_images = [pygame.image.load(change_image) for change_image in change_images]
  178. self.animation_speed = 5
  179. def update(self):
  180. key_pressed = pygame.key.get_pressed()
  181. if key_pressed[pygame.K_SPACE]:
  182. self.current_index += self.animation_speed
  183. if self.current_index >= len(self.change_images) * self.animation_speed:
  184. self.current_index = 0
  185. else:
  186. self.current_index = 0
  187. self.image = self.change_images[self.current_index // self.animation_speed]
  188. if key_pressed[pygame.K_LEFT] or key_pressed[pygame.K_a]:
  189. self.rect.left -= self.player_speed
  190. if self.rect.left < 0:
  191. self.rect.left = 0
  192. if key_pressed[pygame.K_RIGHT] or key_pressed[pygame.K_d]:
  193. self.rect.right += self.player_speed
  194. if self.rect.right > WIDTH:
  195. self.rect.right = WIDTH
  196. if key_pressed[pygame.K_UP] or key_pressed[pygame.K_w]:
  197. self.rect.top -= self.player_speed
  198. if self.rect.top < 0:
  199. self.rect.top = 0
  200. if key_pressed[pygame.K_DOWN] or key_pressed[pygame.K_s]:
  201. self.rect.bottom += self.player_speed
  202. if self.rect.bottom > HEIGHT:
  203. self.rect.bottom = HEIGHT
  204. class PlayerManage:
  205. def __init__(self, gm):
  206. self.gm = gm
  207. self.player_group = pygame.sprite.Group()
  208. def born(self):
  209. # if self.gm.bullet_manage.bullet_type == "1":
  210. self.player = PlayerSprite("../素材/素材1/wukong1.png",
  211. [f"../素材/素材1/wukong{i}.png" for i in range(1, 6)])
  212. self.player_group.add(self.player)
  213. # if self.gm.bullet_manage.bullet_type == "u":
  214. # self.player = PlayerSprite("../素材/素材1/11111.png",
  215. # [f"../素材/素材1/11111.png"])
  216. # self.player_group.add(self.player)
  217. def die(self):
  218. self.player.kill()
  219. def update(self):
  220. self.player_group.draw(self.gm.screen)
  221. self.player_group.update()
  222. class BulletSprite(BaseSprite):
  223. def __init__(self, image_name, bullet_speed=30):
  224. super().__init__(image_name)
  225. self.bullet_speed = bullet_speed
  226. self.rect = self.image.get_rect()
  227. def update(self):
  228. self.rect.top -= self.bullet_speed
  229. if self.rect.top < 0:
  230. self.kill()
  231. class BulletManage:
  232. def __init__(self, gm):
  233. self.gm = gm
  234. self.bullet_group = pygame.sprite.Group()
  235. self.last_bullet_time = pygame.time.get_ticks()
  236. self.bullets = pygame.sprite.Group()
  237. self.bullet_type = 1
  238. self.bullet_type2_num = 10
  239. self.bullet_group = pygame.sprite.Group()
  240. self.bullet_type3_time = 3
  241. self.current_index = 0
  242. def change_bullet_type(self, bullet_type):
  243. self.bullet_type = bullet_type
  244. if bullet_type == "u":
  245. self.bullet_type2_num = 10
  246. if bullet_type == "i":
  247. self.bullet_type3_time = 3
  248. def born(self):
  249. if self.bullet_type == 1:
  250. current_time = pygame.time.get_ticks()
  251. if current_time - self.last_bullet_time > 150:
  252. self.bullet = BulletSprite("../素材/素材1/zidan.png")
  253. self.bullet.rect.center = self.gm.player_manage.player.rect.center
  254. self.bullet.add(self.bullet_group)
  255. self.last_bullet_time = current_time
  256. elif self.bullet_type == "u":
  257. current_time = pygame.time.get_ticks()
  258. if current_time - self.last_bullet_time > 150:
  259. AudioManage.bianshen_sound("bianshen.mp3")
  260. # self.gm.player = PlayerSprite("../素材/素材1/11111.png", ["../素材/素材1/11111.png"])
  261. # self.gm.player.rect.center = self.gm.player_manage.player.rect.center
  262. # self.gm.player.add(self.gm.player_group)
  263. self.bullet = BulletSprite("../素材/素材1/zidan2.png")
  264. self.bullet.rect.center = self.gm.player_manage.player.rect.center
  265. self.bullet.add(self.bullet_group)
  266. self.last_bullet_time = current_time
  267. self.bullet_type2_num -= 1
  268. if self.bullet_type2_num == 0:
  269. self.change_bullet_type(1)
  270. elif self.bullet_type == "i":
  271. if self.bullet_type3_time >= 0:
  272. self.bullet = BulletSprite("../素材/素材1/zidan3.png")
  273. AudioManage.gui_sound("gui.mp3")
  274. self.bullet.rect.center = (
  275. self.gm.player_manage.player.rect.centerx, self.gm.player_manage.player.rect.centery - 310)
  276. self.bullet.add(self.bullet_group)
  277. if self.bullet_type3_time <= 0:
  278. self.change_bullet_type(1)
  279. def clear(self):
  280. self.bullet_group.empty()
  281. def update(self):
  282. self.bullet_type3_time -= 1 / 30
  283. self.bullet_group.draw(self.gm.screen)
  284. self.bullet_group.update()
  285. class BgSprite(BaseSprite):
  286. def __init__(self, image_name, start_y, speed=5):
  287. super().__init__(image_name)
  288. self.rect.top = start_y
  289. self.speed = speed
  290. def update(self):
  291. self.rect.top += self.speed
  292. if self.rect.top >= HEIGHT:
  293. self.rect.top = -HEIGHT
  294. class BgManage:
  295. def __init__(self, gm):
  296. self.gm = gm
  297. self.ready_group = pygame.sprite.Group()
  298. self.bg0 = BgSprite("../素材/素材1/bgnight.jpg", 0, 0)
  299. self.bg0.add(self.ready_group)
  300. self.gaming_group = pygame.sprite.Group()
  301. self.bg1 = BgSprite("../素材/素材1/bgnight.jpg", 0, 5)
  302. self.bg1.add(self.gaming_group)
  303. self.bg2 = BgSprite("../素材/素材1/bgnight.jpg", -HEIGHT, 5)
  304. self.bg2.add(self.gaming_group)
  305. self.end_group = pygame.sprite.Group()
  306. self.bg3 = BgSprite("../素材/素材1/bgnight.jpg", 0, 0)
  307. self.bg3.add(self.end_group)
  308. self.next_group = pygame.sprite.Group()
  309. self.bg4 = BgSprite("../素材/素材1/success.jpg", 0, 0)
  310. self.bg4.add(self.next_group)
  311. def update(self):
  312. if self.gm.game_state == "ready":
  313. self.ready_group.draw(self.gm.screen)
  314. self.ready_group.update()
  315. elif self.gm.game_state == "gaming":
  316. self.gaming_group.draw(self.gm.screen)
  317. self.gaming_group.update()
  318. elif self.gm.game_state == "next":
  319. self.next_group.draw(self.gm.screen)
  320. self.next_group.update()
  321. elif self.gm.game_state == "end":
  322. self.end_group.draw(self.gm.screen)
  323. self.end_group.update()
  324. class UISprite(BaseSprite):
  325. def __init__(self, image_name, center):
  326. super().__init__(image_name)
  327. self.rect.center = center
  328. def is_collide(self):
  329. mouse_pos = pygame.mouse.get_pos()
  330. if self.rect.collidepoint(mouse_pos):
  331. return True
  332. class GIFSprite(BaseSprite):
  333. def __init__(self, image_names):
  334. super().__init__(image_names[0])
  335. self.rect.center = (80, 80)
  336. self.images = [pygame.image.load(image_name) for image_name in image_names]
  337. self.current_index = 0
  338. def update(self):
  339. self.current_index += 1
  340. if self.current_index == len(self.images) * 2:
  341. self.current_index = 0
  342. self.image = self.images[self.current_index // 2]
  343. self.image = pygame.transform.scale(self.image, (80, 80))
  344. class UIManage:
  345. def __init__(self, gm, life_number=3):
  346. self.gm = gm
  347. self.ready_group = pygame.sprite.Group()
  348. self.start_btn1 = UISprite("../素材/素材1/choice1.png", (WIDTH / 2 - 100, HEIGHT / 2 + 80))
  349. self.start_btn1.add(self.ready_group)
  350. self.start_btn2 = UISprite("../素材/素材1/choice2.png", (WIDTH / 2, HEIGHT / 2 + 80))
  351. self.start_btn2.add(self.ready_group)
  352. self.start_btn3 = UISprite("../素材/素材1/choice3.png", (WIDTH / 2 + 100, HEIGHT / 2 + 80))
  353. self.start_btn3.add(self.ready_group)
  354. self.life_number = life_number
  355. self.feng_group = pygame.sprite.Group()
  356. self.feng = UISprite("../素材/素材1/title.jpg", (WIDTH / 2, HEIGHT / 2 - 180))
  357. self.feng.add(self.feng_group)
  358. self.gaming_group = pygame.sprite.Group()
  359. self.head_img = GIFSprite([f"../素材/素材1/{i}.png" for i in range(1, 73)])
  360. self.head_img.image = pygame.transform.scale(self.head_img.image, (80, 80))
  361. self.bullet_img = BulletSprite("../素材/飞机大战/zidan.png")
  362. self.bullet_img.add(self.gaming_group)
  363. self.head_img.add(self.gaming_group)
  364. self.font = pygame.font.Font("../素材/font/simhei.ttf", size=30)
  365. self.life_label = self.font.render(f"X{self.life_number}", True, "red")
  366. self.score_value = 0
  367. self.font = pygame.font.Font("../素材/font/simhei.ttf", size=30)
  368. self.score_label = self.font.render(f"Score:{self.score_value}", True, "red")
  369. self.next_group = pygame.sprite.Group()
  370. self.next_btn = UISprite("../素材/素材1/continue.jpg", (WIDTH / 2, HEIGHT - 170))
  371. self.next_btn.add(self.next_group)
  372. self.end_group = pygame.sprite.Group()
  373. self.restart_btn = UISprite("../素材/赛车/end.png", (WIDTH / 2, HEIGHT - 400))
  374. self.restart_btn.add(self.end_group)
  375. def down_life(self):
  376. self.life_number -= 1
  377. self.life_label = self.font.render(f"X{self.life_number}", True, "red")
  378. def add_life(self):
  379. self.life_number += 1
  380. self.life_label = self.font.render(f"X{self.life_number}", True, "red")
  381. def add_score(self):
  382. self.score_value += 1
  383. self.score_label = self.font.render(f"Score:{self.score_value}", False, "red")
  384. def update(self):
  385. if self.gm.game_state == "ready":
  386. self.feng_group.draw(self.gm.screen)
  387. self.ready_group.draw(self.gm.screen)
  388. self.ready_group.update()
  389. self.life_number = 3
  390. elif self.gm.game_state == "gaming":
  391. self.gaming_group.draw(self.gm.screen)
  392. self.gaming_group.update()
  393. self.gm.screen.blit(self.score_label, (250, 60))
  394. self.gm.screen.blit(self.life_label, (120, 60))
  395. elif self.gm.game_state == "next":
  396. self.next_group.draw(self.gm.screen)
  397. self.next_group.update()
  398. self.score_value = 0
  399. self.life_number = 3
  400. elif self.gm.game_state == "end":
  401. self.end_group.draw(self.gm.screen)
  402. self.end_group.update()
  403. self.gm.screen.blit(self.score_label, (WIDTH / 2 - 55, HEIGHT / 2 - 100))
  404. def check_click(self):
  405. if self.gm.game_state == "ready":
  406. if self.start_btn1.is_collide():
  407. self.gm.game_state = "gaming"
  408. self.gm.player_manage.born()
  409. pygame.time.set_timer(ENEMY_BORN, 2000)
  410. pygame.time.set_timer(REWARD_BORN, 4000)
  411. if self.start_btn2.is_collide():
  412. self.gm.game_state = "gaming"
  413. self.gm.player_manage.born()
  414. pygame.time.set_timer(ENEMY_BORN, 1500)
  415. pygame.time.set_timer(REWARD_BORN, 6000)
  416. if self.start_btn3.is_collide():
  417. self.gm.game_state = "gaming"
  418. self.gm.player_manage.born()
  419. pygame.time.set_timer(ENEMY_BORN, 1000)
  420. pygame.time.set_timer(REWARD_BORN, 8000)
  421. elif self.gm.game_state == "gaming":
  422. self.gm.player_manage.born()
  423. elif self.gm.game_state == "end":
  424. if self.restart_btn.is_collide():
  425. self.gm.game_state = "ready"
  426. elif self.next_btn.is_collide():
  427. self.gm.game_state = "ready"
  428. class GameManage:
  429. def __init__(self):
  430. pygame.init()
  431. pygame.display.set_caption("悟空打怪")
  432. self.screen = pygame.display.set_mode((WIDTH, HEIGHT))
  433. self.clock = pygame.time.Clock()
  434. AudioManage.bg_music()
  435. self.game_state = "ready"
  436. self.ui_manage = UIManage(self)
  437. self.bg_manage = BgManage(self)
  438. self.enemy_manage = EnemyManage(self)
  439. self.player_manage = PlayerManage(self)
  440. self.player_group = pygame.sprite.Group()
  441. self.bullet_manage = BulletManage(self)
  442. self.enemy_bullet_manage = EnemyBulletManage(self)
  443. self.reward_manage = RewardManage(self)
  444. self.ui_manage.score_value = 0
  445. self.bullet_manage.clear()
  446. self.enemy_manage.clear()
  447. self.enemy_bullet_manage.clear()
  448. def check_event(self):
  449. for event in pygame.event.get():
  450. if event.type == pygame.QUIT:
  451. pygame.quit()
  452. exit()
  453. if event.type == pygame.KEYUP:
  454. if event.key == pygame.K_SPACE:
  455. self.bullet_manage.born()
  456. AudioManage.bullet_sound("bullet.mp3")
  457. if event.type == pygame.KEYUP:
  458. if self.game_state == "gaming":
  459. if event.key == pygame.K_u:
  460. self.bullet_manage.change_bullet_type("u")
  461. if event.key == pygame.K_i:
  462. self.bullet_manage.change_bullet_type("i")
  463. if event.type == pygame.MOUSEBUTTONUP:
  464. self.ui_manage.check_click()
  465. if event.type == ENEMY_BORN:
  466. self.enemy_manage.born()
  467. if event.type == REWARD_BORN:
  468. self.reward_manage.born()
  469. def update_draw(self):
  470. self.screen.fill("grey")
  471. self.bg_manage.update()
  472. self.ui_manage.update()
  473. if self.game_state == "gaming":
  474. self.enemy_manage.update()
  475. self.player_manage.update()
  476. self.bullet_manage.update()
  477. self.enemy_bullet_manage.update()
  478. self.enemy_bullet_manage.born()
  479. self.reward_manage.update()
  480. # 控制激光一直发射
  481. if self.bullet_manage.bullet_type == "i":
  482. self.bullet_manage.born()
  483. if self.ui_manage.score_value == 10:
  484. self.game_state = "next"
  485. pygame.time.set_timer(ENEMY_BORN, 0)
  486. pygame.time.set_timer(REWARD_BORN, 0)
  487. AudioManage.success_sound("success.mp3")
  488. self.ui_manage.score_value = 0
  489. self.ui_manage.score_label = self.ui_manage.font.render(f"Score:{self.ui_manage.score_value}", True,
  490. "red")
  491. self.ui_manage.life_value = 3
  492. self.ui_manage.life_label = self.ui_manage.font.render(f"X{self.ui_manage.life_value}", True,
  493. "red")
  494. self.bullet_manage.clear()
  495. self.player_manage.die()
  496. self.enemy_manage.clear()
  497. self.enemy_bullet_manage.clear()
  498. if self.game_state == "end":
  499. pygame.time.set_timer(ENEMY_BORN, 0)
  500. pygame.time.set_timer(REWARD_BORN, 0)
  501. self.ui_manage.score_value = 0
  502. self.ui_manage.score_label = self.ui_manage.font.render(f"Score:{self.ui_manage.score_value}", True, "red")
  503. self.ui_manage.life_value = 3
  504. self.ui_manage.life_label = self.ui_manage.font.render(f"X{self.ui_manage.life_value}", True,
  505. "red")
  506. pygame.display.flip()
  507. def check_collide(self):
  508. # 检测玩家与奖励道具的碰撞
  509. s1 = pygame.sprite.spritecollide(self.player_manage.player, self.reward_manage.reward_group, False)
  510. if s1:
  511. for s11 in s1:
  512. if s11.use == "add_life":
  513. self.ui_manage.add_life()
  514. AudioManage.play_sound("add_life.mp3")
  515. s11.kill()
  516. if s11.use == "zidan2_reward":
  517. AudioManage.play_sound("get.mp3")
  518. self.bullet_manage.change_bullet_type("u")
  519. s11.kill()
  520. if s11.use == "zidan3_reward":
  521. AudioManage.play_sound("get.mp3")
  522. self.bullet_manage.change_bullet_type("i")
  523. s11.kill()
  524. # 检测敌人子弹与玩家的碰撞
  525. collided_enemy_bullet = pygame.sprite.spritecollide(self.player_manage.player,
  526. self.enemy_bullet_manage.enemy_bullet_group, True)
  527. if collided_enemy_bullet:
  528. self.ui_manage.down_life()
  529. AudioManage.play_sound("hurt.mp3")
  530. if self.ui_manage.life_number <= 0:
  531. self.game_state = "end"
  532. self.player_manage.die()
  533. self.enemy_manage.clear()
  534. self.bullet_manage.clear()
  535. AudioManage.end_sound("end.mp3")
  536. pygame.time.set_timer(ENEMY_BORN, 0)
  537. # 检测玩家子弹与敌人的碰撞
  538. if self.bullet_manage.bullet_type == 1 or self.bullet_manage.bullet_type == "u":
  539. d = pygame.sprite.groupcollide(self.bullet_manage.bullet_group, self.enemy_manage.enemy_group, True, False)
  540. if d:
  541. for enemy_s in d.values():
  542. for enemy in enemy_s:
  543. if enemy.hp > 0:
  544. AudioManage.enemy_hurt_sound("enemy_hurt.mp3")
  545. enemy.hurt()
  546. if enemy.hp <= 0:
  547. self.ui_manage.add_score()
  548. AudioManage.attack_sound("baozha.mp3")
  549. if self.bullet_manage.bullet_type == "i":
  550. d = pygame.sprite.groupcollide(self.bullet_manage.bullet_group, self.enemy_manage.enemy_group, False, True)
  551. if d:
  552. for enemy_s in d.values():
  553. for enemy in enemy_s:
  554. if enemy.hp > 0:
  555. enemy.hurt()
  556. if enemy.hp <= 0:
  557. self.ui_manage.add_score()
  558. AudioManage.attack_sound("baozha.mp3")
  559. # 检测玩家与敌人的碰撞
  560. r = pygame.sprite.spritecollide(self.player_manage.player, self.enemy_manage.enemy_group, True)
  561. if r:
  562. self.ui_manage.down_life()
  563. AudioManage.play_sound("hurt.mp3")
  564. if self.ui_manage.life_number <= 0:
  565. self.game_state = "end"
  566. self.player_manage.die()
  567. self.enemy_manage.clear()
  568. self.bullet_manage.clear()
  569. AudioManage.end_sound("end.mp3")
  570. pygame.time.set_timer(ENEMY_BORN, 0)
  571. pygame.time.set_timer(REWARD_BORN, 0)
  572. def run(self):
  573. while True:
  574. self.check_event()
  575. self.update_draw()
  576. self.clock.tick(30)
  577. if self.game_state == "gaming":
  578. self.check_collide()
  579. mg = GameManage()
  580. mg.run()

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

闽ICP备14008679号