小時候玩的「坦克大戰」,你還記得嗎?python
滿滿的回憶git
!app
今天,咱們使用Python以及強大的第三方庫來實現一個簡單的坦克大戰遊戲。
dom
總體效果ide
環境依賴函數
pygame介紹
Pygame被設計用來寫遊戲的python模塊集合,基於SDL庫開發。使用python能夠導入pygame來開發具備所有特性的遊戲和多媒體軟件,Pygame是極度輕便的而且能夠運行在幾乎全部的平臺和操做系統上。
1. 導入依賴 & 通用配置
2. 通用加載函數
3. 通用基礎類
4. 定義bullet類
5. 定義tank類
6. 定義我方 & 對方tank類
1class MyTank(Tank):
2 def __init__(self, left, top, window):
3 self.img = dict(U=load_img( p2tankU ), D=load_img( p2tankD ), L=load_img( p2tankL ), R=load_img( p2tankR ))
4 self.my_tank_speed = 4
5 super().__init__(left, top, window, self.img, U, self.my_tank_speed)
6
7
8class EnemyTank(Tank):
9 def __init__(self, left, top, window):
10 self.img1 = dict(U=load_img( enemy1U ), D=load_img( enemy1D ), L=load_img( enemy1L ), R=load_img( enemy1R ))
11 self.img2 = dict(U=load_img( enemy2U ), D=load_img( enemy2D ), L=load_img( enemy2L ), R=load_img( enemy2R ))
12 self.img3 = dict(U=load_img( enemy3U ), D=load_img( enemy3D ), L=load_img( enemy3L ), R=load_img( enemy3R ))
13 self.img31 = dict(U=load_img( enemy3U_1 ), D=load_img( enemy3D_1 ), L=load_img( enemy3L_1 ),
14 R=load_img( enemy3R_1 ))
15 self.img32 = dict(U=load_img( enemy3U_2 ), D=load_img( enemy3D_2 ), L=load_img( enemy3L_2 ),
16 R=load_img( enemy3R_2 ))
17 # 不一樣的坦克擊中的次數不同
18 image, self.click_count, speed = random.choice([(self.img1, 1, 4), (self.img3, 3, 3), (self.img2, 1, 5)])
19 super().__init__(left, top, window, image, self.random_direction(), speed)
20 self.step = 100
21
22 @staticmethod
23 def random_direction():
24 n = random.randint(0, 3)
25 return DIRECTION[n]
26
27 def random_move(self):
28 if self.step == 0:
29 self.direction = self.random_direction()
30 self.step = random.randint(10, 100)
31 else:
32 self.move(self.direction)
33 self.step -= 1
34
35 def random_fire(self):
36 if random.randint(0, 50) == 1 and len(TankGame.enemy_bullet_list) < 30:
37 enemy_bullet = self.fire()
38 TankGame.enemy_bullet_list.append(enemy_bullet)
7. 爆炸動做類
8. 定義wall類
9. 定義坦克大戰類
10. 入口
執行界面