Guest User

Untitled

a guest
Jun 25th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.66 KB | None | 0 0
  1. import pygame
  2. import os
  3. import sys
  4. import random
  5. from pygame.locals import *
  6.  
  7. WHITE = (255, 255, 255)
  8. BLACK = (0, 0, 0)
  9.  
  10. width = 1067
  11. height = 600
  12. # tao khung hien thi game
  13. display_surf = pygame.display.set_mode((width, height))
  14. pygame.display.set_caption("Game Shooter")
  15.  
  16. fps = 5 # so frame tren giay
  17. fps_clock = pygame.time.Clock()
  18.  
  19.  
  20. class Chicken:
  21.  
  22. def __init__(self, position, radius):
  23. self.position = position
  24. self.radius = radius
  25.  
  26. def draw(self):
  27. for element in self.position:
  28. center = map(int, element)
  29. pygame.draw.circle(display_surf, WHITE, tuple(center), self.radius)
  30.  
  31. def spawn(self):
  32. x = random.randrange(10, width - 10)
  33. self.position.append([x, 0])
  34.  
  35. def move(self, speed):
  36. for element in range(len(self.position)):
  37. self.position[element][1] += speed
  38.  
  39.  
  40. class Bullet:
  41.  
  42. def __init__(self, position, radius):
  43. self.position = position
  44. self.radius = radius
  45.  
  46. def draw(self):
  47. for element in self.position:
  48. center = map(int, element)
  49. pygame.draw.circle(display_surf, WHITE, tuple(center), self.radius)
  50.  
  51. def spawn(self, x, y):
  52. self.position.append([x, y])
  53.  
  54. def move(self, speed):
  55. for element in range(len(self.position)):
  56. self.position[element][1] -= speed
  57.  
  58.  
  59. class Ship:
  60.  
  61. def __init__(self, w, h, x, y, speed):
  62. self.width = w
  63. self.height = h
  64. self.x = x
  65. self.y = y
  66. self.dir_x = 1
  67. self.dir_y = 0
  68. self.speed = speed
  69.  
  70. def draw(self):
  71. pygame.draw.rect(display_surf, WHITE, (self.x, self.y, self.width, self.height))
  72.  
  73. def move(self):
  74. self.x = self.x + self.x * self.dir_x * self.speed
  75. self.y = self.y + self.y * self.dir_y * self.speed
  76.  
  77. def shoot(self, bullet):
  78. bullet.x = self.x
  79. bullet.y = self.y
  80. bullet.draw()
  81. bullet.move(5)
  82.  
  83.  
  84. class Scoreboard:
  85.  
  86. def __init__(self, x, y, font, size, score):
  87. self.x = x
  88. self.y = y
  89. self.font = font
  90. self.size = size
  91. self.score = score
  92.  
  93. def display(self):
  94. font = pygame.font.Font(self.font, self.size)
  95. display_score = font.render("Score: " + str(self.score), True, WHITE)
  96. display_surf.blit(display_score, (self.x, self.y))
  97.  
  98.  
  99. class Game:
  100.  
  101. def __init__(self, ship, chicken, bullet, scoreboard, speed):
  102. self.ship = ship
  103. self.chicken = chicken
  104. self.bullet = bullet
  105. self.scoreboard = scoreboard
  106. self.speed = speed
  107.  
  108. def draw_arena(self):
  109. display_surf.fill(BLACK)
  110. pygame.draw.rect(display_surf, WHITE, (0, 0, width, height), 10)
  111. self.ship.draw()
  112. self.chicken.draw()
  113. self.bullet.draw()
  114. self.scoreboard.display()
  115.  
  116. def bullet_hit_chicken(self):
  117. for element in range(len(self.chicken.position)):
  118. for _bullet in range(len(self.bullet.position)):
  119. if self.bullet.position[_bullet][0] == int(self.chicken.position[element][0]) and \
  120. self.bullet.position[_bullet][1] == int(self.chicken.position[element][1]):
  121. self.chicken.position.pop(element)
  122. self.bullet.position.pop(_bullet)
  123. self.scoreboard.score += 10
  124.  
  125. def ship_hit_floor(self):
  126. if self.ship.y >= height:
  127. self.ship.y = height
  128. elif self.ship.y <= 0:
  129. self.ship.y = 0
  130. elif self.ship.x >= width:
  131. self.ship.x = width
  132. elif self.ship.x <= 0:
  133. self.ship.x = 0
  134.  
  135. def ship_hit_chicken(self):
  136. for element in range(len(self.chicken.position)):
  137. if self.ship.x == int(self.chicken.position[element][0]) and self.ship.y == int(self.chicken.position[element][0]):
  138. return True
  139. return False
  140.  
  141. def chicken_hit_floor(self):
  142. for _chicken in range(len(self.chicken.position)):
  143. if self.chicken.position[_chicken][1] >= height:
  144. return True
  145. return False
  146.  
  147. def update(self):
  148. self.chicken.move(1)
  149. self.bullet.move(1)
  150. self.chicken.spawn()
  151. self.ship.move()
  152. for new_bullet in range(len(self.bullet.position)):
  153. if self.bullet.position[new_bullet][1] <= 0:
  154. self.bullet.position.pop(new_bullet)
  155. self.bullet.spawn(self.ship.x, self.ship.y)
  156. self.bullet_hit_chicken()
  157. self.ship_hit_floor()
  158.  
  159.  
  160. def main():
  161. pygame.init()
  162. ship = Ship(50, 50, width/2, height/2, 1)
  163. chicken = Chicken([[0, 0]], 20)
  164. bullet = Bullet([[width/2, height]], 10)
  165. scoreboard = Scoreboard(width - 100, 10, None, 30, 0)
  166. die = False
  167. game = Game(ship, chicken, bullet, scoreboard, 1)
  168.  
  169. while True:
  170. if game.ship_hit_chicken() or game.chicken_hit_floor():
  171. die = True
  172. for event in pygame.event.get():
  173. if event.type == pygame.QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
  174. pygame.quit()
  175. sys.exit()
  176. elif event.type == KEYDOWN and event.key == K_a:
  177. ship.dir_y = 0
  178. ship.dir_x = -1
  179. elif event.type == KEYDOWN and event.key == K_d:
  180. ship.dir_y = 0
  181. ship.dir_x = 1
  182. elif event.type == KEYDOWN and event.key == K_w:
  183. ship.dir_y = -1
  184. ship.dir_x = 0
  185. elif event.type == KEYDOWN and event.key == K_s:
  186. ship.dir_y = 1
  187. ship.dir_x = 0
  188.  
  189.  
  190. if die:
  191. pygame.quit()
  192. sys.exit()
  193.  
  194. game.draw_arena()
  195. game.update()
  196. pygame.display.update()
  197. fps_clock.tick(fps)
  198.  
  199.  
  200. if __name__ == "__main__":
  201. main()
Add Comment
Please, Sign In to add comment