SZI2019SmieciarzWmi/DataModels/GC.py

91 lines
3.1 KiB
Python
Raw Normal View History

2019-04-01 13:29:13 +02:00
from DataModels.Cell import Cell
from DataModels.Road import Road
2019-04-01 15:45:48 +02:00
from DataModels.House import House
from DataModels.Dump import Dump
from config import GRID_WIDTH, GRID_HEIGHT, DELAY
from utilities import movement, check_moves
from Traversal.DFS import DFS
2019-05-13 10:29:34 +02:00
from Traversal.BestFS import BestFS
import pygame
class GC(Cell):
2019-05-12 10:24:43 +02:00
moves_made = 0
def __init__(self, x, y, max_rubbish, yellow=0, green=0, blue=0):
Cell.__init__(self, x, y, max_rubbish, yellow, green, blue)
self.moves = []
self.old_time = pygame.time.get_ticks()
2019-04-10 11:01:20 +02:00
def move(self, direction, environment):
self.x, self.y = movement(environment, self.x, self.y)[0][direction]
2019-04-01 14:36:27 +02:00
self.update_rect(self.x, self.y)
2019-05-12 19:38:11 +02:00
self.moves_made = self.moves_made + 1 #moves counter
2019-04-01 15:45:48 +02:00
print(check_moves(environment, self.x, self.y,direction))
2019-04-10 11:01:20 +02:00
2019-04-01 15:45:48 +02:00
def collect(self, enviromnent):
x, y = [self.x, self.y]
coordinates = [(x, y - 1), (x, y + 1), (x - 1, y), (x + 1, y)]
for coordinate in coordinates:
if coordinate[0]<0 or coordinate[1]<0:
continue
2019-04-01 15:45:48 +02:00
try:
item = enviromnent[coordinate[0]][coordinate[1]]
except:
continue
if(type(item) == House or type(item) == Dump):
2019-04-01 15:45:48 +02:00
item.return_trash(self)
self.update_image()
2019-05-12 10:24:43 +02:00
2019-05-13 10:29:34 +02:00
def get_moves_count(self):
2019-05-12 19:33:54 +02:00
return self.moves_made
2019-05-13 09:45:09 +02:00
def find_houses(self,enviromnent, house_count,dump_count):
2019-04-23 21:45:16 +02:00
x = self.x
y = self.y
result = []
for home in range(house_count):
avalible_moves = check_moves(enviromnent, x,y)
2019-05-13 09:45:09 +02:00
[x,y],result = DFS(enviromnent,avalible_moves,[[x,y]],"House")
self.moves.extend(result)
for dump in range(dump_count):
avalible_moves = check_moves(enviromnent, x,y)
[x,y],result = DFS(enviromnent,avalible_moves,[[x,y]],"Dump")
2019-04-23 21:45:16 +02:00
self.moves.extend(result)
self.moves.reverse()
2019-05-13 10:29:34 +02:00
def find_houses_BestFS(self,enviromnent, house_count):
x = self.x
y = self.y
result = []
houses_list = []
a = 0
for row in enviromnent:
b = 0
for col in row:
print(col)
if (type(col) is House):
houses_list.append([col,[a,b]])
b += 1
a += 1
for home in range(house_count):
avalible_moves = check_moves(enviromnent, x,y)
[x,y],result = BestFS(enviromnent,avalible_moves,[[x,y]],houses_list)
self.moves.extend(result)
self.moves.reverse()
2019-05-13 09:45:09 +02:00
def make_actions_from_list(self,environment):
now = pygame.time.get_ticks()
if len(self.moves)==0 or now - self.old_time <= DELAY:
return
self.old_time = pygame.time.get_ticks()
if self.moves[-1] == "pick_garbage":
self.collect(environment)
self.moves.pop()
return
self.x, self.y = self.moves.pop()
2019-05-12 19:38:11 +02:00
self.moves_made = self.moves_made + 1 #moves counter
self.update_rect(self.x,self.y)