Уведомления

Группа в Telegram: @pythonsu

#1 Июль 1, 2021 17:15:36

paporotniik
Зарегистрирован: 2021-07-01
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Не отрисовывает лабиринт для игры

Помогите пожалуйста понять в чем моя ошибка

Прикреплённый файлы:
attachment Pacman.py (3,8 KБ)

Офлайн

#2 Июль 3, 2021 01:26:42

Ocean
Зарегистрирован: 2021-03-14
Сообщения: 131
Репутация: +  9  -
Профиль   Отправить e-mail  

Не отрисовывает лабиринт для игры

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()

Вот че получилось https://ibb.co/BVLc2SC

Синии линии теперь рисует, но лабиринтом это явно не назовешь. У тебя с исходниками карты че т не то. Например, зачем значение 3, если оно игнорируется, как и ноль?












Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version