avancement - plz touchez pas trop c'est la fin de la séance
This commit is contained in:
parent
13d579fa45
commit
ea1e4e6724
59
src/graphic.py
Executable file
59
src/graphic.py
Executable file
@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import pygame as pg
|
||||
import pacman_sprite
|
||||
import pacman as m_pacman # m_ for module to avoid conflicts
|
||||
from physic_motor import PhysicMotor
|
||||
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):
|
||||
self.screen = pg.display.set_mode(size)
|
||||
# self.screen.set_caption("Pacman")
|
||||
self.physic_motor = physic_motor
|
||||
self.pacman = pacman
|
||||
self.pacman_sprite = pacman_sprite.PacmanSprite(size[0]/28)
|
||||
self.clock = pg.time.Clock()
|
||||
self.max_fps = 30
|
||||
|
||||
self.loop()
|
||||
|
||||
|
||||
def user_events(self):
|
||||
key = pg.key.get_pressed()
|
||||
if key[pg.K_UP]:
|
||||
pacman.change_dir(m_pacman.direction.up)
|
||||
if key[pg.K_DOWN]:
|
||||
pacman.change_dir(m_pacman.direction.down)
|
||||
if key[pg.K_LEFT]:
|
||||
pacman.change_dir(m_pacman.direction.left)
|
||||
if key[pg.K_RIGHT]:
|
||||
pacman.change_dir(m_pacman.direction.right)
|
||||
|
||||
def refresh(self):
|
||||
"""refresh/redraw all"""
|
||||
pass
|
||||
|
||||
def create_maze_surface(self):
|
||||
pass
|
||||
|
||||
def loop(self):
|
||||
while 1:
|
||||
for event in pg.event.get():
|
||||
if event.type == pg.QUIT:
|
||||
sys.exit()
|
||||
|
||||
self.user_events()
|
||||
self.physic_motor.move_all()
|
||||
self.refresh()
|
||||
|
||||
self.clock.tick(max_fps)
|
||||
|
||||
if __name__ == '__main__':
|
||||
pacman = m_pacman.Pacman((1,1))
|
||||
pacmap = m_pacmap.Map(maze_img_file="../pacmap_maze_1.png")
|
||||
phys_motor = PhysicMotor(pacmap, pacman)
|
||||
screen = Screen((280, 310), pacmap, phys_motor, pacman)
|
@ -3,16 +3,25 @@ import pacmap
|
||||
import os
|
||||
|
||||
from enum import IntEnum
|
||||
from collections import namedtuple
|
||||
|
||||
_tempdir = namedtuple("Direction", ["up", "down", "left", "right"])
|
||||
direction = _tempdir(
|
||||
up= (0, -1),
|
||||
down=(0, 1),
|
||||
left=(-1, 0),
|
||||
right=(1, 0)
|
||||
)
|
||||
pacdot_counter = 88
|
||||
score = 0
|
||||
lives = 3
|
||||
|
||||
class Direction(IntEnum):
|
||||
U = 0
|
||||
D = 1
|
||||
R = 2
|
||||
L = 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
|
||||
@ -25,13 +34,14 @@ class Fruit:
|
||||
|
||||
|
||||
class Pacman:
|
||||
def __init__(self):
|
||||
self.position = (0.0, 0.0)
|
||||
self.direction = Direction.R
|
||||
self.next_direction = Direction.R
|
||||
def __init__(self, position=[0, 0]):
|
||||
self.position = list(position)
|
||||
self.direction = direction.right
|
||||
self.next_direction = direction.right
|
||||
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
|
||||
|
||||
def matrix_position(self):
|
||||
return (int(self.position[0]), int(self.position[1]))
|
||||
@ -84,6 +94,14 @@ class Pacman:
|
||||
if lives < 0: # à vérifier
|
||||
game_over()
|
||||
|
||||
def change_dir(self, new_dir):
|
||||
self.direction = new_dir
|
||||
|
||||
def move(self):
|
||||
self.position[0] = self.position[0] + self.direction[0] * self.speed
|
||||
self.position[1] = self.position[1] + self.direction[1] * self.speed
|
||||
|
||||
|
||||
def game_over(status = "lose"):
|
||||
#TODO
|
||||
pass
|
||||
|
12
src/pacman_sprite.py
Executable file
12
src/pacman_sprite.py
Executable file
@ -0,0 +1,12 @@
|
||||
"""Pacman Graphic Object"""
|
||||
import pygame as pg
|
||||
|
||||
class PacmanSprite(pg.sprite.Sprite):
|
||||
def __init__(self, size):
|
||||
super().__init__()
|
||||
self.image = pg.Surface([size, size])
|
||||
pg.draw.circle(self.image, (255, 255, 0), (size/2, size/2), size/2, width=0)
|
||||
|
||||
# Fetch the rectangle object that has the dimensions of the image
|
||||
# Update the position of this object by setting the values of rect.x and rect.y
|
||||
self.rect = self.image.get_rect()
|
@ -147,6 +147,9 @@ class Map:
|
||||
|
||||
return True
|
||||
|
||||
def get_tile(self, x, y):
|
||||
return self.phys_map[y][x]
|
||||
|
||||
def explore(matrix, x=-1, y=-1):
|
||||
"""explore the given matrix and change it (GRD and TPT become FIT)"""
|
||||
if x < 0 and y < 0:
|
||||
|
16
src/physic_motor.py
Executable file
16
src/physic_motor.py
Executable file
@ -0,0 +1,16 @@
|
||||
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
|
||||
pac_x, pac_y = self.pacman.position
|
||||
if self.pacman.direction in (direction.up, direction.down):
|
||||
if pac_y % 1 == 0.5: # change this in the future
|
||||
if self.pacmap.get_tile(pac_x, pac_y + self.pacman.direction[1]) in (PhysTile.GRD, PhysTile.TPT):
|
||||
self.pacman.move()
|
Reference in New Issue
Block a user