Advertisement
Guest User

Untitled

a guest
Oct 19th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.52 KB | None | 0 0
  1. # Wyatt Austin and Jacob Espinoza
  2.  
  3. import pygame
  4. import math
  5. import random
  6.  
  7. pygame.init()
  8.  
  9. screenWidth = 800
  10. screenHeight = 600
  11.  
  12. black = (0, 0, 0)
  13. white = (255, 255, 255)
  14. red = (255, 0, 0)
  15. green = (0, 255, 0)
  16. blue = (0, 0, 255)
  17.  
  18. gameDisplay = pygame.display.set_mode((screenWidth, screenHeight))
  19. pygame.display.set_caption('better asteroids')
  20. clock = pygame.time.Clock()
  21.  
  22. largeFont = pygame.font.SysFont('Comic Sans MS', 30)
  23. smallFont = pygame.font.SysFont('Comic Sans MS', 15)
  24.  
  25.  
  26. def displayText(size, x, y, text, color = black):
  27. if size == 'large':
  28. textSurface = largeFont.render(text, False, color)
  29. if size == 'small':
  30. textSurface = smallFont.render(text, False, color)
  31.  
  32. gameDisplay.blit(textSurface,(x, y))
  33.  
  34.  
  35. '''
  36. class myList():
  37. def __init__(self):
  38. self.list = []
  39.  
  40. def appendList(self, item):
  41. self.list += item
  42.  
  43. def getList(self):
  44. return self.list
  45. '''
  46.  
  47. class playerShip():
  48. def __init__(self):
  49. self.x = screenWidth / 2
  50. self.y = screenHeight / 2
  51. self.angle = math.pi / 2
  52. self.xVel = 0
  53. self.yVel = 0
  54. self.angleChange = 0
  55. self.velocityChange = 0
  56. masterList.append(self)
  57.  
  58. def getX(self):
  59. return self.x
  60.  
  61. def getY(self):
  62. return self.y
  63.  
  64. def draw(self):
  65. drawShip(self.x, self.y, self.angle)
  66.  
  67. def tick(self):
  68. for event in pygame.event.get():
  69. if event.type == pygame.QUIT:
  70. exit.exit = True
  71. pygame.quit()
  72. if event.type == pygame.KEYDOWN:
  73. if event.key == pygame.K_LEFT:
  74. self.angleChange = -.1
  75. if event.key == pygame.K_RIGHT:
  76. self.angleChange = .1
  77. if event.key == pygame.K_UP:
  78. self.velocityChange = .1
  79. if event.key == pygame.K_f:
  80. newBullet = bullet(self.x, self.y, self.angle, 10, red, self.xVel, self.yVel)
  81. myBulletList.append(newBullet)
  82. if event.type == pygame.KEYUP:
  83. if event.key == pygame.K_RIGHT or event.key == pygame.K_LEFT:
  84. self.angleChange = 0
  85. if event.key == pygame.K_UP:
  86. self.velocityChange = 0
  87. if self.x < 0:
  88. self.x = screenWidth
  89. if self.x > screenWidth:
  90. self.x = 0
  91. if self.y < 0:
  92. self.y = screenHeight
  93. if self.y > screenHeight:
  94. self.y = 0
  95.  
  96. #clean up
  97. self.angle += self.angleChange
  98. self.xVel += self.velocityChange * math.cos(self.angle)
  99. self.yVel += self.velocityChange * math.sin(self.angle)
  100. self.x += self.xVel
  101. self.y += self.yVel
  102.  
  103. def drawShip(x, y, angle):
  104. pygame.draw.circle(gameDisplay, green, (int(x), int(y)), 20)
  105.  
  106. pygame.draw.circle(gameDisplay, blue, (int(x + math.cos(angle) * 15), int(y + math.sin(angle) * 15)), 10)
  107.  
  108.  
  109.  
  110.  
  111. def createBullet(x, y, angle, velocity):
  112. newBullet = bullet(x, y, angle, velocity)
  113.  
  114. class bullet:
  115. def __init__(self, x, y, angle, velocity, color = red, prevXVel = 0, prevYVel = 0):
  116. self.x = x
  117. self.y = y
  118. self.xVel = math.cos(angle) * velocity + prevXVel
  119. self.yVel = math.sin(angle) * velocity + prevYVel
  120. self.color = color
  121. masterList.append(self)
  122.  
  123. def tick(self):
  124. self.x += self.xVel
  125. self.y += self.yVel
  126. if self.x <= 0 or self.x >= screenWidth or self.y <= 0 or self.y >= screenHeight:
  127. masterList.remove(self)
  128. try:
  129. enemyBulletList.remove(self)
  130. except:
  131. try:
  132. myBulletList.remove(self)
  133. except:
  134. pass
  135.  
  136. def draw(self):
  137. pygame.draw.circle(gameDisplay, self.color, (int(self.x), int(self.y)), 2)
  138.  
  139.  
  140. class enemyBasic:
  141. def __init__(self):
  142. rNumber = random.randint(1,4)
  143. if rNumber == 1:
  144. #start left, go right
  145. self.x = 0
  146. self.y = random.randrange(0, screenHeight)
  147. self.angle = 0
  148. self.xVel = 4
  149. self.yVel = 0
  150. if rNumber == 2:
  151. #start right, go left
  152. self.x = screenWidth
  153. self.y = random.randrange(0, screenHeight)
  154. self.angle = math.pi
  155. self.xVel = -4
  156. self.yVel = 0
  157. if rNumber == 3:
  158. #start top, go down
  159. self.x = random.randrange(0, screenWidth)
  160. self.y = 0
  161. self.angle = math.pi / 2
  162. self.xVel = 0
  163. self.yVel = 4
  164. if rNumber == 4:
  165. #start bot, go up
  166. self.x = random.randrange(0, screenWidth)
  167. self.y = screenHeight
  168. self.angle = (3 * math.pi) / 2
  169. self.xVel = 0
  170. self.yVel = -4
  171.  
  172. self.reloadMaxTime = 30
  173. self.reloadTime = self.reloadMaxTime
  174. masterList.append(self)
  175. enemyBasicList.append(self)
  176.  
  177. def draw(self):
  178. pygame.draw.circle(gameDisplay, red, (int(self.x), int(self.y)), 20)
  179. pygame.draw.circle(gameDisplay, red, (int(self.x + math.cos(self.angle) * 15), int(self.y + math.sin(self.angle) * 15)), 10)
  180. if self.reloadTime <= 15:
  181. pygame.draw.circle(gameDisplay, green, (int(self.x), int(self.y)), int(self.reloadTime / 2))
  182.  
  183. def tick(self):
  184. self.x += self.xVel
  185. self.y += self.yVel
  186. if self.reloadTime <= 0:
  187. self.shoot()
  188. else:
  189. self.reloadTime += -1
  190. if self.x > screenWidth:
  191. self.x = 0
  192. if self.x < 0:
  193. self.x = screenWidth
  194. if self.y < 0:
  195. self.y = screenHeight
  196. if self.y > screenHeight:
  197. self.y = 0
  198.  
  199. def shoot(self):
  200. '''
  201. create a bullet and reset reload time
  202. '''
  203. self.reloadTime = self.reloadMaxTime
  204. newBullet = bullet(self.x, self.y, -self.aim(player.getX(), player.getY()), 10, green)
  205. enemyBulletList.append(newBullet)
  206.  
  207. def aim(self, x, y):
  208. '''
  209. calculate angle between object and its target
  210. '''
  211. xDif = self.x - x
  212. yDif = y - self.y
  213. try:
  214. angle = math.atan2(yDif, xDif)
  215. return angle - math.pi
  216. except:
  217. return (3 * math.pi / 2)
  218.  
  219.  
  220.  
  221. class enemyTurret:
  222. def __init__(self):
  223. #start left, go right
  224. self.x = random.randint(0,screenWidth)
  225. self.y = random.randrange(0, screenHeight)
  226. self.reloadMaxTime = 120
  227. self.reloadTime = self.reloadMaxTime
  228. masterList.append(self)
  229. enemyTurretList.append(self)
  230. self.fireTime = 10
  231. self.health = 3
  232.  
  233. def draw(self):
  234. pygame.draw.circle(gameDisplay, blue, (int(self.x), int(self.y)), 20)
  235. if self.reloadTime <= 15:
  236. pygame.draw.circle(gameDisplay, green, (int(self.x), int(self.y)), int(self.reloadTime / 2))
  237.  
  238. def tick(self):
  239. if self.reloadTime <= 0:
  240. self.shoot()
  241. else:
  242. self.reloadTime += -1
  243.  
  244. def shoot(self):
  245. '''
  246. create a bullet and reset reload time
  247. '''
  248. if self.fireTime <= 0:
  249. self.reloadTime = self.reloadMaxTime
  250. self.fireTime = 10
  251. newBullet = bullet(self.x, self.y, -self.aim(player.getX(), player.getY()), 10, green)
  252. enemyBulletList.append(newBullet)
  253. self.fireTime += -1
  254.  
  255. def aim(self, x, y):
  256. '''
  257. calculate angle between object and its target
  258. '''
  259. xDif = self.x - x
  260. yDif = y - self.y
  261. try:
  262. angle = math.atan2(yDif, xDif)
  263. return angle - math.pi
  264. except:
  265. return (3 * math.pi / 2)
  266.  
  267. def hurt(self, bullet):
  268. self.health += -1
  269. if self.health <= 0:
  270. masterList.remove(self)
  271. enemyTurretList.remove(self)
  272. Score.score += 40
  273. myBulletList.remove(bullet)
  274. masterList.remove(bullet)
  275.  
  276.  
  277. def collided(ship, bullet):
  278. #radius 20 for ships
  279. #if distance between ship and bullet < 20: return True
  280. distance = ((ship.x - bullet.x) ** 2 + (ship.y - bullet.y) ** 2) ** .5
  281. if distance < 20:
  282. return True
  283. return False
  284.  
  285. #masterList to draw
  286. masterList = []
  287.  
  288. enemyBasicList = []
  289. enemyTurretList = []
  290.  
  291. enemyBulletList = []
  292. myBulletList = []
  293.  
  294. class score:
  295. def __init__(self):
  296. self.score = 0
  297.  
  298. Score = score()
  299.  
  300. player = playerShip()
  301. masterList.append(player)
  302.  
  303. print('note: bullets inherit your ships velocity')
  304.  
  305.  
  306. def gameLoop():
  307. exit = False
  308.  
  309. state = 'start'
  310.  
  311.  
  312.  
  313.  
  314. try:
  315. pygame.mixer.music.load('a.ogg')
  316. pygame.mixer.music.play(-1)
  317. except:
  318. pass
  319.  
  320.  
  321. start = True
  322. while not exit:
  323. if state == 'start':
  324. gameDisplay.fill(white)
  325. #display instructions
  326. xBase = screenWidth / 2 - 100
  327. yBase = screenHeight / 2 - 200
  328. displayText('large', xBase, yBase, 'Moon Rocks')
  329. displayText('small', xBase, yBase + 200, 'press esc to play')
  330. pygame.display.update()
  331. for event in pygame.event.get():
  332. if event.type == pygame.QUIT:
  333. #exit = True
  334. pygame.quit()
  335. if event.type == pygame.KEYDOWN:
  336. if event.key == pygame.K_ESCAPE:
  337. state = 'play'
  338. if state == 'play':
  339. for i in masterList:
  340. i.tick()
  341.  
  342. gameDisplay.fill(white)
  343. displayText('large', 0, 0, str.format('Score: {}', Score.score))
  344. for i in masterList:
  345. i.draw()
  346.  
  347.  
  348. pygame.display.update()
  349. if start == True:
  350. #wait 3 seconds
  351. start = False
  352. clock.tick(20)
  353.  
  354. '''
  355. print(masterList)
  356. count = 0
  357. for i in masterList:
  358. count += 1
  359. print(count)
  360. '''
  361.  
  362. for i in enemyBulletList:
  363. if collided(player, i):
  364. state = 'game over'
  365.  
  366. for i in myBulletList:
  367. for h in enemyBasicList:
  368. if collided(h, i):
  369. masterList.remove(h)
  370. enemyBasicList.remove(h)
  371. Score.score += 10
  372. for h in enemyTurretList:
  373. if collided(h, i):
  374. h.hurt(i)
  375. #spawn enemies
  376. if random.randint(0, 100) == 1:
  377. enemy = enemyTurret()
  378. if random.randint(0, 200) == 1:
  379. enemy = enemyBasic()
  380. '''
  381.  
  382. if enemyBasicList == []:
  383. if random.randint(0,15) == 1:
  384. enemy = enemyBasic()
  385. '''
  386.  
  387. if state == 'game over':
  388. gameDisplay.fill(white)
  389.  
  390. # display game over screen + score
  391. displayText('large', xBase, yBase, str.format('Final Score: {}', Score.score))
  392. pygame.display.update()
  393. for event in pygame.event.get():
  394. if event.type == pygame.QUIT:
  395. pygame.quit()
  396. if event.type == pygame.KEYDOWN:
  397. if event.key == pygame.K_ESCAPE:
  398. pygame.quit()
  399.  
  400.  
  401. gameLoop()
  402. quit()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement