ajout du rendu de la carte

Je tiens à ce qu’il soit noté que le code de ce projet est le plus
sale qu’il m’ait été donné de voir depuis un bon moment.
This commit is contained in:
papush! 2019-11-16 18:09:01 +01:00
parent fe90a5a145
commit 3a9ecba96a
2 changed files with 37 additions and 28 deletions

View File

@ -39,8 +39,9 @@ class Screen:
"""refresh/redraw all""" """refresh/redraw all"""
pac_x, pac_y = self.pacman.position pac_x, pac_y = self.pacman.position
pac_res = self.pacman.resolution pac_res = self.pacman.resolution
self.pacman_sprite.rect.x = int(pac_x / 28 / pac_res * self.screen.get_width()) pacmap.draw(self.screen)
self.pacman_sprite.rect.y = int(pac_y / 31 / pac_res * self.screen.get_height()) self.pacman_sprite.rect.x = int(pac_x / 28 / pac_res * self.screen.get_width()) - 10
self.pacman_sprite.rect.y = int(pac_y / 31 / pac_res * self.screen.get_height()) - 10
# print(self.pacman_sprite.rect.x, self.pacman_sprite.rect.y, self.pacman_sprite.rect.size) # print(self.pacman_sprite.rect.x, self.pacman_sprite.rect.y, self.pacman_sprite.rect.size)
self.entity_group.draw(self.screen) self.entity_group.draw(self.screen)
@ -68,4 +69,4 @@ if __name__ == '__main__':
pacman = m_pacman.Pacman((1,1)) pacman = m_pacman.Pacman((1,1))
pacmap = m_pacmap.Map(maze_img_file="../pacmap_maze1.png") pacmap = m_pacmap.Map(maze_img_file="../pacmap_maze1.png")
phys_motor = PhysicMotor(pacmap, pacman) phys_motor = PhysicMotor(pacmap, pacman)
screen = Screen((560, 620), pacmap, phys_motor, pacman) screen = Screen((560, 620), pacmap, phys_motor, pacman)

View File

@ -2,6 +2,7 @@
from enum import IntEnum from enum import IntEnum
from copy import deepcopy from copy import deepcopy
from PIL import Image from PIL import Image
import pygame
import os import os
class DotTile(IntEnum): class DotTile(IntEnum):
@ -54,10 +55,11 @@ class Map:
1: small pac-dot 1: small pac-dot
2: big pac-dot 2: big pac-dot
""" """
self._surf = pygame.Surface((Map.width * 20, Map.height * 20))
if maze_img_file and os.path.isfile(maze_img_file): if maze_img_file and os.path.isfile(maze_img_file):
print('coucou') print('coucou')
try: try:
self.phys_map = decode_map(maze_img_file) self.phys_map = self.decode_map(maze_img_file)
except Exception as e: except Exception as e:
raise e raise e
else: else:
@ -182,6 +184,35 @@ class Map:
cpt |= dictionnary[dir] cpt |= dictionnary[dir]
self.intersect_map[-1].append(cpt) self.intersect_map[-1].append(cpt)
def draw(self, surf):
surf.blit(self._surf, (0, 0))
def decode_map(self, img_file):
img = Image.open(img_file)
dictionnary = {
(0 , 0, 0): PhysTile.GRD,
(255, 0, 255): PhysTile.GCF,
(0 , 0, 255): PhysTile.WAL,
(0 , 255, 0): PhysTile.GSD,
(0 , 255, 255): PhysTile.GWL,
(255, 0, 0): PhysTile.TPT,
(255, 255, 0): PhysTile.FIT,
}
data = list(img.getdata())
matrix = []
for row in range(img.height):
matrix.append([])
for col in range(img.width):
try:
color = data[col + row*img.width][:3]
tile = dictionnary[color] # avoid alpha component
self._surf.fill(color, pygame.Rect(col*20, row*20, 20, 20))
except:
raise ValueError("Pixel " + str(col) + "," + str(row) + " is invalid")
matrix[-1].append(tile)
return matrix
def explore(matrix, x=-1, y=-1): def explore(matrix, x=-1, y=-1):
"""explore the given matrix and change it (GRD and TPT become FIT)""" """explore the given matrix and change it (GRD and TPT become FIT)"""
@ -205,32 +236,9 @@ def connex(matrix, x=-1, y=-1):
return False return False
return True return True
def decode_map(img_file):
img = Image.open(img_file)
dictionnary = {
(0 , 0, 0): PhysTile.GRD,
(255, 0, 255): PhysTile.GCF,
(0 , 0, 255): PhysTile.WAL,
(0 , 255, 0): PhysTile.GSD,
(0 , 255, 255): PhysTile.GWL,
(255, 0, 0): PhysTile.TPT,
(255, 255, 0): PhysTile.FIT,
}
data = list(img.getdata())
matrix = []
for row in range(img.height):
matrix.append([])
for col in range(img.width):
try:
tile = dictionnary[data[col + row*img.width][:3]] # avoid alpha component
except:
raise ValueError("Pixel " + str(col) + "," + str(row) + " is invalid")
matrix[-1].append(tile)
return matrix
def get_one_in_digit(number): def get_one_in_digit(number):
cpt = 0 cpt = 0
while number: while number:
cpt += number & 1 cpt += number & 1
number //= 2 number //= 2
return cpt return cpt