import pygame as pg from math import pi, sin, cos from random import * class Game: def __init__(self): self.line = None self.old_color = None self.interval_y = None self.interval_x = None self.colors = [(235, 26, 26), (235, 26, 235), (51, 51, 255), (255, 128, 0), (51, 255, 153), (255, 255, 0), (255, 255, 255), (139, 69, 19), (0, 255, 127), (255, 218, 185), (147, 112, 219), (128, 0, 128), (128, 128, 0), (47, 79, 79), (139, 0, 0), (255, 192, 203), (124, 252, 0), (46, 139, 87), (0, 128, 128), (0, 255, 255)] self.need_colors = sample(self.colors, 10) self.intervals_x = [(430, 460), (350, 430), (245, 350), (165, 245), (130, 165), (130, 165), (165, 245), (245, 350), (350, 430), (430, 460)] self.intervals_y = [(170, 265), (113, 170), (113, 113), (113, 170), (170, 265), (265, 360), (360, 425), (425, 425), (365, 425), (265, 365)] self.line_color = choice(self.need_colors) self.clock = pg.time.Clock() self.speed = 25 # Здесь можно менять скорость self.right = False self.lose = False self.corner = 440 self.scores = 0 self.x = 300 self.y = 430 def render(self, screen_move): # Создание круга из случайных цветов и стрелки pg.draw.arc(screen_move, (self.need_colors[0]), (120, 90, 350, 350), 0, pi / 5, 7) pg.draw.arc(screen_move, (self.need_colors[1]), (120, 90, 350, 350), pi / 5, 2 * pi / 5, 7) pg.draw.arc(screen_move, (self.need_colors[2]), (120, 90, 350, 350), 2 * pi / 5, 3 * pi / 5, 7) pg.draw.arc(screen_move, (self.need_colors[3]), (120, 90, 350, 350), 3 * pi / 5, 4 * pi / 5, 7) pg.draw.arc(screen_move, (self.need_colors[4]), (120, 90, 350, 350), 4 * pi / 5, pi, 7) pg.draw.arc(screen_move, (self.need_colors[5]), (120, 90, 350, 350), pi, 6 * pi / 5, 7) pg.draw.arc(screen_move, (self.need_colors[6]), (120, 90, 350, 350), 6 * pi / 5, 7 * pi / 5, 7) pg.draw.arc(screen_move, (self.need_colors[7]), (120, 90, 350, 350), 7 * pi / 5, 8 * pi / 5, 7) pg.draw.arc(screen_move, (self.need_colors[8]), (120, 90, 350, 350), 8 * pi / 5, 9 * pi / 5, 7) pg.draw.arc(screen_move, (self.need_colors[9]), (120, 90, 350, 350), 9 * pi / 5, 2 * pi, 7) pg.draw.line(screen_move, self.line_color, [300, 270], [self.x, self.y], 9) font = pg.font.Font(None, 50) text = font.render('Счёт:', True, (255, 255, 255)) screen_move.blit(text, (50, 500)) text = font.render(f'{self.scores}/10', True, (255, 255, 255)) screen_move.blit(text, (70, 540)) if self.scores == 10: print("Прекол") self.get_reward(10) def side_change(self): # Изменение стороны и проверка if not self.right: self.right = True elif self.right: self.right = False if color_change: self.old_color = self.line_color while self.old_color == self.line_color: self.line_color = choice(self.need_colors) self.interval_x = self.intervals_x[self.need_colors.index(self.old_color)] self.interval_y = self.intervals_y[self.need_colors.index(self.old_color)] if self.interval_x[0] <= round(self.x) <= self.interval_x[1] and \ ((round(self.y) <= self.interval_y[0] == self.interval_y[1]) or (self.interval_y[0] <= round(self.y) <= self.interval_y[1]) or (round(self.y) >= self.interval_y[0] == self.interval_y[1])): self.scores += 1 self.speed += 10 else: print("Не прекол") scores = self.scores self.get_reward(scores) global running running = False def animation(self): # анимация (изменение координат) if self.right: if self.corner > 90 and self.corner > 270: self.y = sin(abs(self.corner)) * 165 + 270 self.x = cos(abs(self.corner)) * 165 + 295 else: self.y = sin(abs(self.corner)) * 165 + 270 self.x = -cos(abs(self.corner)) * 165 + 295 self.corner += self.speed * self.clock.tick(50000) / 10000 else: if self.corner > 90 or self.corner > 270: self.y = sin(abs(self.corner)) * 165 + 270 self.x = cos(abs(self.corner)) * 165 + 295 else: self.y = sin(abs(self.corner)) * 165 + 270 self.x = -cos(abs(self.corner)) * 165 + 295 self.line = pg.transform.rotate(self.line, self.corner) self.corner -= self.speed * self.clock.tick(50000) / 10000 @staticmethod def get_reward(scope): scope_mass = { "1": 5, "2": 10, "3": 20, "4": 35, "5": 50, "6": 75, "7": 100, "8": 150, "9": 200, "10": 1000 } from modules.DB import UseDB db = UseDB("game") db.update_document( { "save.name": "start" }, { "money": db.find_document({})[0]["money"] + scope_mass[str(scope)] } ) pg.init() size = 600, 600 animation = False color_change = False running = True def start(): global running, animation, color_change pg.init() screen = pg.display.set_mode(size) game = Game() animation = False color_change = False running = True while running: for event in pg.event.get(): if event.type == pg.QUIT: running = False if event.type == pg.MOUSEBUTTONDOWN: # Запуск игры animation = True game.side_change() color_change = True if animation: game.animation() pg.display.update() screen.fill((40, 40, 40)) game.render(screen) pg.display.flip() pg.display.quit()