def move(self, other): ''' Вводишь предыдущий шарик (который ближе к башке) и он двигает этот. Движение змеи происходит с хвоста ''' self.x = other.x self.y = other.y self.coords = Vector2d(self.x, self.y)
def __init__(self, color=colors.skins_snake, name=0): ''' Создает новую змею в случайном месте, длиной 50 шариков. Координатой змеи считаются координаты центра головы. ''' ''' Не готово: 1) Имя змеи ''' if color == colors.skins_snake: self.colors = random.choice(colors.skins_snake) else: self.colors = color self.num = len(self.colors) self.name = name self.energy = 0 self.x = 500 self.y = 500 self.coords = Vector2d(self.x, self.y) self.r = 5 config.snake_radius = self.r self.length = 0 self.life = 1 self.balls = [] head = Head(color=self.colors[0], x=self.x, y=self.y) self.balls += [head] self.length += 1 for i in range(9): color = self.colors[(i + 1) % self.num] new_ball = Ball(x=self.x, y=self.y, color=color, r=5) self.balls += [new_ball] self.length += 1 self.energy = self.length self.speed_timer = 0
def __init__(self, x, y, color, r): ''' Создает шарик змеи с заданными координатами и радиусом. ''' self.r = r self.x = x self.y = y self.coords = Vector2d(self.x, self.y) self.color = color
def move(self, speeding=1): ''' Двигает змею, начиная с последнего шарика, меняяя его координаты на координаты предыдущего. Для головы движение прописано в отдельном классе. Speeding принимает значение либо 1, либо 2-4, когда зажата кнопка мыши. ''' if len(self.balls) > 9: for i in range(speeding): for b in reversed(self.balls): if self.balls.index(b) > 0: b.move(self.balls[(self.balls.index(b) - 1)]) else: b.move(speeding) self.x = b.x self.y = b.y self.coords = Vector2d(self.x, self.y) self.hit() self.eat() if speeding != 1: self.speed_timer += 1 else: self.speed_timer = 0 if self.speed_timer >= 4: self.speed_timer = 0 self.energy -= 1 self.reduction() else: for b in reversed(self.balls): if self.balls.index(b) > 0: b.move(self.balls[(self.balls.index(b) - 1)]) else: b.move(speeding) self.x = b.x self.y = b.y self.coords = Vector2d(self.x, self.y) self.hit() self.eat() if self.x - self.r < 0 or self.x + self.r > config.max_width or self.y + self.r > config.max_height or self.y - self.r < 0: self.destroyed()
def __init__(self, r=0, x=0, y=0, color=colors.food): ''' Создается 1 шарик еды, с заданными координатами, радиусом, цвет выбирается случайно из списка цветов. ''' self.x = x self.y = y self.r = r if color == colors.food: self.color = random.choice(color) else: self.color = color if self.r == 0: self.r = random.uniform(1, 5) self.energy = 0.5 * self.r config.food_energy += self.energy if self.x == 0 and self.y == 0: # Создает шарик еды в случайном месте self.x = random.uniform(5, config.max_width - 5) self.y = random.uniform(5, config.max_height - 5) self.coords = Vector2d(self.x, self.y)
class road1: pos = Vector2d(100, 100) pos_np = np.array([100, 100]) angle = 0 data = [ Line_seg(Vector2d(22, 273), Vector2d(33, 76)), Line_seg(Vector2d(33, 76), Vector2d(151, 33)), Line_seg(Vector2d(151, 33), Vector2d(350, 26)), Line_seg(Vector2d(350, 26), Vector2d(552, 31)), Line_seg(Vector2d(552, 31), Vector2d(726, 60)), Line_seg(Vector2d(726, 60), Vector2d(785, 159)), Line_seg(Vector2d(785, 159), Vector2d(708, 225)), Line_seg(Vector2d(708, 225), Vector2d(561, 222)), Line_seg(Vector2d(561, 222), Vector2d(505, 188)), Line_seg(Vector2d(505, 188), Vector2d(387, 189)), Line_seg(Vector2d(387, 189), Vector2d(318, 262)), Line_seg(Vector2d(318, 262), Vector2d(400, 343)), Line_seg(Vector2d(400, 343), Vector2d(573, 332)), Line_seg(Vector2d(573, 332), Vector2d(684, 333)), Line_seg(Vector2d(684, 333), Vector2d(761, 385)), Line_seg(Vector2d(761, 385), Vector2d(773, 509)), Line_seg(Vector2d(773, 509), Vector2d(719, 545)), Line_seg(Vector2d(719, 545), Vector2d(561, 562)), Line_seg(Vector2d(561, 562), Vector2d(471, 529)), Line_seg(Vector2d(471, 529), Vector2d(399, 470)), Line_seg(Vector2d(399, 470), Vector2d(299, 492)), Line_seg(Vector2d(299, 492), Vector2d(232, 555)), Line_seg(Vector2d(232, 555), Vector2d(140, 567)), Line_seg(Vector2d(140, 567), Vector2d(50, 525)), Line_seg(Vector2d(50, 525), Vector2d(36, 426)), Line_seg(Vector2d(36, 426), Vector2d(20, 349)), Line_seg(Vector2d(20, 349), Vector2d(22, 273)), Line_seg(Vector2d(126, 147), Vector2d(221, 112)), Line_seg(Vector2d(221, 112), Vector2d(364, 98)), Line_seg(Vector2d(364, 98), Vector2d(514, 103)), Line_seg(Vector2d(514, 103), Vector2d(657, 117)), Line_seg(Vector2d(657, 117), Vector2d(690, 141)), Line_seg(Vector2d(690, 141), Vector2d(648, 149)), Line_seg(Vector2d(648, 149), Vector2d(589, 142)), Line_seg(Vector2d(589, 142), Vector2d(525, 134)), Line_seg(Vector2d(525, 134), Vector2d(475, 128)), Line_seg(Vector2d(475, 128), Vector2d(428, 119)), Line_seg(Vector2d(428, 119), Vector2d(355, 116)), Line_seg(Vector2d(355, 116), Vector2d(294, 136)), Line_seg(Vector2d(294, 136), Vector2d(265, 163)), Line_seg(Vector2d(265, 163), Vector2d(237, 211)), Line_seg(Vector2d(237, 211), Vector2d(222, 279)), Line_seg(Vector2d(222, 279), Vector2d(235, 328)), Line_seg(Vector2d(235, 328), Vector2d(289, 368)), Line_seg(Vector2d(289, 368), Vector2d(352, 385)), Line_seg(Vector2d(352, 385), Vector2d(393, 385)), Line_seg(Vector2d(393, 385), Vector2d(416, 388)), Line_seg(Vector2d(416, 388), Vector2d(477, 395)), Line_seg(Vector2d(477, 395), Vector2d(539, 398)), Line_seg(Vector2d(539, 398), Vector2d(601, 397)), Line_seg(Vector2d(601, 397), Vector2d(644, 399)), Line_seg(Vector2d(644, 399), Vector2d(679, 413)), Line_seg(Vector2d(679, 413), Vector2d(686, 440)), Line_seg(Vector2d(686, 440), Vector2d(677, 469)), Line_seg(Vector2d(677, 469), Vector2d(649, 485)), Line_seg(Vector2d(649, 485), Vector2d(606, 487)), Line_seg(Vector2d(606, 487), Vector2d(550, 473)), Line_seg(Vector2d(550, 473), Vector2d(521, 451)), Line_seg(Vector2d(521, 451), Vector2d(479, 429)), Line_seg(Vector2d(479, 429), Vector2d(432, 411)), Line_seg(Vector2d(432, 411), Vector2d(400, 399)), Line_seg(Vector2d(400, 399), Vector2d(336, 390)), Line_seg(Vector2d(336, 390), Vector2d(285, 400)), Line_seg(Vector2d(285, 400), Vector2d(242, 422)), Line_seg(Vector2d(242, 422), Vector2d(211, 463)), Line_seg(Vector2d(211, 463), Vector2d(168, 459)), Line_seg(Vector2d(168, 459), Vector2d(125, 411)), Line_seg(Vector2d(125, 411), Vector2d(102, 339)), Line_seg(Vector2d(102, 339), Vector2d(110, 281)), Line_seg(Vector2d(110, 281), Vector2d(120, 211)), Line_seg(Vector2d(120, 211), Vector2d(126, 147)) ] goals = [ Line_seg(Vector2d(196, 155), Vector2d(133, 22)), Line_seg(Vector2d(285, 127), Vector2d(279, 15)), Line_seg(Vector2d(431, 113), Vector2d(430, 17)), Line_seg(Vector2d(566, 123), Vector2d(580, 19)), Line_seg(Vector2d(651, 134), Vector2d(755, 62)), Line_seg(Vector2d(642, 141), Vector2d(722, 241)), Line_seg(Vector2d(604, 135), Vector2d(575, 232)), Line_seg(Vector2d(528, 124), Vector2d(503, 203)), Line_seg(Vector2d(415, 112), Vector2d(424, 200)), Line_seg(Vector2d(307, 122), Vector2d(389, 210)), Line_seg(Vector2d(224, 214), Vector2d(366, 256)), Line_seg(Vector2d(269, 376), Vector2d(373, 289)), Line_seg(Vector2d(384, 392), Vector2d(393, 323)), Line_seg(Vector2d(419, 397), Vector2d(416, 331)), Line_seg(Vector2d(488, 410), Vector2d(485, 323)), Line_seg(Vector2d(570, 412), Vector2d(569, 314)), Line_seg(Vector2d(671, 423), Vector2d(731, 345)), Line_seg(Vector2d(670, 462), Vector2d(755, 554)), Line_seg(Vector2d(615, 479), Vector2d(634, 581)), Line_seg(Vector2d(555, 455), Vector2d(490, 551)), Line_seg(Vector2d(470, 416), Vector2d(406, 501)), Line_seg(Vector2d(373, 392), Vector2d(371, 497)), Line_seg(Vector2d(237, 403), Vector2d(341, 534)), Line_seg(Vector2d(190, 446), Vector2d(185, 584)), Line_seg(Vector2d(147, 398), Vector2d(22, 457)), Line_seg(Vector2d(127, 334), Vector2d(10, 334)), Line_seg(Vector2d(128, 269), Vector2d(13, 227)) ]
class road3: pos = Vector2d(100, 100) pos_np = np.array([100, 100]) angle = 90 data = [ Line_seg(Vector2d(28, 86), Vector2d(69, 46)), Line_seg(Vector2d(69, 46), Vector2d(159, 38)), Line_seg(Vector2d(159, 38), Vector2d(270, 49)), Line_seg(Vector2d(270, 49), Vector2d(348, 55)), Line_seg(Vector2d(348, 55), Vector2d(420, 57)), Line_seg(Vector2d(420, 57), Vector2d(492, 67)), Line_seg(Vector2d(492, 67), Vector2d(550, 92)), Line_seg(Vector2d(550, 92), Vector2d(613, 136)), Line_seg(Vector2d(613, 136), Vector2d(631, 182)), Line_seg(Vector2d(631, 182), Vector2d(667, 261)), Line_seg(Vector2d(667, 261), Vector2d(673, 321)), Line_seg(Vector2d(673, 321), Vector2d(651, 365)), Line_seg(Vector2d(651, 365), Vector2d(597, 400)), Line_seg(Vector2d(597, 400), Vector2d(544, 421)), Line_seg(Vector2d(544, 421), Vector2d(500, 434)), Line_seg(Vector2d(500, 434), Vector2d(479, 460)), Line_seg(Vector2d(479, 460), Vector2d(472, 507)), Line_seg(Vector2d(472, 507), Vector2d(478, 564)), Line_seg(Vector2d(478, 564), Vector2d(432, 582)), Line_seg(Vector2d(432, 582), Vector2d(353, 581)), Line_seg(Vector2d(353, 581), Vector2d(260, 577)), Line_seg(Vector2d(260, 577), Vector2d(192, 560)), Line_seg(Vector2d(192, 560), Vector2d(130, 519)), Line_seg(Vector2d(130, 519), Vector2d(83, 464)), Line_seg(Vector2d(83, 464), Vector2d(60, 410)), Line_seg(Vector2d(60, 410), Vector2d(47, 354)), Line_seg(Vector2d(47, 354), Vector2d(41, 288)), Line_seg(Vector2d(41, 288), Vector2d(23, 215)), Line_seg(Vector2d(23, 215), Vector2d(20, 163)), Line_seg(Vector2d(20, 163), Vector2d(19, 129)), Line_seg(Vector2d(19, 129), Vector2d(28, 86)), Line_seg(Vector2d(135, 158), Vector2d(198, 156)), Line_seg(Vector2d(198, 156), Vector2d(279, 158)), Line_seg(Vector2d(279, 158), Vector2d(346, 165)), Line_seg(Vector2d(346, 165), Vector2d(417, 169)), Line_seg(Vector2d(417, 169), Vector2d(466, 177)), Line_seg(Vector2d(466, 177), Vector2d(508, 180)), Line_seg(Vector2d(508, 180), Vector2d(553, 219)), Line_seg(Vector2d(553, 219), Vector2d(566, 251)), Line_seg(Vector2d(566, 251), Vector2d(564, 286)), Line_seg(Vector2d(564, 286), Vector2d(552, 309)), Line_seg(Vector2d(552, 309), Vector2d(519, 330)), Line_seg(Vector2d(519, 330), Vector2d(457, 337)), Line_seg(Vector2d(457, 337), Vector2d(417, 359)), Line_seg(Vector2d(417, 359), Vector2d(383, 402)), Line_seg(Vector2d(383, 402), Vector2d(376, 443)), Line_seg(Vector2d(376, 443), Vector2d(368, 481)), Line_seg(Vector2d(368, 481), Vector2d(300, 479)), Line_seg(Vector2d(300, 479), Vector2d(227, 456)), Line_seg(Vector2d(227, 456), Vector2d(193, 408)), Line_seg(Vector2d(193, 408), Vector2d(151, 333)), Line_seg(Vector2d(151, 333), Vector2d(135, 270)), Line_seg(Vector2d(135, 270), Vector2d(140, 222)), Line_seg(Vector2d(140, 222), Vector2d(135, 158)) ] goals = np.flip( np.array([ Line_seg(Vector2d(183, 183), Vector2d(199, 23)), Line_seg(Vector2d(263, 191), Vector2d(305, 33)), Line_seg(Vector2d(395, 201), Vector2d(413, 34)), Line_seg(Vector2d(491, 206), Vector2d(534, 42)), Line_seg(Vector2d(520, 230), Vector2d(641, 130)), Line_seg(Vector2d(536, 270), Vector2d(692, 243)), Line_seg(Vector2d(520, 291), Vector2d(663, 398)), Line_seg(Vector2d(496, 313), Vector2d(560, 436)), Line_seg(Vector2d(432, 338), Vector2d(525, 468)), Line_seg(Vector2d(360, 405), Vector2d(541, 506)), Line_seg(Vector2d(357, 469), Vector2d(510, 553)), Line_seg(Vector2d(339, 467), Vector2d(379, 592)), Line_seg(Vector2d(300, 458), Vector2d(275, 593)), Line_seg(Vector2d(270, 446), Vector2d(158, 567)), Line_seg(Vector2d(209, 386), Vector2d(49, 467)), Line_seg(Vector2d(171, 319), Vector2d(29, 307)), Line_seg(Vector2d(157, 236), Vector2d(13, 191)) ]))
def __init__(self, x_y_tuple): x, y = x_y_tuple Vector2d.__init__(self, x, y)
green = (100, 255, 100) clock = pygame.time.Clock() crashed = False key_pressed = { 'right': False, 'left': False, 'up': False, 'down': False, 'space': False } x = (display_width * 0.45) y = (display_height * 0.5) p1 = Car(Vector2d(100, 100), 40, 20) speed = 200 curr_goal = 0 road = roads.road2.data goals = roads.road2.goals while not crashed: for event in pygame.event.get(): if event.type == pygame.QUIT: crashed = True if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT or event.key == pygame.K_a: key_pressed['left'] = True if event.key == pygame.K_RIGHT or event.key == pygame.K_d:
import colors #шняга в которой будут задаваться численные параметры и цветовое оформление игр, а еще все штуки на которые надо ссылаться from vector import Vector2d screen_width = 800 screen_height = 600 max_width = 800 max_height = 600 background_image = 'images/background_1(2, 3, 4).jpg' #потом выберем фон screen = 0 process = True energy = 0 food_energy = 0 snake_energy = 0 max_energy = 100 snake_radius = 5 # Радиус змеи в абсолютных координатах, меняется в процессе игры radius = 10 # Сколько реальных пикселей занимает радиус змеи (на экране) center = Vector2d(screen_width // 2, screen_height // 2) coefficient = 0.5 # Коэффициент для нахождения минимального радиуса по которому может двигаться голова змеи length = 0 snakes = [] all_food = []
def __init__(self, joint): self.joint = joint Vector2d.__init__(self, 0, 0)
def __init__(self): self.coords_1 = Vector2d(0, 0) self.coords_2 = Vector2d(0, config.max_height) self.coords_3 = Vector2d(config.max_width, config.max_height) self.coords_4 = Vector2d(config.max_width, 0)