Advertisement
Guest User

Maze game

a guest
Apr 19th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.92 KB | None | 0 0
  1. import turtle
  2. import math
  3. import random
  4.  
  5. window = turtle.Screen()
  6. window.bgcolor("black")
  7. window.title("Nerd Chase")
  8. window.setup(700,700)
  9. window.tracer(0)
  10.  
  11. #Sprites
  12. images = ["nerd_right.gif", "nerd_left.gif", "arcade.gif", "wall.gif", "blob_left.gif",
  13. "blob_right.gif"]
  14. for image in images:
  15. turtle.register_shape(image)
  16.  
  17. #Create Pen object
  18. class Pen(turtle.Turtle):
  19. def __init__(self):
  20. turtle.Turtle.__init__(self)
  21. self.shape("square")
  22. self.color("white")
  23. self.penup()
  24. self.speed(0)
  25.  
  26. #Create player class
  27. class Player(turtle.Turtle):
  28. def __init__(self):
  29. turtle.Turtle.__init__(self)
  30. self.shape("nerd_right.gif")
  31. self.color("blue")
  32. self.penup()
  33. self.speed(0)
  34. self.points = 0
  35.  
  36. def go_up(self):
  37. #calc spot to go to
  38. move_to_x = self.xcor()
  39. move_to_y = self.ycor() + 24
  40.  
  41. #check if wall detected
  42. if (move_to_x, move_to_y) not in walls:
  43. self.goto(move_to_x, move_to_y)
  44.  
  45. def go_down(self):
  46. #calc spot to go to
  47. move_to_x = self.xcor()
  48. move_to_y = self.ycor() - 24
  49.  
  50. #check if wall detected
  51. if (move_to_x, move_to_y) not in walls:
  52. self.goto(move_to_x, move_to_y)
  53.  
  54. def go_left(self):
  55. #calc spot to go to
  56. move_to_x = self.xcor() - 24
  57. move_to_y = self.ycor()
  58.  
  59. #check if wall detected
  60. if (move_to_x, move_to_y) not in walls:
  61. self.goto(move_to_x, move_to_y)
  62.  
  63. self.shape("nerd_left.gif")
  64.  
  65.  
  66. def go_right(self):
  67. #calc spot to go to
  68. move_to_x = player.xcor()+ 24
  69. move_to_y = player.ycor()
  70.  
  71. self.shape("nerd_right.gif")
  72.  
  73. #check if wall detected
  74. if (move_to_x, move_to_y) not in walls:
  75. self.goto(move_to_x, move_to_y)
  76.  
  77. #Checks for a collision between Arcade and player, Pythag theorem
  78. def is_collision(self, other):
  79. a = self.xcor()-other.xcor()
  80. b = self.ycor()-other.ycor()
  81. distance = math.sqrt((a ** 2) + (b ** 2) )
  82.  
  83. if distance < 5:
  84. return True
  85. else:
  86. return False
  87.  
  88. #Create Arcade class(reward)
  89. class Arcade(turtle.Turtle):
  90. def __init__(self, x, y):
  91. turtle.Turtle.__init__(self)
  92. self.shape("arcade.gif")
  93. self.color("green")
  94. self.penup()
  95. self.speed(0)
  96. self.points = 100
  97. self.goto(x, y)
  98.  
  99. #Moving arcade off screen, hiding it
  100. def destroy(self):
  101. self.goto(2000, 2000)
  102. self.hideturtle()
  103.  
  104. #Blob class
  105. class Enemy(turtle.Turtle):
  106. def __init__(self, x, y):
  107. turtle.Turtle.__init__(self)
  108. self.shape("blob_left.gif")
  109. self.color("red")
  110. self.penup()
  111. self.speed(0)
  112. self.points = 20
  113. self.goto(x, y)
  114. self.direction = random.choice(["up", "down", "left", "right"])
  115.  
  116. def move(self):
  117. if self.direction == "up":
  118. dx = 0
  119. dy = 24
  120. elif self.direction == "down":
  121. dx = 0
  122. dy = -24
  123. elif self.direction == "left":
  124. dx = -24
  125. dy = 0
  126. self.shape("blob_right.gif")
  127. elif self.direction == "right":
  128. dx = 24
  129. dy = 0
  130. self.shape("blob_left.gif")
  131. else:
  132. dx = 0
  133. dy = 0
  134.  
  135. def is_close(self, other):
  136. a = self.xcor()-other.xcor()
  137. b = self.ycor()-other.ycor()
  138. distance = math.sqrt((a ** 2) + (b ** 2) )
  139.  
  140. if distance < 75:
  141. return True
  142. else:
  143. return False
  144.  
  145. #Check is the player is in proximity to blob
  146. # If it is then follow
  147. if self.is_close(player):
  148. if player.xcor() < self.xcor():
  149. self.direction = "left"
  150. elif player.xcor() > self.xcor():
  151. self.direction = "right"
  152. elif player.ycor() < self.ycor():
  153. self.direction = "down"
  154. elif player.ycor() > self.ycor():
  155. self.direction = "up"
  156.  
  157.  
  158. #Calc spot to go to
  159. move_to_x = self.xcor() + dx
  160. move_to_y = self.ycor() + dy
  161.  
  162. #check if wall detected
  163. if (move_to_x, move_to_y) not in walls:
  164. self.goto(move_to_x, move_to_y)
  165. else:
  166. #choose another direction
  167. self.direction = random.choice(["up", "down", "left", "right"])
  168.  
  169. #set timer(miliseconds)
  170. turtle.ontimer(self.move, t=random.randint(100, 300))
  171.  
  172.  
  173. def is_close(self, other):
  174. a = self.xcor()-other.xcor()
  175. b = self.ycor()-other.ycor()
  176. distance = math.sqrt((a ** 2) + (b ** 2) )
  177.  
  178. if distance < 75:
  179. return True
  180. else:
  181. return False
  182.  
  183.  
  184. def destroy(self):
  185. self.goto(2000, 2000)
  186. self.hideturtle()
  187.  
  188.  
  189. #Create list for the levels
  190. levels = [""]
  191.  
  192. #first level
  193. level_1 = [
  194. "XXXXXXXXXXXXXXXXXXXXXXXXX",
  195. "XP XXXXXXX XXXXX",
  196. "X XXXXXXX XXXXX",
  197. "X XX XXXXXX XXXXX",
  198. "X XX XXX XX",
  199. "XXXXXX XX XXXB XX",
  200. "XXXXXX XX XXXXXX XXXXX",
  201. "XXXXXX XX XXXXXX XXXXX",
  202. "X XXX BXXXX XXXXX",
  203. "X XXX XXXXXXXXXXXXXXXXX",
  204. "X XXXXXXXXXXXX ",
  205. "XB XXXXXXXXXXX",
  206. "XXXXXXXXXXXXX XXXXX X",
  207. "XXXXXXXXXXXXXX XXX X",
  208. "XXX XXXXXXX XXX",
  209. "XXXXXXXXXXXXXX X",
  210. "XXX XXXXXXXXX X",
  211. "XXX X",
  212. "XXXB XXA X",
  213. "XX XXXXXXXXXXXXXX X X",
  214. "XXX XXXXXXXXXXXXXX X X",
  215. "XXXXX XXXXXXXXXXXXX XXXX",
  216. "XXXX XXXXX X",
  217. "XXXXXXXXXXXXXXXXXXXXXXXXX"
  218. ]
  219.  
  220. #Add an arcade list
  221. arcades = []
  222.  
  223. #enemy list
  224. enemies = []
  225.  
  226. #Add maze to list
  227. levels.append(level_1)
  228.  
  229. #Create function for levels
  230. def setup_maze(level):
  231. for y in range(len(level)):
  232. for x in range(len(level[y])):
  233. #Get value at each (x,y) coord
  234. # switch places as we set up the list
  235. character = level[y][x]
  236. screen_x = -288 + (x * 24)
  237. screen_y = 288 - (y * 24)
  238.  
  239. #Check if "X"
  240. if character == "X":
  241. pen.goto(screen_x,screen_y)
  242. pen.shape("wall.gif")
  243. pen.stamp()
  244. #Add coord to wall list
  245. walls.append((screen_x, screen_y))
  246.  
  247. #Check if it is Player
  248. if character == "P":
  249. player.goto(screen_x,screen_y)
  250.  
  251. #Check if it is A (Arcade)
  252. if character == "A":
  253. arcades.append(Arcade(screen_x, screen_y))
  254.  
  255. #Check if "B" (blob creature)
  256. if character == "B":
  257. enemies.append(Enemy(screen_x, screen_y))
  258.  
  259.  
  260. #These are class instances
  261. pen = Pen()
  262. player = Player()
  263.  
  264. #Create wall coord list
  265. walls = []
  266.  
  267. #Set up level
  268. setup_maze(levels[1])
  269.  
  270. #Keys
  271. turtle.listen()
  272. turtle.onkey(player.go_left, "Left")
  273. turtle.onkey(player.go_right, "Right")
  274. turtle.onkey(player.go_up, "Up")
  275. turtle.onkey(player.go_down, "Down")
  276.  
  277. #turn off updates
  278. window.tracer(0)
  279.  
  280. #Moving blobs
  281. for enemy in enemies:
  282. turtle.ontimer(enemy.move, t=250)
  283.  
  284. #Game loop
  285. while True:
  286. #Check collisions
  287. #Iterate Arcade list
  288. for arcade in arcades:
  289. if player.is_collision(arcade):
  290. #Add points from arcade to player
  291. player.points += arcade.points
  292. print ("You received: {} points".format(player.points))
  293. #destroy arcade
  294. arcade.destroy()
  295. #Remove arcade from list
  296. arcades.remove(arcade)
  297.  
  298. for enemy in enemies:
  299. if player.is_collision(enemy):
  300. print ("Player died!")
  301. enemy.move()
  302.  
  303.  
  304. window.update()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement