当前位置:
首页 > Python基础教程 >
-
手把手教你用Python实现“坦克大战”,附详细代码!(2)
EnemyTank(left, 20, self.window)
27 TankGame.enemy_tank_list.append(enemy_tank)
28
29 def creat_walls(self):
30 for i in range(SCREEN_WIDTH // 60 + 1):
31 wall_h = random.randint(100, 500)
32 w = Wall(60 * i, wall_h, self.window)
33 TankGame.wall_list.append(w)
34
35 @staticmethod
36 def show_walls():
37 for w in TankGame.wall_list:
38 if w.live:
39 w.display_wall()
40 else:
41 TankGame.wall_list.remove(w)
42
43 def start_game(self):
44 load_music( start )
45 while True:
46 self.window.fill([0, 0, 0])
47 self.get_event()
48 len_enemy = len(TankGame.enemy_tank_list)
49 self.window.blit(
50 self.draw_text( 敌方坦克*{0},我方生命值*{1},当前{2}关 .format(len_enemy, self.my_tank_lift, self.number)), (10, 10))
51 if len_enemy == 0:
52 self.creat_enemy_number += 10
53 self.number += 1
54 self.my_tank_lift += 1
55 self.creat_enemy(self.creat_enemy_number)
56 self.wall_list.clear()
57 self.creat_walls()
58 self.show_my_tank()
59 self.show_enemy_tank()
60 self.show_bullet(TankGame.enemy_bullet_list)
61 self.show_bullet(TankGame.my_bullet_list)
62 self.show_walls()
63 self.display.update()
64 time.sleep(0.02)
65
66 def show_my_tank(self):
67 if self.my_tank.live:
68 self.my_tank.display()
69 self.my_tank.tank_collide_tank()
70 self.my_tank.tank_collide_wall()
71 else:
72 Explode(self.my_tank, self.window).display_explode()
73 del self.my_tank
74 if self.my_tank_lift == 0:
75 self.end_game()
76 self.my_tank_lift -= 1
77 load_music( add )
78 self.my_tank = MyTank(MY_BIRTH_LEFT, MY_BIRTH_TOP, self.window)
79 if not self.my_tank.move_stop:
80 self.my_tank.move(self.my_tank.direction)
81
82 def show_enemy_tank(self):
83 for e in TankGame.enemy_tank_list:
84 e.random_move()
85 e.tank_collide_wall()
86 if e.live:
87 e.display()
88 else:
89 TankGame.enemy_tank_list.remove(e)
90 Explode(e, self.window).display_explode()
91 e.random_fire()
92
93 def show_bullet(self, ls):
94 for b in ls:
95 b.bullet_move()
96 b.bullet_collide_wall()
97 if ls is TankGame.my_bullet_list:
98 b.hit_enemy_tank()
99 b.bullet_collide_bullet()
100 else:
101 b.hit_my_tank(self.my_tank)
102 if b.live:
103 b.display_bullet()
104 else:
105 ls.remove(b)
106
107 def get_event(self):
108 global SCREEN_WIDTH, SCREEN_HEIGHT
109 event_list = pygame.event.get()
110 for event in event_list:
111 if event.type == pygame.VIDEORESIZE:
112 SCREEN_WIDTH, SCREEN_HEIGHT = event.size
113 self.window = self.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT], pygame.RESIZABLE, 32)
114
115 if event.type == pygame.QUIT:
116 self.end_game()
117 if event.type == pygame.KEYDOWN:
118 if event.key == pygame.K_w:
119 self.my_tank.direction = U
120 elif event.key == pygame.K_s:
121 self.my_tank.direction = D
122 elif event.key == pygame.K_a:
123 self.my_tank.direction = L
124 elif event.key == pygame.K_d:
125 self.my_tank.direction = R
126 else:
127 return None
128 self.my_tank.move_stop = False
129 elif event.type == pygame.MOUSEBUTTONDOWN:
130 if len(TankGame.my_bullet_list) < 3:
131 bullet = self.my_tank.fire()
132 load_music( fire )
133 TankGame.my_bullet_list.append(bullet)
134 elif event.type == pygame.KEYUP:
135 self.my_tank.move_stop = True
136
137 def end_game(self):
138 self.display.quit()
139 sys.exit()
140
141 def draw_text(self, content):
142 text_sf = self.font.render(content, True, [255, 0, 0])
143 return text_sf

10. 入口
1if __name__ == __main__ :
2 g = TankGame()
3 g.start_game()
执行界面
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式