Форум сайта python.su
Помогите пожалуйста понять в чем моя ошибка
Прикреплённый файлы: Pacman.py (3,8 KБ)
Офлайн
paporotniik
Если я правильно поняла проблему и твой код, то у тебя окружение вот в этой функции должно отрисовываться def draw_enviroment(screen) ?
Если да, то ты ее нигде не вызываешь
Она существует сама по себе в коде
Но это не единственная проблема. Отступы неправильные и много всяких ошибок
for j, in enumerate(row):
Тут ты извлекаешь то, что планировал? явно нет. Попробуй напечатать в консоль row, j и увидишь.
Какие значения у тебя принимает j из этой строки for j in enumerate(row)?
Если j не один, и ни два, то цикл рисует “ничего”
Проконтролируй значения j и ты поймешь выполняются ли твои условия или нет.
Я не эксперт в pygame, но у тебя странно заданы начальная и конечная точка в строках pygame.draw.line(screen, BLUE, j*32, i*32,j*32,i*32+32, 3)
Сейчас функция получает 7 аргументов вместо 5 возможных и формат их неверный
Вот тут в документации описано: http://www.pygame.org/docs/ref/draw.html#pygame.draw.line
Я исправила синтаксис вызова этой функции
Еще непонятно зачем задание “карты лабиринта” grid в отдельной функции def enviroment():.
grid же у тебя статична и никак не вычисляется и не меняется. Ее можно было и переменной в def draw_enviroment(screen) задать, а не вызывать.
Еще в самом начале есть неиспользуемый импорт import random
import pygame import random pygame.init() # запуск pygame # Задаем цвета BLACK = (0, 0, 0) WHITE = (255, 255, 255) RED = (255, 0, 0) BLUE = (0, 0, 255) YELLOW=(255, 255, 0) WIDTH = 800 # ширина игрового окна HEIGHT = 600 # высота игрового окна x_hero = 50 y_hero = 200 hero_speed = 10 hero_width = 50 hero_height = 50 maze_x = 50 maze_y = 0 run = True screen = pygame.display.set_mode((WIDTH, HEIGHT)) # ширина и высота окна pygame.display.set_caption("Pacman") # заголовок окна #цикл игры while run: pygame.time.delay(100) # цикл выполняется каждую 0.1 сек for event in pygame.event.get(): if event.type == pygame.QUIT: run = False keys = pygame.key.get_pressed() # дижение героя if keys[pygame.K_LEFT] and x_hero > 5 : x_hero-=hero_speed if keys[pygame.K_RIGHT] and x_hero < 800 - hero_width - 5 : x_hero+=hero_speed if keys[pygame.K_DOWN] and y_hero < 600 - hero_height - 5 : y_hero+=hero_speed if keys[pygame.K_UP] and y_hero > 5 : y_hero-=hero_speed screen.fill(BLACK) pygame.draw.rect(screen , (YELLOW), (x_hero, y_hero , hero_width , hero_height)) '''for j in range(16): for i in range(12): pygame.draw.line(screen, BLUE, (maze_x, maze_y), (maze_x, maze_y + 50) , 3) maze_y += 100 maze_x += 50''' def enviroment(): grid = ((0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0), (0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0), (1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1), (0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0), (0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0), (0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0), (1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1), (0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0), (0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0), (0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0), (1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1), (0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0), (0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0), (0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0), (1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1), (0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0), (0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0), (0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0)) return grid def draw_enviroment(screen): for i, row in enumerate(enviroment()): for j in row: if j == 1: pygame.draw.line(screen, BLUE, (j*32, i*32),(j*32+32,i*32), 3) pygame.draw.line(screen, BLUE, (j*32, i*32+32),(j*32+32,i*32+32), 3) elif j == 2: pygame.draw.line(screen, BLUE, (j*32, i*32), (j*32,i*32+32), 3) pygame.draw.line(screen, BLUE, (j*32+32, i*32), (j*32+32,i*32+32), 3) draw_enviroment(screen) pygame.display.update() pygame.quit()
Офлайн