Змейка…
Красота пока не нужна. Хочется более детального движения фишки. Логика тоже вызывает вопросы.
Подскажите, пожалуйста, в правильном направлении работаем?
Спасибо!
# импорт библиотек import pygame import random import os # ввод констант WIDTH = 700 HEIGHT = 700 FPS = 60 WHITE = (255, 255, 255) BLACK = (0, 0, 0) RED = (255, 0, 0) GREEN = (0, 255, 0) BLUE = (0, 0, 255) YELLOW = (255, 255, 0) KOORD = ((30, 665), (108, 653), (177, 647), (251, 648), (322, 642), (390, 641), (462, 648), (528, 653), (601, 659), (674, 656), (669, 584), (602, 583), (527, 577), (460, 569), (392, 573), (322, 571), (249, 577), (179, 576), (108, 573), (33, 582), (33, 509), (111, 510), (181, 508), (253, 505), (322, 503), (389, 501), (462, 505), (531, 503), (603, 515), (671, 515), (669, 439), (600, 444), (522, 436), (460, 434), (386, 435), (318, 435), (246, 442), (178, 440), (103, 437), (37, 440), (32, 374), (107, 372), (178, 373), (245, 371), (320, 370), (387, 371), (468, 372), (527, 367), (603, 370), (670, 369), (669, 296), (598, 296), (531, 302), (466, 306), (385, 304), (318, 304), (247, 305), (180, 302), (106, 305), (31, 306), (35, 235), (108, 234), (178, 234), (249, 234), (319, 233), (388, 234), (454, 236), (524, 237), (602, 234), (666, 233), (663, 166), (593, 171), (523, 169), (454, 166), (385, 167), (315, 166), (244, 167), (181, 167), (109, 168), (38, 165), (35, 100), (112, 103), (180, 106), (252, 101), (320, 99), (389, 98), (457, 96), (523, 97), (587, 101), (665, 98), (662, 33), (586, 32), (522, 32), (454, 33), (379, 31), (315, 34), (247, 36), (175, 36), (107, 38), (41, 38)) # создание игры и окна pygame.init() screen = pygame.display.set_mode((WIDTH, HEIGHT)) pygame.display.set_caption("Змеи и лестницы") clock = pygame.time.Clock() font_name = pygame.font.match_font('arial') game_folder = os.path.dirname(__file__) # загрузка игровой графики background = pygame.image.load(os.path.join(game_folder, 'pole.png')).convert() background_rect = background.get_rect() def draw_text(surf, text, size, x, y): """пишет текст в цикле игры""" font = pygame.font.Font(font_name, size) text_surface = font.render(text, True, BLACK, WHITE) text_rect = text_surface.get_rect() text_rect.midtop = (x, y) surf.blit(text_surface, text_rect) def key(param): """Отработка нажатия на пробел""" resp = False keys = pygame.key.get_pressed() if keys[param]: resp = True return resp def open_game(): """Начальная заставка игры""" draw_text(screen, "ЗМЕИ И ЛЕСТНИЦЫ", 64, WIDTH / 2, HEIGHT / 4) draw_text(screen, "Игра с кубиком", 64, WIDTH / 2, HEIGHT / 2) draw_text(screen, "Нажми кнопку s", 64, WIDTH / 2, HEIGHT * 3 / 4) if key(pygame.K_s): Loop.flag_begin = False Loop.flag_gamer_turn = True def victor(): """Заставка победа и выход в начало""" draw_text(screen, "Победил {} игрок!".format(Loop.flag_vic), 64, WIDTH / 2, HEIGHT / 4) draw_text(screen, "Нажми кнопку f", 44, WIDTH / 2, HEIGHT / 2) if key(pygame.K_f): player.index = 0 player1.index = 0 player.rect.center = KOORD[player.index] player1.rect.center = KOORD[player1.index] Loop.flag_begin = True Loop.flag_gamer_turn = False Loop.flag_vipalo = False Loop.flag_hod = False Loop.flag_victor = False class Player(pygame.sprite.Sprite): """Основной класс для игроков""" def __init__(self, color, name): pygame.sprite.Sprite.__init__(self) self.name = name self.image = pygame.Surface((20, 20)) self.image.fill(color) self.rect = self.image.get_rect() self.index = 0 self.rect.center = KOORD[self.index] def brosok(self): """Игрок бросает кубик""" draw_text(screen, "{} игрок бросает кубик".format(self.name), 44, WIDTH / 2, HEIGHT / 4) draw_text(screen, "Нажми кнопку d", 44, WIDTH / 2, HEIGHT / 2) if key(pygame.K_d): self.kubik = random.randint(1, 6)#int(input("input")) Loop.flag_gamer_turn = False Loop.flag_vipalo = True def vipalo(self): """Заставка выпало на кубике""" draw_text(screen, "Выпадает {}".format(self.kubik), 64, WIDTH / 2, HEIGHT / 4) draw_text(screen, "Нажми кнопку c", 44, WIDTH / 2, HEIGHT / 2) if key(pygame.K_c): Loop.flag_vipalo = False Loop.flag_hod = True def hod(self): """Движение фишки""" def foo(): nonlocal x, x1, y, y1 if x!=x1 or y!=y1: if x!=x1: if x<x1: x += 1 elif x>x1: x -= 1 if y!=y1: if y<y1: y += 1 elif y>y1: y -= 1 self.rect.center = x, y foo() if self.kubik: if self.index==98: Loop.flag_vic = self.name Loop.flag_hod = False Loop.flag_victor = True x, y = KOORD[self.index] x1, y1 = KOORD[self.index + 1] foo() print(self.index) self.index += 1 self.kubik -= 1 else: self.turner() Loop.flag_hod = False Loop.flag_gamer_turn = True def turner(self): """Переход хода""" if Loop.flag_turn==1: Loop.flag_turn = 2 else: Loop.flag_turn = 1 class Loop: """Здесь будем хранить флаги цикла игры""" flag_begin = True flag_gamer_turn = False flag_vipalo = False flag_hod = False flag_turn = 1 flag_victor = False flag_vic = None player = Player(GREEN, "Первый") player1 = Player(RED, "Второй") all_sprites = pygame.sprite.Group() all_sprites.add(player, player1) # цикл игры running = True while running: # скорость цикла clock.tick(FPS) # контроль выхода крестиком for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # рендеринг screen.blit(background, background_rect) all_sprites.draw(screen) # начальная заставка if Loop.flag_begin: open_game() # заставка бросок игрока if Loop.flag_gamer_turn: if Loop.flag_turn==1: player.brosok() else: player1.brosok() # заставка выпало if Loop.flag_vipalo: if Loop.flag_turn==1: player.vipalo() else: player1.vipalo() # ход игрока if Loop.flag_hod: if Loop.flag_turn==1: player.hod() else: player1.hod() # заставка победа if Loop.flag_victor: victor() # переворот экрана pygame.display.flip() # выход из игры pygame.quit()