V1.34
This commit is contained in:
parent
bad695ca49
commit
09eb0bbc2f
4
Board.py
4
Board.py
@ -5,10 +5,14 @@ from constants import *
|
|||||||
|
|
||||||
states = ['toPlow', 'toSeed', 'toFertilize', 'toWater', 'toCut']
|
states = ['toPlow', 'toSeed', 'toFertilize', 'toWater', 'toCut']
|
||||||
|
|
||||||
|
|
||||||
def generate():
|
def generate():
|
||||||
board = []
|
board = []
|
||||||
for i in range(0, int(HORIZONTAL_TILES_NUMBER)):
|
for i in range(0, int(HORIZONTAL_TILES_NUMBER)):
|
||||||
board.append([])
|
board.append([])
|
||||||
for j in range(0, int(VERTICAL_TILES_NUMBER)):
|
for j in range(0, int(VERTICAL_TILES_NUMBER)):
|
||||||
board[i].append(Field(int(i * TILE_SIZE), int(j * TILE_SIZE), random.choice(states)))
|
board[i].append(Field(int(i * TILE_SIZE), int(j * TILE_SIZE), random.choice(states)))
|
||||||
|
|
||||||
|
board[0][0] = Field(int(0 * TILE_SIZE), int(0 * TILE_SIZE), "TOOLS_FIELD")
|
||||||
|
board[1][0] = Field(int(1 * TILE_SIZE), int(0 * TILE_SIZE), "FUEL_FIELD")
|
||||||
return board
|
return board
|
||||||
|
3
Field.py
3
Field.py
@ -10,5 +10,6 @@ class Field:
|
|||||||
|
|
||||||
@state.setter
|
@state.setter
|
||||||
def state(self, state):
|
def state(self, state):
|
||||||
if state == "toPlow" or state == "toWater" or state == "toSeed" or state == "toFertilize" or state == "toCut":
|
if state == "toPlow" or state == "toWater" or state == "toSeed" or \
|
||||||
|
state == "toFertilize" or state == "toCut" or state == "TOOLS_FIELD" or state == "FUEL_FIELD":
|
||||||
self.__state = state
|
self.__state = state
|
||||||
|
12
Tractor.py
12
Tractor.py
@ -3,11 +3,12 @@ from constants import HORIZONTAL_TILES_NUMBER, VERTICAL_TILES_NUMBER
|
|||||||
|
|
||||||
|
|
||||||
class Tractor:
|
class Tractor:
|
||||||
def __init__(self, horizontal_index, vertical_index, hitch, header):
|
def __init__(self, horizontal_index, vertical_index, hitch, header, autodrive):
|
||||||
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
|
||||||
self.__header = header
|
self.__header = header
|
||||||
|
self.__autodrive = autodrive
|
||||||
self.__fuel_tank = 100
|
self.__fuel_tank = 100
|
||||||
self.__engineWorking = False
|
self.__engineWorking = False
|
||||||
|
|
||||||
@ -77,6 +78,15 @@ class Tractor:
|
|||||||
def turnOffEngine(self):
|
def turnOffEngine(self):
|
||||||
self.__engineWorking = False
|
self.__engineWorking = False
|
||||||
|
|
||||||
|
@property
|
||||||
|
def autodrive(self):
|
||||||
|
return self.__autodrive
|
||||||
|
|
||||||
|
@autodrive.setter
|
||||||
|
def autodrive(self, autodrive):
|
||||||
|
if isinstance(autodrive, bool):
|
||||||
|
self.__autodrive = autodrive
|
||||||
|
|
||||||
def drive(self, direction):
|
def drive(self, direction):
|
||||||
mRange = 1
|
mRange = 1
|
||||||
if direction == "UP" and self.vertical_index > 0:
|
if direction == "UP" and self.vertical_index > 0:
|
||||||
|
@ -18,6 +18,13 @@ def action(field, tractor):
|
|||||||
return "toCut"
|
return "toCut"
|
||||||
|
|
||||||
|
|
||||||
|
def autoAction(tractor, tillageUnit, toolCounter):
|
||||||
|
if tractor.horizontal_index == 0 and tractor.vertical_index == 0:
|
||||||
|
toolCounter = (toolCounter + 1) % 5
|
||||||
|
tractor, tillageUnit = chooseToolset(tractor, tillageUnit, toolCounter)
|
||||||
|
tractor.fill_tank()
|
||||||
|
return tractor, tillageUnit, toolCounter
|
||||||
|
|
||||||
def chooseToolset(tractor, tillageUnit, set):
|
def chooseToolset(tractor, tillageUnit, set):
|
||||||
if set == 0:
|
if set == 0:
|
||||||
tractor.hitch = tillageUnit
|
tractor.hitch = tillageUnit
|
||||||
|
@ -29,8 +29,11 @@ TRACTOR_WIDTH = TILE_SIZE
|
|||||||
TRACTOR_HEIGHT = TILE_SIZE
|
TRACTOR_HEIGHT = TILE_SIZE
|
||||||
|
|
||||||
#FRAMES PER SECOND
|
#FRAMES PER SECOND
|
||||||
FPS = 5
|
FPS = 10
|
||||||
|
|
||||||
|
#ANIMATION_PART
|
||||||
|
|
||||||
|
ANIMATION_PART = 11
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
31
drawUI.py
31
drawUI.py
@ -4,30 +4,36 @@ from images import *
|
|||||||
import pygame
|
import pygame
|
||||||
|
|
||||||
|
|
||||||
def drawUI(board, display, tractor, direction, tillageUnit, field):
|
def drawUI(board, display, tractor, direction, tillageUnit, field, animationSpeed):
|
||||||
for i in range(1, 11):
|
if animationSpeed == 1:
|
||||||
|
display.fill(WHITE)
|
||||||
|
makeField(board, display)
|
||||||
|
drawTractor(display, tractor.horizontal_index, tractor.vertical_index, direction, 0)
|
||||||
|
drawInfo(display, tractor, tillageUnit, field, direction)
|
||||||
|
pygame.display.update()
|
||||||
|
for i in range(1, animationSpeed):
|
||||||
display.fill(WHITE)
|
display.fill(WHITE)
|
||||||
makeField(board, display)
|
makeField(board, display)
|
||||||
drawTractor(display, tractor.horizontal_index, tractor.vertical_index, direction, i)
|
drawTractor(display, tractor.horizontal_index, tractor.vertical_index, direction, i)
|
||||||
drawInfo(display, tractor, tillageUnit, field)
|
drawInfo(display, tractor, tillageUnit, field, direction)
|
||||||
pygame.display.update()
|
pygame.display.update()
|
||||||
|
|
||||||
|
|
||||||
def drawInfo(display, tractor, tillageUnit, field):
|
def drawInfo(display, tractor, tillageUnit, field, direction):
|
||||||
myfont = pygame.font.SysFont('Comic Sans MS', 30)
|
myfont = pygame.font.SysFont('Comic Sans MS', 30)
|
||||||
hitches = tractor.hitch
|
hitches = tractor.hitch
|
||||||
if isinstance(tractor.hitch, TillageUnit):
|
if isinstance(tractor.hitch, TillageUnit):
|
||||||
hitches = "Tillage Unit"
|
hitches = "Tillage Unit"
|
||||||
|
|
||||||
text = f"Fuel: {tractor.fuel_tank} \t Hitches: {hitches} \t Header: {tractor.header} \t Engine working: {tractor.engineWorking}"
|
text = f"(Q)Hitches: {hitches} (W)Header: {tractor.header} (R)Engine working: {tractor.engineWorking} (T)Autodrive: {tractor.autodrive} Fuel: {tractor.fuel_tank}"
|
||||||
textsurface = myfont.render(text, False, (0, 0, 0))
|
textsurface = myfont.render(text, False, (0, 0, 0))
|
||||||
display.blit(textsurface, (50, (DISPLAY_SIZE_VERTICAL - 200)))
|
display.blit(textsurface, (50, (DISPLAY_SIZE_VERTICAL - 200)))
|
||||||
|
|
||||||
text = f"Tillage Unit Load: {tillageUnit.load}"
|
text = f"(E)Tillage Unit Load: {tillageUnit.load} (^) Direction: {direction}"
|
||||||
textsurface = myfont.render(text, False, (0, 0, 0))
|
textsurface = myfont.render(text, False, (0, 0, 0))
|
||||||
display.blit(textsurface, (50, (DISPLAY_SIZE_VERTICAL - 150)))
|
display.blit(textsurface, (50, (DISPLAY_SIZE_VERTICAL - 150)))
|
||||||
|
|
||||||
text = f"Current field: {field.state, field.horizontal/100, field.vertical/100}"
|
text = f"Current field: {field.horizontal/100, field.vertical/100, field.state} "
|
||||||
textsurface = myfont.render(text, False, (0, 0, 0))
|
textsurface = myfont.render(text, False, (0, 0, 0))
|
||||||
display.blit(textsurface, (50, (DISPLAY_SIZE_VERTICAL - 100)))
|
display.blit(textsurface, (50, (DISPLAY_SIZE_VERTICAL - 100)))
|
||||||
|
|
||||||
@ -56,14 +62,21 @@ def makeField(board, screen: pygame.Surface):
|
|||||||
to_fertilizer_rect.center = (pos_x, pos_y)
|
to_fertilizer_rect.center = (pos_x, pos_y)
|
||||||
screen.blit(to_fertilizer, to_fertilizer_rect)
|
screen.blit(to_fertilizer, to_fertilizer_rect)
|
||||||
|
|
||||||
|
elif field.state == "TOOLS_FIELD":
|
||||||
|
tools_rect.center = (pos_x, pos_y)
|
||||||
|
screen.blit(tools, tools_rect)
|
||||||
|
|
||||||
|
elif field.state == "FUEL_FIELD":
|
||||||
|
fuel_rect.center = (pos_x, pos_y)
|
||||||
|
screen.blit(fuel, fuel_rect)
|
||||||
|
|
||||||
|
|
||||||
def drawTractor(screen: pygame.Surface, tractor_horizontal_index, tractor_vertical_index, direction, i):
|
def drawTractor(screen: pygame.Surface, tractor_horizontal_index, tractor_vertical_index, direction, i):
|
||||||
tractor_pic = tractor_up
|
tractor_pic = tractor_up
|
||||||
horizontal = tractor_horizontal_index * TILE_SIZE
|
horizontal = tractor_horizontal_index * TILE_SIZE
|
||||||
vertical = tractor_vertical_index * TILE_SIZE
|
vertical = tractor_vertical_index * TILE_SIZE
|
||||||
|
|
||||||
|
i = i/ANIMATION_PART
|
||||||
i = i/10
|
|
||||||
|
|
||||||
if direction == "UP":
|
if direction == "UP":
|
||||||
tractor_pic = tractor_up
|
tractor_pic = tractor_up
|
||||||
|
@ -20,7 +20,8 @@ def manualTurning(event, tractor):
|
|||||||
elif event.key == pygame.K_DOWN and tractor.vertical_index < VERTICAL_TILES_NUMBER - 1:
|
elif event.key == pygame.K_DOWN and tractor.vertical_index < VERTICAL_TILES_NUMBER - 1:
|
||||||
direction = "DOWN"
|
direction = "DOWN"
|
||||||
|
|
||||||
# tractor.drive(direction)
|
if not tractor.autodrive:
|
||||||
|
tractor.drive(direction)
|
||||||
|
|
||||||
return direction
|
return direction
|
||||||
|
|
||||||
@ -38,8 +39,8 @@ def getDirection(horizontal_change, vertical_change):
|
|||||||
return direction
|
return direction
|
||||||
|
|
||||||
|
|
||||||
def autodrive(tractor, autonomousDrive, direction, comeback):
|
def autodrive(tractor, direction, comeback):
|
||||||
if autonomousDrive:
|
if tractor.autodrive:
|
||||||
if not comeback:
|
if not comeback:
|
||||||
if direction == "RIGHT" and tractor.horizontal_index == HORIZONTAL_TILES_NUMBER - 1:
|
if direction == "RIGHT" and tractor.horizontal_index == HORIZONTAL_TILES_NUMBER - 1:
|
||||||
direction = "DOWN"
|
direction = "DOWN"
|
||||||
|
@ -45,4 +45,4 @@ to_seed_rect = to_seed.get_rect()
|
|||||||
to_cut_rect = to_cut.get_rect()
|
to_cut_rect = to_cut.get_rect()
|
||||||
to_fertilizer_rect = to_fertilizer.get_rect()
|
to_fertilizer_rect = to_fertilizer.get_rect()
|
||||||
fuel_rect = fuel.get_rect()
|
fuel_rect = fuel.get_rect()
|
||||||
tools_rect = tools.get_rect()
|
tools_rect = tools.get_rect()
|
||||||
|
38
main.py
38
main.py
@ -2,8 +2,9 @@ import pygame
|
|||||||
# wersja 1.05
|
# wersja 1.05
|
||||||
|
|
||||||
import Board, driving, drawUI
|
import Board, driving, drawUI
|
||||||
|
import TractorAction
|
||||||
from Tractor import Tractor
|
from Tractor import Tractor
|
||||||
from TractorAction import action, chooseToolset
|
from TractorAction import action
|
||||||
from TractorLoad import TillageUnit
|
from TractorLoad import TillageUnit
|
||||||
from constants import *
|
from constants import *
|
||||||
from driving import autodrive, isComebackTime
|
from driving import autodrive, isComebackTime
|
||||||
@ -16,7 +17,8 @@ pygame.display.set_caption('Tractor')
|
|||||||
working = True
|
working = True
|
||||||
cruiseControl = True
|
cruiseControl = True
|
||||||
autoAction = True
|
autoAction = True
|
||||||
autonomousDrive = True
|
|
||||||
|
animationSpeed = ANIMATION_PART
|
||||||
|
|
||||||
comeback = False
|
comeback = False
|
||||||
lastDirection = "RIGHT"
|
lastDirection = "RIGHT"
|
||||||
@ -28,7 +30,7 @@ toolCounter = - 1
|
|||||||
|
|
||||||
board = Board.generate()
|
board = Board.generate()
|
||||||
|
|
||||||
tractor = Tractor(horizontal_index=-0, vertical_index=0, hitch="nothing", header=False)
|
tractor = Tractor(horizontal_index=-0, vertical_index=0, hitch="nothing", header=False, autodrive=True)
|
||||||
tillageUnit = TillageUnit("Nothing")
|
tillageUnit = TillageUnit("Nothing")
|
||||||
|
|
||||||
tractor.turnOnEngine()
|
tractor.turnOnEngine()
|
||||||
@ -66,21 +68,35 @@ while working:
|
|||||||
tillageUnit.load = "Water"
|
tillageUnit.load = "Water"
|
||||||
elif loadCounter == 3:
|
elif loadCounter == 3:
|
||||||
tillageUnit.load = "Fertilizer"
|
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)
|
direction = driving.manualTurning(event, tractor)
|
||||||
|
|
||||||
print(tractor.horizontal_index, " ", tractor.vertical_index)
|
#print(tractor.horizontal_index, " ", tractor.vertical_index)
|
||||||
|
|
||||||
field = board[tractor.horizontal_index][tractor.vertical_index]
|
field = board[tractor.horizontal_index][tractor.vertical_index]
|
||||||
|
|
||||||
if autoAction:
|
if autoAction:
|
||||||
if tractor.horizontal_index == 0 and tractor.vertical_index == 0:
|
tractor, tillageUnit, toolCounter = TractorAction.autoAction(tractor, tillageUnit, toolCounter)
|
||||||
toolCounter = (toolCounter + 1) % 5
|
|
||||||
tractor, tillageUnit = chooseToolset(tractor, tillageUnit, toolCounter)
|
|
||||||
tractor.fill_tank()
|
|
||||||
field.state = action(field, tractor)
|
field.state = action(field, tractor)
|
||||||
|
|
||||||
print(direction)
|
|
||||||
tractor.drive(driving.cruiseControl(tractor, direction, cruiseControl))
|
tractor.drive(driving.cruiseControl(tractor, direction, cruiseControl))
|
||||||
|
|
||||||
if direction != "STOP":
|
if direction != "STOP":
|
||||||
@ -88,11 +104,11 @@ while working:
|
|||||||
else:
|
else:
|
||||||
direction = lastDirection
|
direction = lastDirection
|
||||||
|
|
||||||
direction = autodrive(tractor, autonomousDrive, direction, comeback)
|
direction = autodrive(tractor, direction, comeback)
|
||||||
|
|
||||||
comeback, direction = isComebackTime(tractor, direction, comeback)
|
comeback, direction = isComebackTime(tractor, direction, comeback)
|
||||||
|
|
||||||
drawUI.drawUI(board, display, tractor, direction, tillageUnit, field)
|
drawUI.drawUI(board, display, tractor, direction, tillageUnit, field, animationSpeed)
|
||||||
|
|
||||||
clock.tick(FPS)
|
clock.tick(FPS)
|
||||||
tractor.reduce_fuel()
|
tractor.reduce_fuel()
|
||||||
|
Loading…
Reference in New Issue
Block a user