环境:Ubuntu 16.04 LTS
Python 2.7.11 + Pygame + Pycharm
代码:
1 # -*- coding: UTF-8 -*-
2 import pygame, random
3 from sys import exit
4
5
6 class Plane:
7 def restart(self):
8 self.x = 200
9 self.y = 600
10
11 def __init__(self):
12 self.restart()
13 self.image = pygame.image.load(‘plane.png‘).convert_alpha()
14
15 def move(self):
16 x, y = pygame.mouse.get_pos()
17 x -= self.image.get_width() / 2
18 y -= self.image.get_height() / 2
19 self.x = x
20 self.y = y
21
22
23 class Enemy:
24 def start(self):
25 self.speed = random.random() + 0.1
26 self.x = random.randint(0, 450)
27 self.y = 0
28
29 def __init__(self):
30 self.start()
31 self.image = pygame.image.load(‘enemy.png‘).convert_alpha()
32
33 def move(self):
34 if self.y < 800:
35 self.y += self.speed
36 if self.y > 800:
37 self.start()
38
39
40 class Bullet:
41 def __init__(self):
42 self.x = 0
43 self.y = 0
44 self.image = pygame.image.load(‘bullet.png‘).convert_alpha()
45 self.active = False
46
47 def move(self):
48 if self.active:
49 self.y -= 3
50 if self.y < 0:
51 self.active = False
52
53 def start(self):
54 mouseX, mouseY = pygame.mouse.get_pos()
55 self.x = mouseX - self.image.get_width() / 2
56 self.y = mouseY - self.image.get_height() / 2
57 self.active = True
58
59
60 def Shoot(bullet, enemy):
61 if (bullet.x > enemy.x and bullet.x < enemy.x + enemy.image.get_width()) and bullet.y > enemy.y and (
62 bullet.y < enemy.y + enemy.image.get_height()):
63 bullet.active = False
64 enemy.start()
65 return True
66 else:
67 return False
68
69
70 def Crash(plane, enemy):
71 if (plane.x + 0.7 * plane.image.get_width() > enemy.x) and (
72 plane.x + 0.3 * plane.image.get_width() < enemy.x + enemy.image.get_width()) and (
73 plane.y + 0.7 * plane.image.get_height() > enemy.y) and (
74 plane.y + 0.3 * plane.image.get_height() < enemy.y + enemy.image.get_height()):
75 return True
76 else:
77 return False
78
79
80 pygame.init()
81 screen = pygame.display.set_mode((450, 800), 0, 32)
82 pygame.display.set_caption(‘World of plane craft‘)
83 bg = pygame.image.load(‘bg.jpg‘).convert_alpha()
86 bullet = Bullet()
87 bullets = []
88 for i in range(5):
89 bullets.append(bullet)
90 count_b = len(bullets)
91 index_b = 0
92 interval_b = 0
93
94 enemy = Enemy()
95 enemys = []
96 for i in range(5):
97 enemys.append(enemy)
98
99 plane = Plane()
100 gameover = False
101 score = 0
102 font = pygame.font.Font(None, 32)
103 while True:
104 for event in pygame.event.get():
105 if event.type == pygame.QUIT:
106 pygame.quit()
107 exit()
108 if gameover and event.type == pygame.MOUSEBUTTONUP:
109 plane.restart()
110 for e in enemys:
111 e.start()
112 for b in bullets:
113 b.active = False
114 score = 0
115 gameover = False
116 screen.blit(bg, (0, 0))
117 if not gameover:
118 interval_b -= 1
119 if interval_b < 0:
120 bullets[index_b].start()
121 interval_b = 100
122 index_b = (index_b + 1) % count_b
123 for b in bullets:
124 if b.active:
125 for e in enemys:
126 if Shoot(b, e):
127 score += 100
128 b.move()
129 screen.blit(b.image, (b.x, b.y))
130
131 for e in enemys:
132 if Crash(plane, e):
133 gameover = True
134 e.move()
135 screen.blit(e.image, (e.x, e.y))
136
137 plane.move()
138 screen.blit(plane.image, (plane.x, plane.y))
139 text = font.render("Socre: %d" % score, 1, (0, 0, 0))
140 screen.blit(text, (0, 0))
141 else:
142 text = font.render("Socre : %d" % score, 1, (0, 0, 0))
143 screen.blit(text, (150, 300))
144 text = font.render("Click mouse and restart", 1, (0, 0, 0))
145 screen.blit(text, (100, 330))
146 pygame.display.update()
运行所需图片: