from TractorLoad import TillageUnit from constants import HORIZONTAL_TILES_NUMBER, VERTICAL_TILES_NUMBER class Tractor: def __init__(self, horizontal_index, vertical_index, hitch, header, autodrive, direction): self.__horizontal_index = horizontal_index self.__vertical_index = vertical_index self.__hitch = hitch self.__header = header self.__autodrive = autodrive self.__fuel_tank = 100 self.__engineWorking = False self.__direction = direction @property def horizontal_index(self): return self.__horizontal_index def __horizontal_index(self, horizontal_index): if 1 <= horizontal_index < HORIZONTAL_TILES_NUMBER: if self.__engineWorking: self.__horizontal_index = horizontal_index @property def vertical_index(self): return self.__vertical_index def __vertical_index(self, vertical_index): if 1 <= self.__vertical_index < VERTICAL_TILES_NUMBER-1: if self.__engineWorking: self.__vertical_index = vertical_index @property def hitch(self): return self.__hitch @hitch.setter def hitch(self, hitch): if hitch == "Crop Trailer" or isinstance(hitch, TillageUnit) or hitch == "Nothing": self.__hitch = hitch @property def fuel_tank(self): return self.__fuel_tank def __fuel_tank(self, fuel_tank): if 0 < fuel_tank < 100: self.__fuel_tank = fuel_tank def fill_tank(self): self.__fuel_tank = 100 def reduce_fuel(self): if 0 < self.fuel_tank <= 100: self.__fuel_tank = self.__fuel_tank - 0.5 if self.__fuel_tank <= 0: self.__engineWorking = False @property def header(self): return self.__header @header.setter def header(self, header): if header is True or header is False: self.__header = header @property def engineWorking(self): return self.__engineWorking def turnOnEngine(self): if self.__fuel_tank > 0: self.__engineWorking = True else: print("noFuel") def turnOffEngine(self): self.__engineWorking = False @property def autodrive(self): return self.__autodrive @autodrive.setter def autodrive(self, autodrive): if isinstance(autodrive, bool): self.__autodrive = autodrive @property def direction(self): return self.__direction @direction.setter def direction(self, direction): self.__direction = direction def drive(self): mRange = 1 if not self.__engineWorking: return if self.__direction == "UP" and self.vertical_index > 0: self.__vertical_index += - mRange elif self.__direction == "DOWN" and self.vertical_index < VERTICAL_TILES_NUMBER-1: self.__vertical_index += mRange elif self.__direction == "RIGHT" and self.horizontal_index < HORIZONTAL_TILES_NUMBER-1: self.__horizontal_index += mRange elif self.__direction == "LEFT" and self.horizontal_index > 0: self.__horizontal_index += -mRange self.reduce_fuel() def left_rotation(self): if self.__direction == "UP": self.__direction = "LEFT" elif self.__direction == "LEFT": self.__direction = "DOWN" elif self.__direction == "DOWN": self.__direction = "RIGHT" elif self.__direction == "RIGHT": self.__direction = "UP" def right_rotation(self): if self.__direction == "UP": self.__direction = "RIGHT" elif self.__direction == "RIGHT": self.__direction = "DOWN" elif self.__direction == "DOWN": self.__direction = "LEFT" elif self.__direction == "LEFT": self.__direction = "UP" def auto_movement(self, move): if move == "Move": self.drive() elif move == "Left_Rotation": self.left_rotation() elif move == "Right_Rotation": self.right_rotation()