changed bfs to start at top neighbour and proceed against the clock

This commit is contained in:
matixezor 2021-04-12 18:50:22 +02:00
parent 5ac5fd9aea
commit 995dd6860e
2 changed files with 20 additions and 28 deletions

View File

@ -1,6 +1,5 @@
import queue import queue
from typing import List from typing import List
import pygame as pg
from node import Node from node import Node
from tile import Tile from tile import Tile
@ -8,36 +7,31 @@ from const import DIRECTIONS_X, DIRECTIONS_Y, DIRECTIONS_SIDE, ACTIONS
def successor(x: int, y: int, direction: int): def successor(x: int, y: int, direction: int):
"""
kody klawiszy:
:a -> 97
:d -> 100
:w -> 119
1 direction -> prawo
neighbour side 1 -> po prawej 1-1 = 0 -> W
neighbour side 2 -> na gorze 2-1 = 1 -> D + W
neighbour side 3 -> po lewej 3-1 = 2 -> D + D + W
neighbour side 0 -> na dole 0-1 = -1 -> A + W
zwraca listę krotek, które zawierają x, y, kierunek i akcje dla sąsiada
"""
neighbours = [] neighbours = []
for i in range(4): for i in range(4):
# TODO
# naprawić by zaczął od prawej i szedł zgodnie z zegarem
# prawo -> góra -> lewo -> dół
# chcemy: prawo -> dół -> lewo -> góra
neighbour_x = x + DIRECTIONS_X[i] neighbour_x = x + DIRECTIONS_X[i]
neighbour_y = y + DIRECTIONS_Y[i] neighbour_y = y + DIRECTIONS_Y[i]
neighbour_side = DIRECTIONS_SIDE[i] neighbour_side = DIRECTIONS_SIDE[i]
# print(neighbour_x, neighbour_y, neighbour_side)
if 0 <= neighbour_x <= 9 and 0 <= neighbour_y <= 9: if 0 <= neighbour_x <= 9 and 0 <= neighbour_y <= 9:
# TODO
# wymyśleć sposób by dla każdej strony odnaleźć akcje w ACTIONS
neighbours.append((neighbour_x, neighbour_y, neighbour_side, ACTIONS[neighbour_side-direction])) neighbours.append((neighbour_x, neighbour_y, neighbour_side, ACTIONS[neighbour_side-direction]))
return neighbours return neighbours
# kody klawiszy
# a 97
# d 100
# w 119
# 1 direction -> prawo
# neighbour side 1 -> po prawej 1-1 = 0 -> W
# neighbour side 2 -> na gorze 2-1 = 1 -> D + W
# neighbour side 3 -> po lewej 3-1 = 2 -> D + D + W
# neighbour side 0 -> na dole 0-1 = -1 -> A + W
def breadth_first_search(field: List[List[Tile]], start_x: int, start_y: int, start_direction: int): def breadth_first_search(field: List[List[Tile]], start_x: int, start_y: int, start_direction: int):
pg.time.delay(50)
explored = [(start_x, start_y)] explored = [(start_x, start_y)]
node_queue = queue.SimpleQueue() node_queue = queue.SimpleQueue()
node_queue.put(Node(start_x, start_y, start_direction)) node_queue.put(Node(start_x, start_y, start_direction))

View File

@ -61,8 +61,6 @@ DEFAULT_FIELD = [
[5, 2, 0, 1, 3, 1, 2, 1, 0, 0], [5, 2, 0, 1, 3, 1, 2, 1, 0, 0],
[2, 5, 1, 4, 5, 1, 0, 5, 4, 0], [2, 5, 1, 4, 5, 1, 0, 5, 4, 0],
] ]
# TODO
# to poprawić
# -1 -> prawo, ruch # -1 -> prawo, ruch
# 0 -> ruch # 0 -> ruch
@ -72,15 +70,15 @@ DEFAULT_FIELD = [
# -3 -> lewo, ruch # -3 -> lewo, ruch
# 3 -> prawo, ruch # 3 -> prawo, ruch
ACTIONS = { ACTIONS = {
-1: [pg.K_d, pg.K_w], -1: [pg.K_a, pg.K_w],
0: [pg.K_w], 0: [pg.K_w],
1: [pg.K_a, pg.K_w], 1: [pg.K_d, pg.K_w],
2: [pg.K_d, pg.K_d, pg.K_w], 2: [pg.K_d, pg.K_d, pg.K_w],
-2: [pg.K_d, pg.K_d, pg.K_w], -2: [pg.K_d, pg.K_d, pg.K_w],
-3: [pg.K_a, pg.K_w], -3: [pg.K_d, pg.K_w],
3: [pg.K_d, pg.K_w] 3: [pg.K_a, pg.K_w]
} }
# TODO
DIRECTIONS_X = (1, 0, -1, 0) DIRECTIONS_X = (-1, 0, 1, 0)
DIRECTIONS_Y = (0, 1, 0, -1) DIRECTIONS_Y = (0, -1, 0, 1)
DIRECTIONS_SIDE = (1, 2, 3, 0) DIRECTIONS_SIDE = (3, 0, 1, 2)