This commit is contained in:
odonadio 2019-11-16 18:54:43 +01:00
commit 7f2faeb27f
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