SHOW:
|
|
- or go back to the newest paste.
1 | #Space Invaders | |
2 | ||
3 | import os | |
4 | import turtle | |
5 | import math | |
6 | import random | |
7 | ||
8 | ||
9 | wn = turtle.Screen() | |
10 | wn.bgcolor("black") | |
11 | wn.title("Space Invaders") | |
12 | ||
13 | #Draw border | |
14 | border_pen = turtle.Turtle() | |
15 | border_pen.speed(0) | |
16 | border_pen.color("green") | |
17 | border_pen.penup() | |
18 | border_pen.setposition(-300,-300) | |
19 | border_pen.pendown() | |
20 | border_pen.pensize(3) | |
21 | for side in range(4): | |
22 | border_pen.fd(600) | |
23 | border_pen.lt(90) | |
24 | border_pen.hideturtle() | |
25 | ||
26 | #set score to 0 | |
27 | score = 0 | |
28 | ||
29 | #draw score | |
30 | score_pen = turtle.Turtle() | |
31 | score_pen.speed(0) | |
32 | score_pen.color("white") | |
33 | score_pen.penup() | |
34 | score_pen.setposition(-290, 280) | |
35 | scorestring = "Score: %s" %score | |
36 | score_pen.write(scorestring, False, align="left", font=("Arial", 14, "normal")) | |
37 | score_pen.hideturtle() | |
38 | ||
39 | ||
40 | #create player | |
41 | player = turtle.Turtle() | |
42 | player.color("purple") | |
43 | player.shape("triangle") | |
44 | player.penup() | |
45 | player.speed(0) | |
46 | player.setposition(0, -250) | |
47 | player.setheading(90) | |
48 | ||
49 | playerspeed = 25 | |
50 | ||
51 | #choose number of enemies | |
52 | number_of_enemies = 5 | |
53 | #create an empty list of enemies | |
54 | enemies = [] | |
55 | ||
56 | #add enemies to list | |
57 | for i in range(number_of_enemies): | |
58 | #create the enemy | |
59 | enemies.append(turtle.Turtle()) | |
60 | ||
61 | ||
62 | #create enemy | |
63 | for enemy in enemies: | |
64 | enemy.color("red") | |
65 | enemy.shape("circle") | |
66 | enemy.penup() | |
67 | enemy.speed(0) | |
68 | x = random.randint(-200, 200) | |
69 | y = random.randint(100, 250) | |
70 | enemy.setposition(x, y) | |
71 | ||
72 | enemyspeed = 2 | |
73 | ||
74 | ||
75 | #create bullet | |
76 | bullet = turtle.Turtle() | |
77 | bullet.color("yellow") | |
78 | bullet.shape("triangle") | |
79 | bullet.penup() | |
80 | bullet.speed(0) | |
81 | bullet.setheading(90) | |
82 | bullet.shapesize(0.5, 0.5) | |
83 | bullet.hideturtle() | |
84 | ||
85 | bulletspeed = 20 | |
86 | ||
87 | #define bullet state | |
88 | #ready - ready to fire | |
89 | #fire - bullet is firing | |
90 | bulletstate = "ready" | |
91 | ||
92 | ||
93 | ||
94 | ||
95 | ||
96 | #Move player left and right | |
97 | def move_left(): | |
98 | x = player.xcor() | |
99 | x -= playerspeed | |
100 | if x < -280: | |
101 | x = - 280 | |
102 | player.setx(x) | |
103 | ||
104 | def move_right(): | |
105 | x = player.xcor() | |
106 | x += playerspeed | |
107 | if x > 280: | |
108 | x = 280 | |
109 | player.setx(x) | |
110 | ||
111 | def fire_bullet(): | |
112 | #declare bulletstate as global | |
113 | global bulletstate | |
114 | if bulletstate == "ready": | |
115 | bulletstate = "fire" | |
116 | #move bullet | |
117 | x = player.xcor() | |
118 | y= player.ycor() + 10 | |
119 | bullet.setposition(x, y) | |
120 | bullet.showturtle() | |
121 | ||
122 | def isCollision(t1, t2): | |
123 | distance = math.sqrt(math.pow(t1.xcor()-t2.xcor(),2)+math.pow(t1.ycor()-t2.ycor(),2)) | |
124 | if distance < 15: | |
125 | return True | |
126 | else: | |
127 | return False | |
128 | ||
129 | ||
130 | ||
131 | #create keyboard bindings | |
132 | turtle.listen() | |
133 | turtle.onkey(move_left, "Left") | |
134 | turtle.onkey(move_right, "Right") | |
135 | turtle.onkey(fire_bullet, "space") | |
136 | ||
137 | ||
138 | #maiin game loop | |
139 | while True: | |
140 | for enemy in enemies: | |
141 | #move enemy | |
142 | x = enemy.xcor() | |
143 | x += enemyspeed | |
144 | enemy.setx(x) | |
145 | ||
146 | #move enemy back and forth | |
147 | if enemy.xcor() > 280: | |
148 | for e in enemies: | |
149 | y = e.ycor() | |
150 | y -= 40 | |
151 | e.sety(y) | |
152 | enemyspeed *= -1 | |
153 | ||
154 | if enemy.xcor() < -280: | |
155 | for e in enemies: | |
156 | y = e.ycor() | |
157 | y -= 40 | |
158 | e.sety(y) | |
159 | enemyspeed *= -1 | |
160 | ||
161 | #check for a collision between the bullet and enemy | |
162 | if isCollision(bullet, enemy): | |
163 | #reset the bullet | |
164 | bullet.hideturtle() | |
165 | bulletstate = "ready" | |
166 | bullet.setposition(0, -400) | |
167 | #reset enemy | |
168 | x = random.randint(-200, 200) | |
169 | y = random.randint(100, 250) | |
170 | enemy.setposition(x, y) | |
171 | #Update score | |
172 | score += 10 | |
173 | scorestring = "Score: %s" % score | |
174 | score_pen.clear() | |
175 | score_pen.write(scorestring, False, align="left", font=("Arial", 14, "normal")) | |
176 | ||
177 | if isCollision(bullet, enemy): | |
178 | bullet.hideturtle() | |
179 | bulletstate = "ready" | |
180 | bullet.setposition(0, -400) | |
181 | #reset enemy | |
182 | enemy.setposition(-200, 250) | |
183 | ||
184 | if isCollision(player, enemy): | |
185 | player.hideturtle() | |
186 | enemy.hideturtle() | |
187 | print ("Game Over Bitches!") | |
188 | break | |
189 | ||
190 | ||
191 | #move bullet | |
192 | if bulletstate == "fire": | |
193 | y = bullet.ycor() | |
194 | y += bulletspeed | |
195 | bullet.sety(y) | |
196 | ||
197 | #check to see if bullet has gone to top | |
198 | if bullet.ycor() > 275: | |
199 | bullet.hideturtle() | |
200 | bulletstate = "ready" | |
201 | ||
202 | turtle.done() | |
203 | dealy = input("Press Enter to finsih.") |