fevzi02

шарики 2.0

Nov 11th, 2021 (edited)
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.81 KB | None | 0 0
  1. import math
  2. import random
  3. import pygame
  4. import sys
  5. class Game:
  6.     def __init__(self, number):
  7.         color_list = ["WHITE", "RED", "GREEN", "BLUE", "DARKGRAY", "PUPLE"]
  8.         self.list_class_instance = []
  9.  
  10.         for numb in range(number):
  11.             x0 = random.randint(61,1080-61)
  12.             y0 = random.randint(61,720-61)
  13.             self.list_class_instance.append(Boll(x0, y0, color_list[random.randint(0,len(color_list)-1)] ))
  14.         #--------------------------------------------------------------------------------------------------
  15.         pygame.init()
  16.  
  17.         screen = pygame.display.set_mode((1080, 720))
  18.         clock = pygame.time.Clock()
  19.  
  20.         while True:
  21.             screen.fill((78, 74, 59))
  22.             for lsi in self.list_class_instance:
  23.                 if len(self.list_class_instance) != 1:
  24.                     pygame.draw.circle(screen, lsi.color, lsi.pos(), lsi.radius, width=0)
  25.                 else:
  26.                     font = pygame.font.SysFont('stxingkai', 80)
  27.                     text = "Победил - " + lsi.color_key
  28.                     text1 = font.render(text, True, (255, 255, 255))
  29.                     text_rect = text1.get_rect()
  30.                     text_x = screen.get_width() / 2 - text_rect.width / 2
  31.                     text_y = screen.get_height() / 2 - text_rect.height / 2
  32.                     screen.blit(text1, [text_x, text_y])
  33.                 if lsi.y <= lsi.radius+1 :
  34.                     lsi.setVector("y")
  35.                 if lsi.y >= 720-lsi.radius-1 :
  36.                     lsi.setVector("y")
  37.                 if lsi.x <= lsi.radius+1  :
  38.                     lsi.setVector("x")
  39.                 if lsi.x >= 1080-lsi.radius-1 :
  40.                     lsi.setVector("x")
  41.                 lsi.x += lsi.vector()[0]
  42.                 lsi.y += lsi.vector()[1]
  43.             self.exam()
  44.             for event in pygame.event.get():
  45.                 if event.type == pygame.QUIT:
  46.                     pygame.quit()
  47.                     sys.exit()
  48.             pygame.display.flip()
  49.             clock.tick(60)
  50.  
  51.     def exam(self):
  52.         self.dell_Boll()
  53.         for i in range(len(self.list_class_instance)):
  54.             for j in range(len(self.list_class_instance)):
  55.                 bool = False
  56.                 val = 0
  57.                 if self.list_class_instance[i] != self.list_class_instance[j]:
  58.                     if self.list_class_instance[i].radius > self.list_class_instance[j].radius:
  59.                         val = 1
  60.                     elif self.list_class_instance[i].radius < self.list_class_instance[j].radius:
  61.                         val = 2
  62.                     elif self.list_class_instance[i].radius == self.list_class_instance[j].radius:
  63.                         val = 3
  64.                     crossing_distance = self.list_class_instance[i].radius + self.list_class_instance[j].radius
  65.                     if self.list_class_instance[i].pos()[0] == self.list_class_instance[j].pos()[0]:
  66.                         distance = abs(self.list_class_instance[i].pos()[1] - self.list_class_instance[j].pos()[1])
  67.                         if distance == self.list_class_instance[i].radius + self.list_class_instance[j].radius:
  68.                             bool = True
  69.                     elif self.list_class_instance[i].pos()[1] == self.list_class_instance[j].pos()[1]:
  70.                         distance = abs(self.list_class_instance[i].pos()[0] - self.list_class_instance[j].pos()[0])
  71.                         if distance == crossing_distance:
  72.                             bool = True
  73.                     else:
  74.                         x = self.list_class_instance[i].pos()[0] - self.list_class_instance[j].pos()[0]
  75.                         y = self.list_class_instance[i].pos()[1] - self.list_class_instance[j].pos()[1]
  76.                         distance = round((x ** 2 + y ** 2) ** 0.5)
  77.                         if distance <= crossing_distance:
  78.                             bool = True
  79.                     if bool:
  80.                         if val == 1:
  81.                             self.list_class_instance[i].setRadiusminus("+")
  82.                             self.list_class_instance[j].setRadiusminus("-")
  83.                         elif val == 2:
  84.                             self.list_class_instance[i].setRadiusminus("-")
  85.                             self.list_class_instance[j].setRadiusminus("+")
  86.                         elif val == 3:
  87.                             self.list_class_instance[i].setRadiusminus("-")
  88.                             self.list_class_instance[j].setRadiusminus("-")
  89.                     #print(val)
  90.     def dell_Boll(self):
  91.         for lsi in self.list_class_instance:
  92.             if lsi.radius <= 1:
  93.                 self.list_class_instance.remove(lsi)
  94.                 del lsi
  95.  
  96. class Boll:
  97.     def __init__(self, x0=360, y0=540, color_key="RED", radius=60):
  98.         self.starts_x = [-2, -1, 1, 2]
  99.         self.starts_y = -2
  100.         random.shuffle(self.starts_x)
  101.         self.radius = radius
  102.         self.x = x0
  103.         self.y = y0
  104.         self.color_key = color_key
  105.         color_dict = { "WHITE" : (255, 255, 255),
  106.             "RED" : (220, 0, 0), "GREEN" : (0, 220, 0),
  107.             "BLUE" : (0, 0, 225), "DARKGRAY" : (40, 40, 40),
  108.             "PUPLE" : (120, 0, 120) }
  109.         self.color = (color_dict[color_key])
  110.  
  111.     def vector(self):
  112.         return (self.starts_x[0], self.starts_y)
  113.  
  114.     def setVector(self, x_y):
  115.         if x_y == "y":
  116.             self.starts_y =- self.starts_y
  117.         if x_y == "x":
  118.             self.starts_x[0] =- self.starts_x[0]
  119.  
  120.     def pos(self):
  121.         return (self.x, self.y)
  122.  
  123.     def setRadiusminus(self, znak):
  124.         if znak == "-":
  125.             self.radius -= 1
  126.         elif znak == "+":
  127.             self.radius += 0.5
  128.  
  129.     def setX(self, x):
  130.         self.x = x
  131.  
  132.     def setY(self, y):
  133.         self.y = y
  134.  
  135.  
  136. Game(10)
  137.  
Add Comment
Please, Sign In to add comment