README complété - épuration du code source
This commit is contained in:
parent
6190790a28
commit
f53f910833
@ -0,0 +1,19 @@
|
||||
Livrable 1 - déplacement et affichage du pacman
|
||||
|
||||
Prérequis:
|
||||
- Python 3
|
||||
modules Python requis:
|
||||
- Pygame
|
||||
- PIL (pillow)
|
||||
|
||||
On pourra installer ces modules avec
|
||||
pip3 install pillow pygame
|
||||
|
||||
Le module à lancer pour voir l'avancée du projet est graphic.py
|
||||
python3 graphic.py
|
||||
|
||||
Les touches associées au déplacement du joueur sont les flèches directionnelles.
|
||||
|
||||
La carte est chargée depuis l'image pacmap_maze1.png, les collisions et les
|
||||
téléporteurs sont gérés ainsi que la mémoire de la prochaine direction voulue
|
||||
par l'utilisateur.
|
@ -34,7 +34,6 @@ class Pacman:
|
||||
self.super_power = 0 # Counter of super pacdots in effect (> 0 means super power is active)
|
||||
self.ghost_combo = 0
|
||||
self.size = (1.8, 1.8) # size related to tile size
|
||||
self.speed = 0.1
|
||||
self.resolution = resolution # when pacman in 0:10 he's in the 1st cell if resolution=10 !!! must be even number
|
||||
self.map_size = map_size
|
||||
|
||||
|
@ -3,23 +3,22 @@
|
||||
import pygame as pg
|
||||
import pacman_sprite
|
||||
import pacman as m_pacman # m_ for module to avoid conflicts
|
||||
from physic_motor import PhysicMotor
|
||||
from physic_engine import PhysicEngine
|
||||
import pacmap as m_pacmap
|
||||
import sys
|
||||
|
||||
pg.init()
|
||||
|
||||
class Screen:
|
||||
def __init__(self, size, pacmap: m_pacmap.Map, physic_motor: PhysicMotor, pacman: m_pacman.Pacman):
|
||||
def __init__(self, size, pacmap: m_pacmap.Map, physic_engine: PhysicEngine, pacman: m_pacman.Pacman):
|
||||
self.screen = pg.display.set_mode(size)
|
||||
# self.screen.set_caption("Pacman")
|
||||
self.physic_motor = physic_motor
|
||||
self.physic_engine = physic_engine
|
||||
self.pacman = pacman
|
||||
self.pacman_sprite = pacman_sprite.PacmanSprite(size[0]/28)
|
||||
self.clock = pg.time.Clock()
|
||||
self.max_fps = 30
|
||||
self.max_fps = 40
|
||||
self.entity_group = pg.sprite.Group(self.pacman_sprite)
|
||||
|
||||
self.loop()
|
||||
|
||||
|
||||
@ -33,7 +32,6 @@ class Screen:
|
||||
pacman.set_next_dir(m_pacman.direction.left)
|
||||
if key[pg.K_RIGHT]:
|
||||
pacman.set_next_dir(m_pacman.direction.right)
|
||||
# print(pacman.direction)
|
||||
|
||||
def refresh(self):
|
||||
"""refresh/redraw all"""
|
||||
@ -42,10 +40,7 @@ class Screen:
|
||||
pacmap.draw(self.screen)
|
||||
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)
|
||||
|
||||
self.entity_group.draw(self.screen)
|
||||
# print(self.entity_group)
|
||||
|
||||
|
||||
def create_maze_surface(self):
|
||||
@ -59,7 +54,7 @@ class Screen:
|
||||
sys.exit()
|
||||
|
||||
self.user_events()
|
||||
self.physic_motor.move_all()
|
||||
self.physic_engine.move_all()
|
||||
self.refresh()
|
||||
|
||||
self.clock.tick(self.max_fps)
|
||||
@ -68,5 +63,5 @@ class Screen:
|
||||
if __name__ == '__main__':
|
||||
pacman = m_pacman.Pacman((1,1))
|
||||
pacmap = m_pacmap.Map(maze_img_file="../pacmap_maze1.png")
|
||||
phys_motor = PhysicMotor(pacmap, pacman)
|
||||
screen = Screen((560, 620), pacmap, phys_motor, pacman)
|
||||
phys_engine = PhysicEngine(pacmap, pacman)
|
||||
screen = Screen((560, 620), pacmap, phys_engine, pacman)
|
||||
|
@ -17,13 +17,6 @@ pacdot_counter = 88
|
||||
score = 0
|
||||
lives = 3
|
||||
|
||||
# p-e à remplacer par la namedtuple direction plus haut
|
||||
# class Direction(IntEnum):
|
||||
# U = 0
|
||||
# D = 1
|
||||
# R = 2
|
||||
# L = 3
|
||||
|
||||
class FruitType(IntEnum):
|
||||
A = 0
|
||||
|
||||
@ -42,18 +35,15 @@ class Pacman:
|
||||
self.super_power = 0 # Counter of super pacdots in effect (> 0 means super power is active)
|
||||
self.ghost_combo = 0
|
||||
self.size = (1.8, 1.8) # size related to tile size
|
||||
self.speed = 0.1
|
||||
self.resolution = resolution # when pacman in 0:10 he's in the 1st cell if resolution=10 !!! must be odd number
|
||||
self.map_size = map_size
|
||||
|
||||
def matrix_position(self):
|
||||
# return (int(self.position[0]), int(self.position[1]))
|
||||
return int(self.position[0] / self.resolution), int(self.position[1] / self.resolution)
|
||||
|
||||
def next_matrix_position(self):
|
||||
next_x = int(self.position[0] / self.resolution + self.direction[0]) % self.map_size[0]
|
||||
next_y = int(self.position[1] / self.resolution + self.direction[1]) % self.map_size[1]
|
||||
print(self.position, next_x, next_y)
|
||||
return next_x, next_y
|
||||
|
||||
def has_super_power(self):
|
||||
@ -75,7 +65,7 @@ class Pacman:
|
||||
self.super_power += 1
|
||||
|
||||
# TODO
|
||||
# Requires UNIX
|
||||
# Requires UNIX - or async func
|
||||
#pid = os.fork()
|
||||
#if pid == 0:
|
||||
# return
|
||||
@ -83,7 +73,6 @@ class Pacman:
|
||||
#os.sleep(10)
|
||||
self.super_power -= 1
|
||||
self.ghost_combo = 0
|
||||
#os._exit(0)
|
||||
|
||||
def eat_fruit(self, fruit, dot_map):
|
||||
global score
|
||||
@ -129,12 +118,9 @@ class Pacman:
|
||||
"""return x, y corresponding to the tile if we move with next_direction"""
|
||||
next_x = int(self.position[0] / self.resolution + self.next_direction[0]) % self.map_size[0]
|
||||
next_y = int(self.position[1] / self.resolution + self.next_direction[1]) % self.map_size[1]
|
||||
print(self.position, next_x, next_y)
|
||||
return next_x, next_y
|
||||
|
||||
def move(self):
|
||||
# self.position[0] += self.direction[0] * self.speed
|
||||
# self.position[1] += self.direction[1] * self.speed
|
||||
self.position[0] = (self.position[0] + self.direction[0]) % (self.resolution * self.map_size[0])
|
||||
self.position[1] = (self.position[1] + self.direction[1]) % (self.resolution * self.map_size[1])
|
||||
|
||||
|
@ -57,7 +57,6 @@ class Map:
|
||||
"""
|
||||
self._surf = pygame.Surface((Map.width * 20, Map.height * 20))
|
||||
if maze_img_file and os.path.isfile(maze_img_file):
|
||||
print('coucou')
|
||||
try:
|
||||
self.phys_map = self.decode_map(maze_img_file)
|
||||
except Exception as e:
|
||||
|
21
src/physic_engine.py
Executable file
21
src/physic_engine.py
Executable file
@ -0,0 +1,21 @@
|
||||
from pacmap import *
|
||||
from pacman import *
|
||||
|
||||
class PhysicEngine:
|
||||
def __init__(self, c_pacmap: Map, c_pacman: Pacman):
|
||||
self.pacmap = c_pacmap
|
||||
self.pacman = c_pacman
|
||||
self.entities = [] # ghosts
|
||||
|
||||
def move_all(self):
|
||||
# pacman movement
|
||||
next_pac_tile = self.pacman.next_matrix_position()
|
||||
pac_res = self.pacman.resolution
|
||||
if self.pacman.is_at_center_tile():
|
||||
if self.pacman.next_direction != direction.none and self.pacmap.get_tile(*self.pacman.get_next_dir_tile()) in (PhysTile.GRD, PhysTile.TPT):
|
||||
self.pacman.change_to_next_dir()
|
||||
self.pacman.move()
|
||||
elif self.pacmap.get_tile(*next_pac_tile) in (PhysTile.GRD, PhysTile.TPT):
|
||||
self.pacman.move()
|
||||
else:
|
||||
self.pacman.move()
|
@ -1,45 +0,0 @@
|
||||
from pacmap import *
|
||||
from pacman import *
|
||||
|
||||
class PhysicMotor:
|
||||
def __init__(self, c_pacmap: Map, c_pacman: Pacman):
|
||||
self.pacmap = c_pacmap
|
||||
self.pacman = c_pacman
|
||||
self.entities = [] # ghosts
|
||||
|
||||
def move_all(self):
|
||||
# pacman movement
|
||||
print(self.pacman.position)
|
||||
# pac_x, pac_y = self.pacman.matrix_position()
|
||||
next_pac_tile = self.pacman.next_matrix_position()
|
||||
pac_res = self.pacman.resolution
|
||||
# print(pac_x, pac_y, self.pacmap.get_tile(pac_x, pac_y))
|
||||
# print("next:", self.pacmap.get_tile(pac_x + self.pacman.direction[0], pac_y + self.pacman.direction[1]))
|
||||
|
||||
# if self.pacman.direction in (direction.up, direction.down):
|
||||
# if self.pacman.position[1] % pac_res == pac_res / 2:
|
||||
# if self.pacmap.get_tile(self.pacman.get_next_dir_tile()) in (PhysTile.GRD, PhysTile.TPT):
|
||||
# self.pacman.change_to_next_dir()
|
||||
# self.pacman.move()
|
||||
# elif self.pacmap.get_tile(*next_pac_tile) in (PhysTile.GRD, PhysTile.TPT):
|
||||
# self.pacman.move()
|
||||
# else:
|
||||
# self.pacman.move()
|
||||
# else:
|
||||
# if self.pacman.position[0] % pac_res == pac_res / 2:
|
||||
# if self.pacmap.get_tile(self.pacman.get_next_dir_tile()) in (PhysTile.GRD, PhysTile.TPT):
|
||||
# self.pacman.change_to_next_dir()
|
||||
# self.pacman.move()
|
||||
# elif self.pacmap.get_tile(*next_pac_tile) in (PhysTile.GRD, PhysTile.TPT):
|
||||
# self.pacman.move()
|
||||
# else:
|
||||
# self.pacman.move()
|
||||
|
||||
if self.pacman.is_at_center_tile():
|
||||
if self.pacman.next_direction != direction.none and self.pacmap.get_tile(*self.pacman.get_next_dir_tile()) in (PhysTile.GRD, PhysTile.TPT):
|
||||
self.pacman.change_to_next_dir()
|
||||
self.pacman.move()
|
||||
elif self.pacmap.get_tile(*next_pac_tile) in (PhysTile.GRD, PhysTile.TPT):
|
||||
self.pacman.move()
|
||||
else:
|
||||
self.pacman.move()
|
Reference in New Issue
Block a user