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'