decision_tree_impl #25

Merged
s464961 merged 3 commits from decision_tree_impl into master 2022-05-18 10:05:08 +02:00
4 changed files with 41 additions and 16 deletions
Showing only changes of commit 8b76d3635b - Show all commits

View File

@ -4,25 +4,15 @@ import heapq
from dataclasses import dataclass, field from dataclasses import dataclass, field
from typing import Tuple, Optional, List from typing import Tuple, Optional, List
from common.constants import ROWS, COLUMNS from common.constants import ROWS, COLUMNS, LEFT, RIGHT, UP, DOWN
from common.helpers import directions
EMPTY_FIELDS = ['s', 'g', ' '] EMPTY_FIELDS = ['s', 'g', ' ']
LEFT = 'LEFT'
RIGHT = 'RIGHT'
UP = 'UP'
DOWN = 'DOWN'
TURN_LEFT = 'TURN_LEFT' TURN_LEFT = 'TURN_LEFT'
TURN_RIGHT = 'TURN_RIGHT' TURN_RIGHT = 'TURN_RIGHT'
FORWARD = 'FORWARD' FORWARD = 'FORWARD'
directions = {
LEFT: (0, -1),
RIGHT: (0, 1),
UP: (-1, 0),
DOWN: (1, 0)
}
@dataclass @dataclass
class State: class State:

View File

@ -67,3 +67,8 @@ ACTION = {
BAR_ANIMATION_SPEED = 1 BAR_ANIMATION_SPEED = 1
BAR_WIDTH_MULTIPLIER = 0.9 # (0;1> BAR_WIDTH_MULTIPLIER = 0.9 # (0;1>
BAR_HEIGHT_MULTIPLIER = 0.1 BAR_HEIGHT_MULTIPLIER = 0.1
LEFT = 'LEFT'
RIGHT = 'RIGHT'
UP = 'UP'
DOWN = 'DOWN'

View File

@ -1,5 +1,16 @@
from typing import Tuple, List
import pygame import pygame
from common.constants import GRID_CELL_PADDING, GRID_CELL_SIZE, COLUMNS, ROWS
from common.constants import GRID_CELL_PADDING, GRID_CELL_SIZE
from common.constants import ROWS, COLUMNS, LEFT, RIGHT, UP, DOWN
directions = {
LEFT: (0, -1),
RIGHT: (0, 1),
UP: (-1, 0),
DOWN: (1, 0)
}
def draw_text(text, color, surface, x, y, text_size=30, is_bold=False): def draw_text(text, color, surface, x, y, text_size=30, is_bold=False):
@ -45,3 +56,21 @@ def castle_neighbors(map, castle_bottom_right_row, castle_bottom_right_col):
continue continue
neighbors.append((new_col, new_row)) neighbors.append((new_col, new_row))
return neighbors return neighbors
def find_neighbours(col: int, row: int) -> List[Tuple[int, int]]:
dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]
neighbours = []
for i in range(4):
rr = row + dr[i]
cc = col + dc[i]
if rr < 0 or cc < 0: continue
if rr >= ROWS or cc >= COLUMNS: continue
neighbours.append((rr, cc))
return neighbours

View File

@ -2,9 +2,9 @@ import random
import pygame import pygame
from algorithms.a_star import a_star, State, TURN_RIGHT, TURN_LEFT, FORWARD, UP, DOWN, LEFT, RIGHT from algorithms.a_star import a_star, State, TURN_RIGHT, TURN_LEFT, FORWARD
from common.constants import * from common.constants import *
from common.helpers import castle_neighbors from common.helpers import find_neighbours
from logic.knights_queue import KnightsQueue from logic.knights_queue import KnightsQueue
from logic.spawner import Spawner from logic.spawner import Spawner
from models.castle import Castle from models.castle import Castle
@ -113,11 +113,12 @@ class Level:
knight_pos_y = current_knight.position[1] knight_pos_y = current_knight.position[1]
castle_cords = (self.list_castles[0].position[0], self.list_castles[0].position[1]) castle_cords = (self.list_castles[0].position[0], self.list_castles[0].position[1])
goal_list = castle_neighbors(self.map, castle_cords[0], castle_cords[1]) # list of castle neighbors goal_list = find_neighbours(12, 8)
state = State((knight_pos_y, knight_pos_x), current_knight.direction.name) state = State((knight_pos_y, knight_pos_x), current_knight.direction.name)
action_list = a_star(state, self.map, goal_list) action_list = a_star(state, self.map, goal_list)
print(action_list) print(action_list)
print(goal_list)
if len(action_list) == 0: if len(action_list) == 0:
return return