amélioration de l’IA, ajout de nouvelles vermines
This commit is contained in:
parent
04197da18b
commit
a01872db46
@ -3,6 +3,7 @@ from random import random, randint
|
|||||||
from pygame import Rect, image
|
from pygame import Rect, image
|
||||||
|
|
||||||
from engine.entity import Entity
|
from engine.entity import Entity
|
||||||
|
from engine.game import Game
|
||||||
from engine.scene_manager import SceneManager
|
from engine.scene_manager import SceneManager
|
||||||
from engine.resources import res
|
from engine.resources import res
|
||||||
from engine.components.collide_rect import CollideRect
|
from engine.components.collide_rect import CollideRect
|
||||||
@ -55,44 +56,51 @@ class Ghost(Entity):
|
|||||||
return
|
return
|
||||||
|
|
||||||
def script(self):
|
def script(self):
|
||||||
# graph = SceneManager().scene.entities['level'].graph
|
graph = SceneManager().scene.entities['level'].graph
|
||||||
|
|
||||||
# cur_node = graph[self.y//S][self.x//S]
|
if self.x % S != 0 or self.y % S != 0:
|
||||||
# # print(self.y//S, self.x//S)
|
return
|
||||||
# pacman = SceneManager().scene.entities['pacman']
|
|
||||||
# x_dist = pacman.x - self.x
|
|
||||||
# y_dist = pacman.y - self.y
|
|
||||||
# s = 1
|
|
||||||
# p = self.find_shortest_path(graph[pacman.y//S][pacman.x//S])
|
|
||||||
# # print([x[1] for x in p])
|
|
||||||
# cur_dir = p[0][1]
|
|
||||||
# if cur_dir == Direction.UP:
|
|
||||||
# self.phys.vx = 0
|
|
||||||
# self.phys.vy = -1
|
|
||||||
# elif cur_dir == Direction.DOWN:
|
|
||||||
# self.phys.vx = 0
|
|
||||||
# self.phys.vy = 1
|
|
||||||
# elif cur_dir == Direction.LEFT:
|
|
||||||
# self.phys.vx = -1
|
|
||||||
# self.phys.vy = 0
|
|
||||||
# else:
|
|
||||||
# self.phys.vx = 1
|
|
||||||
# self.phys.vy = 0
|
|
||||||
|
|
||||||
if self.direction == Direction.UP:
|
cur_node = graph[self.y//S][self.x//S]
|
||||||
self.phys.vy = -Ghost.SPEED
|
# print(self.y//S, self.x//S)
|
||||||
|
pacman = SceneManager().scene.entities['pacman']
|
||||||
|
x_dist = pacman.x - self.x
|
||||||
|
y_dist = pacman.y - self.y
|
||||||
|
s = 1
|
||||||
|
# print(pacman.y//S, pacman.x//S)
|
||||||
|
p = self.find_shortest_path(graph[pacman.y//S][pacman.x//S])
|
||||||
|
# print([x[1] for x in p])
|
||||||
|
cur_dir = p[0][1]
|
||||||
|
if cur_dir == Direction.UP:
|
||||||
self.phys.vx = 0
|
self.phys.vx = 0
|
||||||
elif self.direction == Direction.DOWN:
|
self.phys.vy = -1
|
||||||
self.phys.vy = Ghost.SPEED
|
elif cur_dir == Direction.DOWN:
|
||||||
self.phys.vx = 0
|
self.phys.vx = 0
|
||||||
elif self.direction == Direction.LEFT:
|
self.phys.vy = 1
|
||||||
self.phys.vx = -Ghost.SPEED
|
elif cur_dir == Direction.LEFT:
|
||||||
|
self.phys.vx = -1
|
||||||
self.phys.vy = 0
|
self.phys.vy = 0
|
||||||
elif self.direction == Direction.RIGHT:
|
else:
|
||||||
self.phys.vx = Ghost.SPEED
|
self.phys.vx = 1
|
||||||
self.phys.vy = 0
|
self.phys.vy = 0
|
||||||
|
|
||||||
|
# if self.direction == Direction.UP:
|
||||||
|
# self.phys.vy = -Ghost.SPEED
|
||||||
|
# self.phys.vx = 0
|
||||||
|
# elif self.direction == Direction.DOWN:
|
||||||
|
# self.phys.vy = Ghost.SPEED
|
||||||
|
# self.phys.vx = 0
|
||||||
|
# elif self.direction == Direction.LEFT:
|
||||||
|
# self.phys.vx = -Ghost.SPEED
|
||||||
|
# self.phys.vy = 0
|
||||||
|
# elif self.direction == Direction.RIGHT:
|
||||||
|
# self.phys.vx = Ghost.SPEED
|
||||||
|
# self.phys.vy = 0
|
||||||
|
|
||||||
def find_shortest_path(self, final_node):
|
def find_shortest_path(self, final_node):
|
||||||
|
if final_node is None:
|
||||||
|
print('oups')
|
||||||
|
exit(1)
|
||||||
graph = SceneManager().scene.entities['level'].graph
|
graph = SceneManager().scene.entities['level'].graph
|
||||||
cur_node = graph[self.y//S][self.x//S]
|
cur_node = graph[self.y//S][self.x//S]
|
||||||
children = cur_node.children
|
children = cur_node.children
|
||||||
|
@ -46,6 +46,10 @@ class Level(Entity):
|
|||||||
self.graph = [[None for x in range(w)] for y in range(h)]
|
self.graph = [[None for x in range(w)] for y in range(h)]
|
||||||
for x, y in product(range(w), range(h)):
|
for x, y in product(range(w), range(h)):
|
||||||
col = desc.get_at((x, y))
|
col = desc.get_at((x, y))
|
||||||
|
|
||||||
|
if col in ((0, 0, 0), (255, 0, 0), (139, 139, 139),
|
||||||
|
(193, 193, 193)):
|
||||||
|
self.graph[y][x] = Node()
|
||||||
if col == (0, 0, 255):
|
if col == (0, 0, 255):
|
||||||
self.add(CollideRect(Rect(x * S, y * S, S, S)))
|
self.add(CollideRect(Rect(x * S, y * S, S, S)))
|
||||||
self.surf.blit(wall, (x * S, y * S))
|
self.surf.blit(wall, (x * S, y * S))
|
||||||
@ -55,9 +59,6 @@ class Level(Entity):
|
|||||||
pc.y = y * S
|
pc.y = y * S
|
||||||
self.scene.add(pc)
|
self.scene.add(pc)
|
||||||
PacDot.tot += 1
|
PacDot.tot += 1
|
||||||
self.graph[y][x] = Node()
|
|
||||||
elif col == (0, 0, 0) or col == (255, 0, 0):
|
|
||||||
self.graph[y][x] = Node()
|
|
||||||
elif col == (193, 193, 193):
|
elif col == (193, 193, 193):
|
||||||
pc = EnsmallmentDot()
|
pc = EnsmallmentDot()
|
||||||
pc.x = x * S
|
pc.x = x * S
|
||||||
|
@ -11,9 +11,9 @@ class Lvl0(Scene):
|
|||||||
self.add(Level('lvl0.png'))
|
self.add(Level('lvl0.png'))
|
||||||
self.add(PacMan(S, S))
|
self.add(PacMan(S, S))
|
||||||
self.add(Ghost(S*6, S*2))
|
self.add(Ghost(S*6, S*2))
|
||||||
# self.add(Ghost(S*6, S*13))
|
self.add(Ghost(S*6, S*13))
|
||||||
# self.add(Ghost(S*18, S*13))
|
self.add(Ghost(S*18, S*13))
|
||||||
# self.add(Ghost(S*8, S*23))
|
self.add(Ghost(S*8, S*23))
|
||||||
super().load()
|
super().load()
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user