Merge branch 'master' of https://git.lamaisondescouillons.fr/dvoisin/pacman
This commit is contained in:
commit
7f2faeb27f
@ -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)
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user