Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pygame, time, random
- pygame.init()
- pygame.display.set_caption("Arkanoid")
- W, H = 1000, 800
- screen = pygame.display.set_mode((W, H))
- f = pygame.image.load('anim/f.jpg').convert()
- f = pygame.transform.scale(f, (W, H))
- #шрифт
- fnt = "fonts/Starter.ttf"
- #настройки платформы paddle
- paddle_w = 330
- paddle_h = 35
- paddle_speed = 20
- paddle = pygame.Rect(W//2 - paddle_w//2, H - paddle_h - 10, paddle_w, paddle_h)
- #шарик ball
- ball_radius = 20
- ball_speed = 8
- ball_rect = int(ball_radius * 2**0.5) #нашел сторону квадрата вписанного в шарик
- ball = pygame.Rect(W//2-10, paddle.top-35, ball_rect, ball_rect)
- dx = 0
- dy = 0
- #блоки
- block_list = [pygame.Rect(20 + 109 * i, 70 + 60 * j, 90, 40) for i in range(9) for j in range(4)]
- block_color = [(random.randint(0,255),random.randint(0,255),random.randint(0,255)) for i in range(10) for j in range(4)]
- '''for i in range(10):
- for j in range(4):
- block_list = [pygame.Rect(10 + 120 * i, 10 + 70 * j, 100, 50)]
- block_color = [random.randint(0,255),random.randint(0,255),random.randint(0,255)]'''
- #функция проверки о какой край платформы отбивается мяч
- def prov_krai(dx, dy, ball, rect):
- if dx>0: krai_x = ball.right - rect.left
- else: krai_x = rect.right - ball.left
- if dy>0: krai_y = ball.bottom - rect.top
- else: krai_y = rect.bottom - ball.top
- if abs(krai_x - krai_y) < 5:
- dx = -dx
- dy = -dy
- elif krai_x > krai_y: dy = -dy
- elif krai_y > krai_x: dx = -dx
- return dx, dy
- #пробел
- one_space=True
- #для аним фона
- i=-1
- #иконки шапки
- hp = pygame.image.load('anim/hp.png').convert() # жизни
- hp.set_colorkey([0,0,0])
- hp = pygame.transform.scale(hp, (100, 50))
- hp_score = 3
- ts = pygame.image.load('anim/clock.png').convert() # тайм стоп
- ts.set_colorkey([0,0,0])
- ts = pygame.transform.scale(ts, (50, 50))
- ts_score = 3
- ts_time = 0
- ts_key = True
- chechet = False
- col = 99
- ln = pygame.image.load('anim/line.png') #неон линия
- #ts.set_colorkey([0,0,0])
- ln = pygame.transform.scale(ln, (1900, 25))
- #счет
- rec = 0
- #звуки
- pygame.mixer.music.load('music/lofi.mp3')
- pygame.mixer.music.play(-1)
- pygame.mixer.music.set_volume(0.4)
- sound1 = pygame.mixer.Sound('music/time stop.mp3')
- #показывать курсор в окне или нет
- #pygame.mouse.set_visible(False)
- running = True
- while running:
- #фон
- screen.blit(f, [0, 0])
- '''
- i+=1
- q = pygame.image.load('retro/2f5e4967a0cb486ba49dc681c2fa6afaNvaT9cmD6MALj8MD-' + str(i) + '.png').convert()
- ql = pygame.transform.scale(q, (1000, 850))
- screen.blit(ql, [0, 0])
- if i == 22: i = -1
- '''
- screen.blit(ln, [-300, 45])
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- running = False
- elif event.type == pygame.KEYDOWN:
- if event.key == pygame.K_ESCAPE:
- running = False
- '''управление
- if event.key == pygame.K_LEFT and paddle.left > 0:
- paddle.left -= paddle_speed
- if event.key == pygame.K_RIGHT and paddle.right > 0:
- paddle.right += paddle_speed'''
- # тайм стоп
- if event.key == pygame.K_UP and ts_key == True and ts_score>0:
- ts_key = False
- ts_score -= 1
- dxx1 = dx
- dyy1 = dy
- sound1.play()
- # управление платформы
- press = pygame.key.get_pressed() # нажатие
- if press[pygame.K_LEFT] and paddle.left > 0:
- paddle.left -= paddle_speed
- if press[pygame.K_RIGHT] and paddle.right < W:
- paddle.right += paddle_speed
- #отрисовка объектов
- [pygame.draw.rect(screen, block_color[color], block) for color, block in enumerate(block_list)]
- pygame.draw.rect(screen, pygame.Color('blue'), paddle)
- pygame.draw.circle(screen, pygame.Color('gray'), ball.center, ball_radius)
- '''pygame.draw.line(screen, pygame.Color('gray'), (0,55), (1000, 55), 2 )'''
- #пробел для старта
- space = pygame.key.get_pressed()
- if one_space == True:
- if press[pygame.K_LEFT] and paddle.left > 0:
- ball.left -= paddle_speed
- if press[pygame.K_RIGHT] and paddle.right < W:
- ball.right += paddle_speed
- if space[pygame.K_SPACE] and one_space == True:
- dx, dy, one_space = 1, -1, False
- #движение шарика
- ball.x += ball_speed * dx
- ball.y += ball_speed * dy
- #отражения от левой и правой части
- if ball.centerx < ball_radius or ball.centerx > W - ball_radius:
- dx = -dx
- #отражение от потолка
- if ball.centery < ball_radius + 75:
- dy = -dy
- #отражение от платформы
- if ball.colliderect(paddle) and dy>0: #если прямоугольники столкнулись вернет True
- dx, dy = prov_krai(dx, dy, ball, paddle)
- #отражение от блоков и их удаление
- prov_hit = ball.collidelist(block_list) # возвращает индекс блока с которым столкновение
- if prov_hit != -1: # и -1 если столкновения нет
- rect_hit = block_list.pop(prov_hit) # .pop удаляет объект из списка по индексу
- color_hit = block_color.pop(prov_hit)
- rec+=30
- dx, dy = prov_krai(dx, dy, ball, rect_hit)
- ball_speed += 0.2
- #поражение, -жизни
- if ball.bottom > H:
- ball.center = paddle.centerx, paddle.centery-40
- dx=0
- dy=0
- one_space = True
- hp_score -= 1
- if hp_score == 3:
- screen.blit(hp, [0, 0])
- screen.blit(hp, [70, 0])
- screen.blit(hp, [140, 0])
- if hp_score == 2:
- screen.blit(hp, [0, 0])
- screen.blit(hp, [70, 0])
- if hp_score == 1:
- screen.blit(hp, [0, 0])
- if hp_score == 0:
- print('Game over')
- exit()
- # победа
- if not len(block_list):
- print('WIN')
- rec+=30
- exit()
- #рекорд
- font = pygame.font.Font(fnt, 60)
- text = font.render(f'{rec}', 1, [255, 100, 200])
- screen.blit(text, [W//2-30, -10])
- record = open('record.txt')
- r = int(record.read())
- record.close()
- if (rec > r):
- record = open('record.txt', 'w')
- record.write(str(rec))
- record.close()
- #тайм стопы
- if ts_key == False:
- dx = 0
- dy = 0
- ts_time += 1
- chechet = True
- if ts_time == 100:
- ts_time = 0
- dx = dxx1
- dy = dyy1
- ts_key = True
- chechet = False
- col = 99
- if chechet == True:
- font = pygame.font.Font(fnt, 40)
- col-=1
- text = font.render(f'{col}', 1, [0, 0, 0])
- if col > 9:
- screen.blit(text, [ball.centerx-15, ball.bottom-40])
- if col < 10:
- screen.blit(text, [ball.centerx-9, ball.bottom - 40])
- '''ts_press = pygame.key.get_pressed()
- if ts_press[pygame.K_UP] and ts_key == False:
- #ts_key = True
- dx1, dy1 = dx, dy
- dx = 0
- dy = 0
- ts_score -= 1
- print(ts_time)
- ts_time += 1
- print(ts_time)
- if ts_time == 20 and ts_key == True:
- dx, dy = dx1, dy1
- ts_key = False'''
- if ts_score == 3:
- screen.blit(ts, [920, 0])
- screen.blit(ts, [850, 0])
- screen.blit(ts, [780, 0])
- if ts_score == 2:
- screen.blit(ts, [920, 0])
- screen.blit(ts, [850, 0])
- if ts_score == 1:
- screen.blit(ts, [920, 0])
- pygame.display.flip()
- time.sleep(0.02)
- pygame.quit()
Advertisement
Add Comment
Please, Sign In to add comment