赞
踩
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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。