Program z rysowaniem mapy z pliku txt

0

Stworzylem sobie pierw map edytor i zapisuje mape do pliku txt. Przykladowo kawalek kodu
map.txt

0 0 box.png Kolizja
1 0 box.png Kolizja

Tak wyglada ładowanie i rysowanie mapy

import os
import pygame

# słownik zawierający obrazki dla poszczególnych nazw kafelków
tile_images = {}


# funkcja ładująca obrazki z katalogu gfx
def load_tile_images():
    for file in os.listdir('gfx'):
        name, ext = os.path.splitext(file)
        if ext == '.png':
            try:
                tile_images[name] = pygame.image.load(os.path.join('gfx', file)).convert_alpha()
            except pygame.error:
                print(f'Nie udało się załadować obrazka {name}')
            else:
                print(f'Loaded image: {name}')
class Tile:
    def __init__(self, x, y, name, options):
        self.x = x
        self.y = y
        self.name = name
        self.options = options

        # utworzenie prostokąta reprezentującego kafelek
        self.rect = pygame.Rect(x * 32, y * 32, 32, 32)
        print(name)
        # pobranie obrazka dla kafelka z słownika
        self.image = tile_images[name]

    def draw(self, surface):
        surface.blit(self.image, self.rect)


class Map:
    def __init__(self):
        self.tiles = []

    def load_from_file(self, filename):
        with open(filename, 'r') as f:
            lines = f.readlines()

        for line in lines:
            x, y, name, options = line.split(' ')
            print(line.split(' '))
            x, y = int(x), int(y)
            options = options.split(' ')
            try:
                tile = Tile(x, y, name, options)
            except KeyError:
                print(f'Nie ma obrazka o nazwie {name} w słowniku')
                return
            self.tiles.append(tile)

    def draw(self, surface):
        for tile in self.tiles:
            tile.draw(surface)

Takie dane dostaje z printow po uruchomieniu

Hello from the pygame community. https://www.pygame.org/contribute.html
Loaded image: box
Loaded image: door
Loaded image: kamien
Loaded image: kij
Loaded image: white-boden
['0', '0', 'box.png', 'Kolizja\n']
box.png
Nie ma obrazka o nazwie box.png w słowniku

Wczesniej program mi sie nie uruchamial i caly czas pokazywał problem w linijce "tile = Tile(x, y, name, options)". Dodałem try ...except KeyError i jest spoko program sie uruchamia ale nic nie ładuje. Nie rozumiem gdzie lezy bład albo o czym zapomnialem. Bo bez try... dostaje takie bledy. Wszystkie grafiki potrzebne sa i w katalogu i tam gdzie pliki wykonywalne i bez zmian...

Traceback (most recent call last):
  File "C:\Users\luki3\python projekty\server\main.py", line 56, in <module>
    main()
  File "C:\Users\luki3\python projekty\server\main.py", line 26, in main
    game_map.load_from_file('map.txt')
  File "C:\Users\luki3\python projekty\server\map.py", line 49, in load_from_file
    tile = Tile(x, y, name, options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\luki3\python projekty\server\map.py", line 30, in __init__
    self.image = tile_images[name]
                 ~~~~~~~~~~~^^^^^^
KeyError: 'box.png'
1

Nie chciało mi się czytać dokumentacji, ale wygląda to tak, jakbyś miał w title_images obrazek box, nie box.png, więc powinieneś się odwoływać do box.

0

Dzieki nie zauwazylem zle sie odnosilem ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1