added a pnj
This commit is contained in:
parent
a11042d61b
commit
5e34471405
BIN
assets/MiniPeasant.png
Normal file
BIN
assets/MiniPeasant.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
BIN
assets/MiniVillagerMan.png
Normal file
BIN
assets/MiniVillagerMan.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
BIN
assets/MiniWorker.png
Normal file
BIN
assets/MiniWorker.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.7 KiB |
122
game.py
122
game.py
@ -2,6 +2,7 @@
|
|||||||
import pygame
|
import pygame
|
||||||
import math
|
import math
|
||||||
import csv
|
import csv
|
||||||
|
import random
|
||||||
|
|
||||||
# pygame setup
|
# pygame setup
|
||||||
pygame.init()
|
pygame.init()
|
||||||
@ -13,6 +14,121 @@ dt = 0
|
|||||||
player_sprite = pygame.Rect(100,100,50,50)
|
player_sprite = pygame.Rect(100,100,50,50)
|
||||||
mur = pygame.Rect(500,100,100,100)
|
mur = pygame.Rect(500,100,100,100)
|
||||||
|
|
||||||
|
class Waypoint:
|
||||||
|
def __init__(self, name: str) -> None:
|
||||||
|
self.name = name
|
||||||
|
match name.capitalize():
|
||||||
|
case "A":
|
||||||
|
self.x = 800
|
||||||
|
self.y = 900
|
||||||
|
self.connection = ("B", "H")
|
||||||
|
case "B":
|
||||||
|
self.x = 1575
|
||||||
|
self.y = 900
|
||||||
|
self.connection = ("A", "E", "C")
|
||||||
|
case "C":
|
||||||
|
self.x = 2500
|
||||||
|
self.y = 900
|
||||||
|
self.connection = ("B", "D")
|
||||||
|
case "D":
|
||||||
|
self.x = 2500
|
||||||
|
self.y = 1600
|
||||||
|
self.connection = ("C", "E", "F")
|
||||||
|
case "E":
|
||||||
|
self.x = 1575
|
||||||
|
self.y = 1600
|
||||||
|
self.connection = ("B", "D", "G")
|
||||||
|
case "F":
|
||||||
|
self.x = 2500
|
||||||
|
self.y = 2200
|
||||||
|
self.connection = ("D", "G")
|
||||||
|
case "G":
|
||||||
|
self.x = 1575
|
||||||
|
self.y = 2200
|
||||||
|
self.connection = ("H", "E", "F")
|
||||||
|
case "H":
|
||||||
|
self.x = 800
|
||||||
|
self.y = 2200
|
||||||
|
self.connection = ("A", "G")
|
||||||
|
|
||||||
|
def get_new_connected(self)-> object:
|
||||||
|
letter = random.choice(self.connection)
|
||||||
|
return Waypoint(letter)
|
||||||
|
|
||||||
|
def get_direction(self, pointA: object, pointB: object)-> str:
|
||||||
|
a = pointA.name
|
||||||
|
b = pointB.name
|
||||||
|
if (a == "H" and b == "A") or (a == "G" and b == "E") or (a == "E" and b == "B") or (a == "F" and b == "D") or (a == "D" and b == "C"):
|
||||||
|
return "north"
|
||||||
|
elif (a == "A" and b == "H") or (a == "E" and b == "G") or (a == "B" and b == "E") or (a == "D" and b == "F") or (a == "C" and b == "D"):
|
||||||
|
return "south"
|
||||||
|
elif (a == "A" and b == "B") or (a == "B" and b == "C") or (a == "E" and b == "D") or (a == "H" and b == "G") or (a == "G" and b == "F"):
|
||||||
|
return "east"
|
||||||
|
elif (a == "B" and b == "A") or (a == "C" and b == "B") or (a == "D" and b == "E") or (a == "G" and b == "H") or (a == "F" and b == "G"):
|
||||||
|
return "west"
|
||||||
|
else:
|
||||||
|
raise Exception("crash: POINT A and B impossible")
|
||||||
|
|
||||||
|
|
||||||
|
class Pnj:
|
||||||
|
def __init__(self, x: int, y: int, sprite_path: str, direction: str, objectif: Waypoint) -> None:
|
||||||
|
self.x = x
|
||||||
|
self.y = y
|
||||||
|
self.sprite = pygame.transform.scale_by(pygame.image.load(sprite_path), 3.0)
|
||||||
|
self.direction = direction
|
||||||
|
self.objectif = objectif
|
||||||
|
self.speed = 6
|
||||||
|
|
||||||
|
def avance(self):
|
||||||
|
'''
|
||||||
|
Vérifie que l'objectif n'est pas atteint et avance le pnj dans la direction
|
||||||
|
'''
|
||||||
|
if self.check_objectif():
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
match self.direction:
|
||||||
|
case "north":
|
||||||
|
self.y -= self.speed
|
||||||
|
case "south":
|
||||||
|
self.y += self.speed
|
||||||
|
case "east":
|
||||||
|
self.x += self.speed
|
||||||
|
case "west":
|
||||||
|
self.x -= self.speed
|
||||||
|
case _:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def check_objectif(self):
|
||||||
|
"""
|
||||||
|
Vérifie que l'objectif n'est pas atteint et renvoie true si un l'est, s'occupe aussi de réassigner un nouvel objectig
|
||||||
|
"""
|
||||||
|
match self.direction:
|
||||||
|
case "north":
|
||||||
|
if self.y <= self.objectif.y:
|
||||||
|
new_objectif = self.objectif.get_new_connected()
|
||||||
|
self.direction = self.objectif.get_direction(self.objectif, new_objectif)
|
||||||
|
self.objectif = new_objectif
|
||||||
|
return True
|
||||||
|
case "south":
|
||||||
|
if self.y >= self.objectif.y:
|
||||||
|
new_objectif = self.objectif.get_new_connected()
|
||||||
|
self.direction = self.objectif.get_direction(self.objectif, new_objectif)
|
||||||
|
self.objectif = new_objectif
|
||||||
|
return True
|
||||||
|
case "east":
|
||||||
|
if self.x >= self.objectif.x:
|
||||||
|
new_objectif = self.objectif.get_new_connected()
|
||||||
|
self.direction = self.objectif.get_direction(self.objectif, new_objectif)
|
||||||
|
self.objectif = new_objectif
|
||||||
|
return True
|
||||||
|
case "west":
|
||||||
|
if self.x <= self.objectif.x:
|
||||||
|
new_objectif = self.objectif.get_new_connected()
|
||||||
|
self.direction = self.objectif.get_direction(self.objectif, new_objectif)
|
||||||
|
self.objectif = new_objectif
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
class Player:
|
class Player:
|
||||||
def __init__(self)-> None:
|
def __init__(self)-> None:
|
||||||
self.x = 800
|
self.x = 800
|
||||||
@ -81,11 +197,15 @@ class Game:
|
|||||||
img = pygame.transform.rotozoom(self.perso_sprite, -player.angle-90, 0.2)
|
img = pygame.transform.rotozoom(self.perso_sprite, -player.angle-90, 0.2)
|
||||||
screen.blit(img, (540-img.get_rect().centerx, 360-img.get_rect().centery))
|
screen.blit(img, (540-img.get_rect().centerx, 360-img.get_rect().centery))
|
||||||
|
|
||||||
|
def draw_villager(self):
|
||||||
|
screen.blit(pnj.sprite, (540-player.x + pnj.x - pnj.sprite.get_rect().centerx, 360-player.y + pnj.y - pnj.sprite.get_rect().centery))
|
||||||
|
|
||||||
def display_all(self):
|
def display_all(self):
|
||||||
# fill the screen with a color to wipe away anything from last frame
|
# fill the screen with a color to wipe away anything from last frame
|
||||||
screen.fill("purple")
|
screen.fill("purple")
|
||||||
screen.blit(self.map_sprite, (540-player.x, 360-player.y))
|
screen.blit(self.map_sprite, (540-player.x, 360-player.y))
|
||||||
|
|
||||||
|
self.draw_villager()
|
||||||
self.draw_player()
|
self.draw_player()
|
||||||
|
|
||||||
# We display it at the end so it's on top of all
|
# We display it at the end so it's on top of all
|
||||||
@ -98,6 +218,7 @@ class Game:
|
|||||||
|
|
||||||
player = Player()
|
player = Player()
|
||||||
game = Game()
|
game = Game()
|
||||||
|
pnj = Pnj(800, 900, "assets/MiniPeasant.png", "south", Waypoint("H"))
|
||||||
|
|
||||||
while running:
|
while running:
|
||||||
# poll for events
|
# poll for events
|
||||||
@ -105,6 +226,7 @@ while running:
|
|||||||
for event in pygame.event.get():
|
for event in pygame.event.get():
|
||||||
if event.type == pygame.QUIT:
|
if event.type == pygame.QUIT:
|
||||||
running = False
|
running = False
|
||||||
|
pnj.avance()
|
||||||
|
|
||||||
game.check_input()
|
game.check_input()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user