SterowanieManualnePrzeniesione

This commit is contained in:
secret_dude 2021-04-13 17:52:27 +02:00
parent 6ec20924d1
commit 7dc8362f1d
4 changed files with 125 additions and 136 deletions

View File

@ -3,7 +3,7 @@ from constants import HORIZONTAL_TILES_NUMBER, VERTICAL_TILES_NUMBER
class Tractor: class Tractor:
def __init__(self, horizontal_index, vertical_index, hitch, header, autodrive): def __init__(self, horizontal_index, vertical_index, hitch, header, autodrive, direction):
self.__horizontal_index = horizontal_index self.__horizontal_index = horizontal_index
self.__vertical_index = vertical_index self.__vertical_index = vertical_index
self.__hitch = hitch self.__hitch = hitch
@ -11,6 +11,7 @@ class Tractor:
self.__autodrive = autodrive self.__autodrive = autodrive
self.__fuel_tank = 100 self.__fuel_tank = 100
self.__engineWorking = False self.__engineWorking = False
self.__direction = direction
@property @property
def horizontal_index(self): def horizontal_index(self):
@ -87,13 +88,26 @@ class Tractor:
if isinstance(autodrive, bool): if isinstance(autodrive, bool):
self.__autodrive = autodrive self.__autodrive = autodrive
def drive(self, direction): @property
def direction(self):
return self.__direction
@direction.setter
def direction(self, direction):
if direction == "UP" or direction == "DOWN" or direction == "RIGHT" or direction == "LEFT":
self.__direction = direction
def drive(self):
mRange = 1 mRange = 1
if direction == "UP" and self.vertical_index > 0: if not self.__engineWorking:
return
if self.__direction == "UP" and self.vertical_index > 0:
self.__vertical_index += - mRange self.__vertical_index += - mRange
elif direction == "DOWN" and self.vertical_index < VERTICAL_TILES_NUMBER-1: elif self.__direction == "DOWN" and self.vertical_index < VERTICAL_TILES_NUMBER-1:
self.__vertical_index += mRange self.__vertical_index += mRange
elif direction == "RIGHT" and self.horizontal_index < HORIZONTAL_TILES_NUMBER-1: elif self.__direction == "RIGHT" and self.horizontal_index < HORIZONTAL_TILES_NUMBER-1:
self.__horizontal_index += mRange self.__horizontal_index += mRange
elif direction == "LEFT" and self.horizontal_index > 0: elif self.__direction == "LEFT" and self.horizontal_index > 0:
self.__horizontal_index += -mRange self.__horizontal_index += -mRange

View File

@ -2,66 +2,29 @@ from drawUI import *
import pygame import pygame
def cruiseControl(tractor, direction, cruiseControl): # def autodrive(tractor, direction, comeback):
if cruiseControl == False or tractor.engineWorking == False: # if tractor.autodrive:
direction = "STOP" # if not comeback:
return direction # if direction == "RIGHT" and tractor.horizontal_index == HORIZONTAL_TILES_NUMBER - 1:
# direction = "DOWN"
# elif direction == "DOWN" and tractor.horizontal_index == HORIZONTAL_TILES_NUMBER - 1:
# direction = "LEFT"
# elif direction == "LEFT" and tractor.horizontal_index == 0:
# direction = "DOWN"
# elif direction == "DOWN" and tractor.horizontal_index == 0:
# direction = "RIGHT"
# else:
# direction = "UP"
# return direction
#
def manualTurning(event, tractor): # def isComebackTime(tractor, direction, comeback):
direction = "STOP" # if tractor.vertical_index == 5 and tractor.horizontal_index == 0:
if event.type == pygame.KEYDOWN: # comeback = True
if event.key == pygame.K_LEFT and tractor.horizontal_index > 0: # print(comeback)
direction = "LEFT" # direction = "UP"
elif event.key == pygame.K_RIGHT and tractor.horizontal_index < HORIZONTAL_TILES_NUMBER - 1: # if tractor.vertical_index == 0 and tractor.horizontal_index == 0:
direction = "RIGHT" # comeback = False
elif event.key == pygame.K_UP and tractor.vertical_index > 0: # print(comeback)
direction = "UP" # direction = "RIGHT"
elif event.key == pygame.K_DOWN and tractor.vertical_index < VERTICAL_TILES_NUMBER - 1: # return comeback, direction
direction = "DOWN"
if not tractor.autodrive:
tractor.drive(direction)
return direction
def getDirection(horizontal_change, vertical_change):
direction = "STOP"
if vertical_change == -1:
direction = "UP"
elif vertical_change == 1:
direction = "DOWN"
elif horizontal_change == 1:
direction = "RIGHT"
elif horizontal_change == -1:
direction = "LEFT"
return direction
def autodrive(tractor, direction, comeback):
if tractor.autodrive:
if not comeback:
if direction == "RIGHT" and tractor.horizontal_index == HORIZONTAL_TILES_NUMBER - 1:
direction = "DOWN"
elif direction == "DOWN" and tractor.horizontal_index == HORIZONTAL_TILES_NUMBER - 1:
direction = "LEFT"
elif direction == "LEFT" and tractor.horizontal_index == 0:
direction = "DOWN"
elif direction == "DOWN" and tractor.horizontal_index == 0:
direction = "RIGHT"
else:
direction = "UP"
return direction
def isComebackTime(tractor, direction, comeback):
if tractor.vertical_index == 5 and tractor.horizontal_index == 0:
comeback = True
print(comeback)
direction = "UP"
if tractor.vertical_index == 0 and tractor.horizontal_index == 0:
comeback = False
print(comeback)
direction = "RIGHT"
return comeback, direction

78
main.py
View File

@ -1,13 +1,15 @@
import pygame import pygame
# wersja 1.05
import Board, driving, drawUI import Board
import TractorAction import TractorAction
import drawUI
from Tractor import Tractor from Tractor import Tractor
from TractorAction import action from TractorAction import action
from TractorLoad import TillageUnit from TractorLoad import TillageUnit
from constants import * from constants import *
from driving import autodrive, isComebackTime from manualSteering import manualSteeringDriver
# wersja 1.05
pygame.init() pygame.init()
@ -15,14 +17,10 @@ display = pygame.display.set_mode((DISPLAY_SIZE_HORIZONTAL, DISPLAY_SIZE_VERTICA
pygame.display.set_caption('Tractor') pygame.display.set_caption('Tractor')
working = True working = True
cruiseControl = True
autoAction = True autoAction = True
animationSpeed = ANIMATION_PART animationSpeed = ANIMATION_PART
comeback = False
lastDirection = "RIGHT"
direction = "RIGHT"
hitchCounter = 0 hitchCounter = 0
loadCounter = 0 loadCounter = 0
@ -30,7 +28,8 @@ toolCounter = - 1
board = Board.generate() board = Board.generate()
tractor = Tractor(horizontal_index=-0, vertical_index=0, hitch="nothing", header=False, autodrive=True) tractor = Tractor(horizontal_index=-0, vertical_index=0, hitch="nothing", header=False, autodrive=True,
direction='RIGHT')
tillageUnit = TillageUnit("Nothing") tillageUnit = TillageUnit("Nothing")
tractor.turnOnEngine() tractor.turnOnEngine()
@ -42,53 +41,7 @@ while working:
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
working = False working = False
if event.type == pygame.KEYDOWN: if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE: manualSteeringDriver(event, board, tractor, hitchCounter, tillageUnit, loadCounter, ANIMATION_PART)
field = board[tractor.horizontal_index][tractor.vertical_index]
field.state = action(field, tractor)
if event.key == pygame.K_q:
hitchCounter = (hitchCounter + 1) % 3
if hitchCounter == 0:
tractor.hitch = "Crop Trailer"
if hitchCounter == 1:
tractor.hitch = tillageUnit
if hitchCounter == 2:
tractor.hitch = "Nothing"
if event.key == pygame.K_w:
if tractor.header:
tractor.header = False
else:
tractor.header = True
if event.key == pygame.K_e:
loadCounter = (loadCounter + 1) % 4
if loadCounter == 0:
tillageUnit.load = "Nothing"
elif loadCounter == 1:
tillageUnit.load = "Seeds"
elif loadCounter == 2:
tillageUnit.load = "Water"
elif loadCounter == 3:
tillageUnit.load = "Fertilizer"
if event.key == pygame.K_r:
if tractor.engineWorking:
tractor.turnOffEngine()
else:
tractor.turnOnEngine()
if event.key == pygame.K_t:
if tractor.autodrive:
tractor.autodrive = False
cruiseControl = False
autoAction = False
animationSpeed = 1
else:
tractor.autodrive = True
animationSpeed = ANIMATION_PART
cruiseControl = True
autoAction = True
direction = driving.manualTurning(event, tractor)
#print(tractor.horizontal_index, " ", tractor.vertical_index)
field = board[tractor.horizontal_index][tractor.vertical_index] field = board[tractor.horizontal_index][tractor.vertical_index]
@ -96,21 +49,12 @@ while working:
tractor, tillageUnit, toolCounter = TractorAction.autoAction(tractor, tillageUnit, toolCounter) tractor, tillageUnit, toolCounter = TractorAction.autoAction(tractor, tillageUnit, toolCounter)
field.state = action(field, tractor) field.state = action(field, tractor)
tractor.drive()
tractor.drive(driving.cruiseControl(tractor, direction, cruiseControl)) drawUI.drawUI(board, display, tractor, tractor.direction, tillageUnit, field, animationSpeed)
if direction != "STOP":
lastDirection = direction
else:
direction = lastDirection
direction = autodrive(tractor, direction, comeback)
comeback, direction = isComebackTime(tractor, direction, comeback)
drawUI.drawUI(board, display, tractor, direction, tillageUnit, field, animationSpeed)
clock.tick(FPS) clock.tick(FPS)
if tractor.engineWorking:
tractor.reduce_fuel() tractor.reduce_fuel()
pygame.quit() pygame.quit()

68
manualSteering.py Normal file
View File

@ -0,0 +1,68 @@
import driving
from constants import *
from TractorAction import action
import pygame
def manualSteeringDriver(event, board, tractor, hitchCounter, tillageUnit, loadCounter, ANIMATION_PART):
if event.key == pygame.K_SPACE:
field = board[tractor.horizontal_index][tractor.vertical_index]
field.state = action(field, tractor)
if event.key == pygame.K_q:
hitchCounter = (hitchCounter + 1) % 3
if hitchCounter == 0:
tractor.hitch = "Crop Trailer"
if hitchCounter == 1:
tractor.hitch = tillageUnit
if hitchCounter == 2:
tractor.hitch = "Nothing"
if event.key == pygame.K_w:
if tractor.header:
tractor.header = False
else:
tractor.header = True
if event.key == pygame.K_e:
loadCounter = (loadCounter + 1) % 4
if loadCounter == 0:
tillageUnit.load = "Nothing"
elif loadCounter == 1:
tillageUnit.load = "Seeds"
elif loadCounter == 2:
tillageUnit.load = "Water"
elif loadCounter == 3:
tillageUnit.load = "Fertilizer"
if event.key == pygame.K_r:
if tractor.engineWorking:
tractor.turnOffEngine()
else:
tractor.turnOnEngine()
if event.key == pygame.K_t:
if tractor.autodrive:
tractor.autodrive = False
cruiseControl = False
autoAction = False
animationSpeed = 1
else:
tractor.autodrive = True
animationSpeed = ANIMATION_PART
cruiseControl = True
autoAction = True
manualTurning(event, tractor)
def manualTurning(event, tractor):
tractor.direction = "STOP"
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT and tractor.horizontal_index > 0:
tractor.direction = "LEFT"
elif event.key == pygame.K_RIGHT and tractor.horizontal_index < HORIZONTAL_TILES_NUMBER - 1:
tractor.direction = "RIGHT"
elif event.key == pygame.K_UP and tractor.vertical_index > 0:
tractor.direction = "UP"
elif event.key == pygame.K_DOWN and tractor.vertical_index < VERTICAL_TILES_NUMBER - 1:
tractor.direction = "DOWN"