Ko6ra

Untitled

Dec 18th, 2020
16
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.04 KB | None | 0 0
  1. import pygame, time, random
  2. pygame.init()
  3. pygame.display.set_caption("Arkanoid")
  4. W, H = 1000, 800
  5. screen = pygame.display.set_mode((W, H))
  6. f = pygame.image.load('anim/f.jpg').convert()
  7. f = pygame.transform.scale(f, (W, H))
  8.  
  9. #шрифт
  10. fnt = "fonts/Starter.ttf"
  11.  
  12. #настройки платформы paddle
  13. paddle_w = 330
  14. paddle_h = 35
  15. paddle_speed = 20
  16. paddle = pygame.Rect(W//2 - paddle_w//2, H - paddle_h - 10, paddle_w, paddle_h)
  17.  
  18. #шарик ball
  19. ball_radius = 20
  20. ball_speed = 8
  21. ball_rect = int(ball_radius * 2**0.5) #нашел сторону квадрата вписанного в шарик
  22. ball = pygame.Rect(W//2-10, paddle.top-35, ball_rect, ball_rect)
  23. dx = 0
  24. dy = 0
  25. #блоки
  26. block_list = [pygame.Rect(20 + 109 * i, 70 + 60 * j, 90, 40) for i in range(9) for j in range(4)]
  27. block_color = [(random.randint(0,255),random.randint(0,255),random.randint(0,255)) for i in range(10) for j in range(4)]
  28. '''for i in range(10):
  29. for j in range(4):
  30. block_list = [pygame.Rect(10 + 120 * i, 10 + 70 * j, 100, 50)]
  31. block_color = [random.randint(0,255),random.randint(0,255),random.randint(0,255)]'''
  32.  
  33. #функция проверки о какой край платформы отбивается мяч
  34. def prov_krai(dx, dy, ball, rect):
  35. if dx>0: krai_x = ball.right - rect.left
  36. else: krai_x = rect.right - ball.left
  37.  
  38. if dy>0: krai_y = ball.bottom - rect.top
  39. else: krai_y = rect.bottom - ball.top
  40.  
  41. if abs(krai_x - krai_y) < 5:
  42. dx = -dx
  43. dy = -dy
  44.  
  45. elif krai_x > krai_y: dy = -dy
  46. elif krai_y > krai_x: dx = -dx
  47. return dx, dy
  48.  
  49.  
  50. #пробел
  51. one_space=True
  52.  
  53. #для аним фона
  54. i=-1
  55.  
  56. #иконки шапки
  57. hp = pygame.image.load('anim/hp.png').convert() # жизни
  58. hp.set_colorkey([0,0,0])
  59. hp = pygame.transform.scale(hp, (100, 50))
  60. hp_score = 3
  61.  
  62. ts = pygame.image.load('anim/clock.png').convert() # тайм стоп
  63. ts.set_colorkey([0,0,0])
  64. ts = pygame.transform.scale(ts, (50, 50))
  65. ts_score = 3
  66. ts_time = 0
  67. ts_key = True
  68. chechet = False
  69. col = 99
  70.  
  71. ln = pygame.image.load('anim/line.png') #неон линия
  72. #ts.set_colorkey([0,0,0])
  73. ln = pygame.transform.scale(ln, (1900, 25))
  74.  
  75. #счет
  76. rec = 0
  77.  
  78. #звуки
  79. pygame.mixer.music.load('music/lofi.mp3')
  80. pygame.mixer.music.play(-1)
  81. pygame.mixer.music.set_volume(0.4)
  82. sound1 = pygame.mixer.Sound('music/time stop.mp3')
  83.  
  84.  
  85. #показывать курсор в окне или нет
  86. #pygame.mouse.set_visible(False)
  87.  
  88. running = True
  89. while running:
  90. #фон
  91. screen.blit(f, [0, 0])
  92. '''
  93. i+=1
  94. q = pygame.image.load('retro/2f5e4967a0cb486ba49dc681c2fa6afaNvaT9cmD6MALj8MD-' + str(i) + '.png').convert()
  95. ql = pygame.transform.scale(q, (1000, 850))
  96. screen.blit(ql, [0, 0])
  97. if i == 22: i = -1
  98. '''
  99. screen.blit(ln, [-300, 45])
  100. for event in pygame.event.get():
  101. if event.type == pygame.QUIT:
  102. running = False
  103. elif event.type == pygame.KEYDOWN:
  104. if event.key == pygame.K_ESCAPE:
  105. running = False
  106. '''управление
  107. if event.key == pygame.K_LEFT and paddle.left > 0:
  108. paddle.left -= paddle_speed
  109. if event.key == pygame.K_RIGHT and paddle.right > 0:
  110. paddle.right += paddle_speed'''
  111.  
  112. # тайм стоп
  113. if event.key == pygame.K_UP and ts_key == True and ts_score>0:
  114. ts_key = False
  115. ts_score -= 1
  116. dxx1 = dx
  117. dyy1 = dy
  118. sound1.play()
  119.  
  120.  
  121.  
  122. # управление платформы
  123. press = pygame.key.get_pressed() # нажатие
  124. if press[pygame.K_LEFT] and paddle.left > 0:
  125. paddle.left -= paddle_speed
  126. if press[pygame.K_RIGHT] and paddle.right < W:
  127. paddle.right += paddle_speed
  128. #отрисовка объектов
  129. [pygame.draw.rect(screen, block_color[color], block) for color, block in enumerate(block_list)]
  130. pygame.draw.rect(screen, pygame.Color('blue'), paddle)
  131.  
  132. pygame.draw.circle(screen, pygame.Color('gray'), ball.center, ball_radius)
  133. '''pygame.draw.line(screen, pygame.Color('gray'), (0,55), (1000, 55), 2 )'''
  134.  
  135. #пробел для старта
  136. space = pygame.key.get_pressed()
  137. if one_space == True:
  138. if press[pygame.K_LEFT] and paddle.left > 0:
  139. ball.left -= paddle_speed
  140. if press[pygame.K_RIGHT] and paddle.right < W:
  141. ball.right += paddle_speed
  142. if space[pygame.K_SPACE] and one_space == True:
  143. dx, dy, one_space = 1, -1, False
  144.  
  145.  
  146. #движение шарика
  147. ball.x += ball_speed * dx
  148. ball.y += ball_speed * dy
  149.  
  150. #отражения от левой и правой части
  151. if ball.centerx < ball_radius or ball.centerx > W - ball_radius:
  152. dx = -dx
  153.  
  154. #отражение от потолка
  155. if ball.centery < ball_radius + 75:
  156. dy = -dy
  157.  
  158. #отражение от платформы
  159. if ball.colliderect(paddle) and dy>0: #если прямоугольники столкнулись вернет True
  160. dx, dy = prov_krai(dx, dy, ball, paddle)
  161.  
  162. #отражение от блоков и их удаление
  163. prov_hit = ball.collidelist(block_list) # возвращает индекс блока с которым столкновение
  164. if prov_hit != -1: # и -1 если столкновения нет
  165. rect_hit = block_list.pop(prov_hit) # .pop удаляет объект из списка по индексу
  166. color_hit = block_color.pop(prov_hit)
  167. rec+=30
  168. dx, dy = prov_krai(dx, dy, ball, rect_hit)
  169. ball_speed += 0.2
  170.  
  171. #поражение, -жизни
  172. if ball.bottom > H:
  173. ball.center = paddle.centerx, paddle.centery-40
  174. dx=0
  175. dy=0
  176. one_space = True
  177. hp_score -= 1
  178.  
  179. if hp_score == 3:
  180. screen.blit(hp, [0, 0])
  181. screen.blit(hp, [70, 0])
  182. screen.blit(hp, [140, 0])
  183. if hp_score == 2:
  184. screen.blit(hp, [0, 0])
  185. screen.blit(hp, [70, 0])
  186. if hp_score == 1:
  187. screen.blit(hp, [0, 0])
  188. if hp_score == 0:
  189. print('Game over')
  190. exit()
  191.  
  192. # победа
  193. if not len(block_list):
  194. print('WIN')
  195. rec+=30
  196. exit()
  197.  
  198. #рекорд
  199. font = pygame.font.Font(fnt, 60)
  200. text = font.render(f'{rec}', 1, [255, 100, 200])
  201. screen.blit(text, [W//2-30, -10])
  202. record = open('record.txt')
  203. r = int(record.read())
  204. record.close()
  205. if (rec > r):
  206. record = open('record.txt', 'w')
  207. record.write(str(rec))
  208. record.close()
  209.  
  210. #тайм стопы
  211. if ts_key == False:
  212. dx = 0
  213. dy = 0
  214. ts_time += 1
  215. chechet = True
  216. if ts_time == 100:
  217. ts_time = 0
  218. dx = dxx1
  219. dy = dyy1
  220. ts_key = True
  221. chechet = False
  222. col = 99
  223.  
  224. if chechet == True:
  225. font = pygame.font.Font(fnt, 40)
  226. col-=1
  227. text = font.render(f'{col}', 1, [0, 0, 0])
  228. if col > 9:
  229. screen.blit(text, [ball.centerx-15, ball.bottom-40])
  230. if col < 10:
  231. screen.blit(text, [ball.centerx-9, ball.bottom - 40])
  232.  
  233.  
  234. '''ts_press = pygame.key.get_pressed()
  235. if ts_press[pygame.K_UP] and ts_key == False:
  236. #ts_key = True
  237. dx1, dy1 = dx, dy
  238. dx = 0
  239. dy = 0
  240. ts_score -= 1
  241. print(ts_time)
  242. ts_time += 1
  243. print(ts_time)
  244. if ts_time == 20 and ts_key == True:
  245. dx, dy = dx1, dy1
  246. ts_key = False'''
  247. if ts_score == 3:
  248. screen.blit(ts, [920, 0])
  249. screen.blit(ts, [850, 0])
  250. screen.blit(ts, [780, 0])
  251. if ts_score == 2:
  252. screen.blit(ts, [920, 0])
  253. screen.blit(ts, [850, 0])
  254. if ts_score == 1:
  255. screen.blit(ts, [920, 0])
  256.  
  257. pygame.display.flip()
  258. time.sleep(0.02)
  259. pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment