Advertisement
Guest User

dagfaghfgh

a guest
Apr 1st, 2015
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.56 KB | None | 0 0
  1. '''
  2. Created on Mar 31, 2015
  3.  
  4. @author: 17PratyayBishnupuri
  5. '''
  6. import sys, time, random, math, pygame
  7. from pygame.locals import *
  8. from MyLibrary import *
  9.  
  10. class Bullet():
  11. def __init__(self,position):
  12. self.alive = True
  13. self.color = (250,20,20)
  14. self.position = Point(position.x,position.y)
  15. self.velocity = Point(0,0)
  16. self.rect = Rect(0,0,4,4)
  17. self.owner = ""
  18.  
  19. def update(self,ticks):
  20. self.position.x += self.velocity.x * 10.0
  21. self.position.y += self.velocity.y * 10.0
  22. if self.position.x < 0 or self.position.x > 800 \
  23. or self.postion.y < 0 or self.position.y > 600:
  24. self.alive = False
  25. self.rect = Rect(self.positon.x, self.position.y, 4,4)
  26.  
  27. def draw(self,surface):
  28. pos = (int(self.position.x), int(self.position.y))
  29. pygame.draw.circle(surface, self.color, pos, 4, 0)
  30.  
  31. def fire_cannon(tank):
  32. position = Point(tank.turret.X, tank.turret.Y)
  33. bullet = Bullet(position)
  34. angle = tank.turret.rotation
  35. bullet.velocity = angular_velocity(angle)
  36. bullets.append(bullet)
  37. play_sound(shoot_sound)
  38. return bullet
  39.  
  40. def player_fire_cannon():
  41. bullet = fire_cannon(player)
  42. bullet.owner = "player"
  43. bullet.color = (30,250,30)
  44.  
  45. def enemy_fire_cannon():
  46. bullet = fire_cannon(enemy_tank)
  47. bullet.owner = "enemy"
  48. bullet.color = (250,30,30)
  49.  
  50. class Tank(MySprite):
  51. def __init__(self,tank_file="tank.png",turret_file="turret.png"):
  52. MySprite.__init__(self)
  53. self.load(tank_file, 50, 60, 4)
  54. self.speed = 0.0
  55. self.scratch = None
  56. self.float_pos = Point(0,0)
  57. self.velocity = Point(0,0)
  58. self.turret = MySprite()
  59. self.turret.load(turret_file, 32, 62, 4)
  60. self.fire_timer = 0
  61.  
  62. def update(self,ticks):
  63. #update chassis
  64. MySprite.update(self,ticks,100)
  65. self.rotation = wrap_angle(self.rotation)
  66. self.scratch = pygame.transform.rotate(self.image, -self.rotation)
  67. angle = wrap_angle(self.rotation-90)
  68. self.velocity = angular_velocity(angle)
  69. self.float_pos.x += self.velocity.x
  70. self.float_pos.y += self.velocity.y
  71.  
  72. #wrap tank around screen edges (keep it simple)
  73. if self.float_pos < -50: self.float_pos.x = 800
  74. elif self.float_pos.x > 800: self.float_pos.x = -50
  75. if self.float_pos.y < -60: self.float_pos.y = 600
  76. elif self.float_pos.y > 600: self.float_pos.y = -60
  77.  
  78. #transfer float position to integer postion for drawing
  79. self.X = int(self.float_pos.x)
  80. self.Y = int(self.float_pos.y)
  81.  
  82. #update turret
  83. self.turret.position = (self.X,self.Y)
  84. self.turret.last_frame = 0
  85. self.turret.update(ticks,100)
  86. self.turret.rotation = wrap_angle(self.turret.rotation)
  87. angle = self.turret.rotation+90
  88. self.turret.scratch = pygame.transform.rotate(self.turret.image,-angle)
  89.  
  90. def draw(self,surface):
  91. #draw the chassis
  92. width,height = self.scratch.get_size()
  93. center = Point(width/2,height/2)
  94. surface.blit(self.scratch, (self.X-center.x, self.Y-center.y))
  95.  
  96. #draw the turret
  97. width,height = self.turret.scratch.get_size()
  98. center = Point(width/2,height/2)
  99. surface.blit(self.turret.scratch,(self.turret.X-center.x,self.turret.Y-center.y))
  100.  
  101. def __str__(self):
  102. return MySprite.__str__(self) + "," + str(self.velocity)
  103.  
  104. class EnemyTank(Tank):
  105. def __init__(self,tank_file="enemy_tank.png",turret_file="enemy_turret.png"):
  106. Tank.__init__(self,tank_file,turret_file)
  107.  
  108. def update(self,ticks):
  109. self.turret.rotation = wrap_angle(self.rotation-90)
  110. Tank.update(self,ticks)
  111.  
  112. def draw(self,surface):
  113. Tank.draw(self,surface)
  114.  
  115. #this function initializes the game
  116. def game_init():
  117. global screen, backbuffer, font, timer, player_group, player, enemy_tank, bullets, crosshair, crosshair_group
  118.  
  119. pygame.init()
  120. screen = pygame.display.set_mode((800,600))
  121. backbuffer = pygame.Surface((800,600))
  122. pygame.display.set_caption("Tank Battle Game")
  123. font = pygame.font.Font(None, 30)
  124. timer = pygame.time.Clock()
  125. pygame.mouse.set_visible(False)
  126.  
  127. #loads mouse Cursor
  128. crosshair = MySprite()
  129. crosshair.load("crosshair.png")
  130. crosshair_group = pygame.sprite.GroupSingle()
  131. crosshair_group.add(crosshair)
  132.  
  133. #create player tank
  134. player = Tank()
  135. player.float_pos = Point(400,300)
  136.  
  137. #create enemy tanks
  138. enemy_tank = EnemyTank()
  139. enemy_tank.float_pos = Point(random.randint(50,760),50)
  140. enemy_tank.rotation = 135
  141.  
  142. #create bullets
  143. bullets = list()
  144.  
  145. #this function initializes the audio system
  146. def audio_init():
  147. global shoot_sound, boom_sound
  148.  
  149. #initialize the audio mixer
  150. pygame.mixer.init()
  151. #load sound FILES
  152. shoot_sound = pygame.mixer.Sound("shoot.wav")
  153. boom_sound = pygame.mixer.Sound("boom.wav")
  154.  
  155. #this function uses any available channel to play a sound clip
  156. def play_sound(sound):
  157. channel = pygame.mixer.find_channel(True)
  158. channel.set_volume(0.5)
  159. channel.play(sound)
  160.  
  161. #main program begins
  162. game_init()
  163. audio_init()
  164. game_over = False
  165. player_score = 0
  166. enemy_score = 0
  167. last_time = 0
  168. mouse_x = mouse_y = 0
  169.  
  170. #main loop
  171. while True:
  172. timer.tick(30)
  173. ticks = pygame.time.get_ticks()
  174.  
  175. #reset mouse state Variables
  176. mouse_up = mouse_down = 0
  177. mouse_up_x = mouse_up_y = 0
  178. mouse_down_x = mouse_down_y = 0
  179.  
  180. #event Section
  181. for event in pygame.event.get():
  182. if event.type == QUIT: sys.exit()
  183. elif event.type == MOUSEMOTION:
  184. mouse_x,mouse_y = event.pos
  185. move_x,move_y = event.rel
  186. elif event.type == MOUSEBUTTONDOWN:
  187. mouse_down = event.button
  188. mouse_down_x,mouse_down_y = event.pos
  189. elif event.type == MOUSEBUTTONUP:
  190. mouse_up = event.button
  191. mouse_up_x,mouse_up_y = event.pos
  192.  
  193. #get key states
  194. keys = pygame.key.get_pressed()
  195. if keys[K_ESCAPE]: sys.exit()
  196.  
  197. elif keys[K_LEFT] or keys[K_a]:
  198. #calculate new direction velocity
  199. player.rotation -=2.0
  200.  
  201. elif keys[K_RIGHT] or keys[K_d]:
  202. #caluclate new direction velocity
  203. player.rotation += 2.0
  204.  
  205. #fire cannon!
  206. if keys[K_SPACE] or mouse_up > 0:
  207. if ticks > player.fire_timer + 1000:
  208. player.fire_timer = ticks
  209. player.fire_cannon()
  210.  
  211. #update section
  212. if not game_over:
  213. crosshair.position = (mouse_x,mouse_y)
  214. crosshair_group.update(ticks)
  215.  
  216. #point tank turret towards crosshair
  217. angle = target_angle(player.turret.X,player.turret.Y. crosshair.X + crosshair.frame_width/2, crosshair.Y + crosshair.frame_height/2)
  218. player.turret.rotation = angle
  219.  
  220. #move tank
  221. player.update(ticks)
  222.  
  223. #update enemies
  224. enemy_tank.update(ticks)
  225. if ticks > enemy_tank.fire_timer + 1000:
  226. enemy_tank.fire_timer = ticks
  227. enemy_fire_cannon()
  228.  
  229. #update bullets
  230. for bullet in bullets:
  231. bullet.update(ticks)
  232. if bullet.owner == "player":
  233. if pygame.sprite.collide_rect(bullet, enemy_tank):
  234. player_score += 1
  235. bullet.alive = False
  236. play_sound(boom_sound)
  237. elif bullet.owner == "enemy":
  238. if pygame.sprite.collide_rect(bullet,player):
  239. enemy_score += 1
  240. bullet.alive = False
  241. play_sound(boom_sound)
  242. #drawing section
  243. backbuffer.fill((100,100,20))
  244.  
  245. for bullet in bullets:
  246. bullet.draw(backbuffer)
  247.  
  248. enemy_tank.draw(backbuffer)
  249.  
  250. player.draw(backbuffer)
  251.  
  252. crosshair_group.draw(backbuffer)
  253.  
  254. screen.blit(backbuffer, (0,0))
  255.  
  256. if not game_over:
  257. print_text(font, 0,0, "PLAYER " + str(player_score))
  258. print_text(font, 700,0, "ENEMY " + str(enemy_score))
  259. else:
  260. print_text(font, 0,0, "GAME OVER")
  261.  
  262. pygame.display.update()
  263.  
  264. #remove expired bullets
  265. for bullet in bullets:
  266. if bullet.alive == False:
  267. bullets.remove(bullet)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement