python飞机大战源代码-python飞机大战源码和素材

1 importpygame2 from plane_sprites import *

3

4

5 classPlaneGame(object):6 """飞机大战主游戏"""

7

8 def __init__(self):9 print("游戏初始化")10

11 #1.创建游戏的窗口

12 self.screen =pygame.display.set_mode(SCREEN_RECT.size)13 #2.创建游戏的时钟

14 self.clock =pygame.time.Clock()15 #3.调用私有方法,精灵和精灵组的创建

16 self.__create_sprites()17

18 #4.设置定时器事件——创建敌机 1S

19 pygame.time.set_timer(CREATE_ENEMY_EVENT, 1000)20 pygame.time.set_timer(HERO_FIRE_EVENT, 500)21

22 #定义精灵和精灵组

23 def __create_sprites(self):24 #创建背景精灵和精灵组

25 bg1 =Background()26 bg2 =Background(True)27 #bg2起始位置在bg1的上方

28 #bg2.rect.y = -bg2.rect.height

29

30 self.back_group =pygame.sprite.Group(bg1, bg2)31

32 #创建敌机的精灵组

33 self.enemy_group =pygame.sprite.Group()34

35 #创建英雄的精灵和精灵组

36 self.hero =Hero()37 self.hero_group =pygame.sprite.Group(self.hero)38

39 #游戏循环

40 defstart_game(self):41 print("游戏开始...")42

43 whileTrue:44 #1.设置刷新帧率

45 self.clock.tick(FRAME_PER_SEC)46 #2.事件监听

47 self.__even_handler()48 #3.碰撞检测

49 self.__check_collide()50 #4.更新/绘制精灵组

51 self.__update_sprites()52 #5.更新屏幕显示

53 pygame.display.update()54

55 pass

56

57 #定义事件监听函数

58 def __even_handler(self):59 for event inpygame.event.get():60

61 #判断是否退出游戏

62 if event.type ==pygame.QUIT:63 PlaneGame.__game_over()64 elif event.type ==CREATE_ENEMY_EVENT:65 #print("敌机出场...")

66 #创建敌机精灵

67 enemy =Enemy()68

69 #将敌机精灵添加到敌机精灵组

70 self.enemy_group.add(enemy)71 elif event.type ==HERO_FIRE_EVENT:72 self.hero.fire()73 #直接判断键盘按键不能持续的获取按键事件

74 #elif event.type == pygame.KEYDOWN and event.type == pygame.K_RIGHT:

75 #print("向右移动...")

76

77 #使用键盘模块提供的方法获取键盘按键——键盘模块可以持续的获取键盘按键

78 keys_pressed =pygame.key.get_pressed()79 #判断元祖中对应的按键索引值

80 if keys_pressed[pygame.K_RIGHT] orkeys_pressed[pygame.K_d]:81 self.hero.rect.x += 2

82 elif keys_pressed[pygame.K_LEFT] orkeys_pressed[pygame.K_a]:83 self.hero.rect.x -= 2

84 elif keys_pressed[pygame.K_UP] orkeys_pressed[pygame.K_w]:85 self.hero.rect.y -= 2

86 elif keys_pressed[pygame.K_DOWN] orkeys_pressed[pygame.K_s]:87 self.hero.rect.y += 2

88 else:89 self.hero.speed =090

91 #定义碰撞检测

92 def __check_collide(self):93

94 #1.子弹摧毁敌机—— groupcollide可以判断两个精灵组之间是否碰撞

95 pygame.sprite.groupcollide(self.hero.bullets, self.enemy_group, True, True)96

97 #敌机撞毁英雄——spritecollide可以判断精灵和精灵组之间是否碰撞

98 enemies =pygame.sprite.spritecollide(self.hero, self.enemy_group, True)99

100 #判断列表是否有内容

101 if len(enemies) >0:102

103 #让英雄牺牲

104 self.hero.kill()105

106 #结束游戏

107 PlaneGame.__game_over()108

109 #定义精灵组调用update()和draw()方法实现屏幕更新

110 def __update_sprites(self):111

112 self.back_group.update()113 self.back_group.draw(self.screen)114 self.enemy_group.update()115 self.enemy_group.draw(self.screen)116 self.hero_group.update()117 self.hero_group.draw(self.screen)118 self.hero.bullets.update()119 self.hero.bullets.draw(self.screen)120

121 #游戏结束

122 @staticmethod123 def __game_over():124 print("游戏结束...")125

126 pygame.quit()127 exit()128

129

130 if __name__ == '__main__':131

132 #创建游戏对象

133 game =PlaneGame()134

135 #启动游戏

136 game.start_game()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值