155 lines
5.5 KiB
Python
155 lines
5.5 KiB
Python
import pygame
|
|
import random
|
|
import graph
|
|
import field
|
|
import settings
|
|
import common
|
|
import agent
|
|
import math
|
|
import time
|
|
import astar
|
|
|
|
possibleFields = {
|
|
'dirt': field.Dirt(),
|
|
'grass': field.Grass(),
|
|
'cobble': field.Cobble(),
|
|
'sand': field.Sand(),
|
|
'station': field.Station(),
|
|
}
|
|
|
|
|
|
def randomize_map():
|
|
fields_array = []
|
|
for i in possibleFields:
|
|
fields_array.append(possibleFields[i].tile.object)
|
|
field_array_big = []
|
|
field_array_small = []
|
|
field_array_big_2 = []
|
|
field_array_small_2 = []
|
|
width = settings.Field.horizontal_count()
|
|
height = settings.Field.vertical_count()
|
|
for i in range(width):
|
|
for j in range(height):
|
|
# k = random.choice(list(possibleFields.keys()))
|
|
x = random.uniform(0, 100)
|
|
if x < 4:
|
|
field_array_small.append(possibleFields['dirt'].tile.object)
|
|
field_array_small_2.append('dirt')
|
|
elif 4 < x < 55:
|
|
field_array_small.append(possibleFields['sand'].tile.object)
|
|
field_array_small_2.append('sand')
|
|
elif 55 < x < 100:
|
|
field_array_small.append(possibleFields['grass'].tile.object)
|
|
field_array_small_2.append('grass')
|
|
field_array_big.append(field_array_small)
|
|
field_array_big_2.append(field_array_small_2)
|
|
field_array_small = []
|
|
field_array_small_2 = []
|
|
|
|
for i in range(height):
|
|
field_array_big[math.floor(width / 2)][i] = possibleFields['cobble'].tile.object
|
|
field_array_big_2[math.floor(width / 2)][i] = 'cobble'
|
|
for i in range(width):
|
|
field_array_big[i][math.floor(height / 2)] = possibleFields['cobble'].tile.object
|
|
field_array_big_2[i][math.floor(height / 2)] = 'cobble'
|
|
field_array_big[0][0] = possibleFields['station'].tile.object
|
|
field_array_big_2[0][0] = 'station'
|
|
|
|
return field_array_big, field_array_big_2
|
|
|
|
|
|
def read_img(agent, fields):
|
|
window = common.get('window')
|
|
current_field = fields[agent.x()][agent.y()]
|
|
if current_field == possibleFields['grass'].tile.object:
|
|
window.blit(possibleFields['grass'].block.object, (0, 0))
|
|
elif current_field == possibleFields['dirt'].tile.object:
|
|
window.blit(possibleFields['dirt'].block.object, (0, 0))
|
|
elif current_field == possibleFields['sand'].tile.object:
|
|
window.blit(possibleFields['sand'].block.object, (0, 0))
|
|
elif current_field == possibleFields['cobble'].tile.object:
|
|
window.blit(possibleFields['cobble'].block.object, (0, 0))
|
|
elif current_field == possibleFields['station'].tile.object:
|
|
window.blit(possibleFields['station'].block.object, (0, 0))
|
|
|
|
pygame.display.update()
|
|
pygame.time.delay(2000)
|
|
common.set('state_imgShown', False)
|
|
|
|
|
|
def agent_action(action: str):
|
|
if action == 'open_window':
|
|
common.set('state_imgShown', True)
|
|
|
|
|
|
def draw_window(agent, fields):
|
|
window = common.get('window')
|
|
rect = agent.rect
|
|
for i in range(settings.Field.horizontal_count()):
|
|
for j in range(settings.Field.vertical_count()):
|
|
window.blit(fields[i][j], (i * settings.Field.size(), j * settings.Field.size()))
|
|
if agent.direction == 2:
|
|
AGENT_IMG = pygame.image.load('./assets/tracktor/tractor_east.png')
|
|
AGENT = pygame.transform.scale(AGENT_IMG, (settings.Field.size(), settings.Field.size()))
|
|
window.blit(AGENT, (rect.x, rect.y))
|
|
elif agent.direction == 4:
|
|
AGENT_IMG = pygame.image.load('./assets/tracktor/tractor_west.png')
|
|
AGENT = pygame.transform.scale(AGENT_IMG, (settings.Field.size(), settings.Field.size()))
|
|
window.blit(AGENT, (rect.x, rect.y))
|
|
elif agent.direction == 1:
|
|
AGENT_IMG = pygame.image.load('./assets/tracktor/tractor_north.png')
|
|
AGENT = pygame.transform.scale(AGENT_IMG, (settings.Field.size(), settings.Field.size()))
|
|
window.blit(AGENT, (rect.x, rect.y))
|
|
elif agent.direction == 3:
|
|
AGENT_IMG = pygame.image.load('./assets/tracktor/tractor_south.png')
|
|
AGENT = pygame.transform.scale(AGENT_IMG, (settings.Field.size(), settings.Field.size()))
|
|
window.blit(AGENT, (rect.x, rect.y))
|
|
pygame.display.update()
|
|
|
|
|
|
common = common.Instance()
|
|
agent = agent.Instance(1000, 2)
|
|
|
|
|
|
def main():
|
|
common.set('game_running', True)
|
|
common.set('state_imgShown', False)
|
|
common.set(
|
|
'window',
|
|
pygame.display.set_mode((
|
|
settings.Pygame.width(),
|
|
settings.Pygame.height())))
|
|
|
|
pygame.display.set_caption(settings.Pygame.display_name())
|
|
fields, fields_2 = randomize_map()
|
|
state = astar.State(2, 0, 0)
|
|
move_list = (astar.graphsearch([], astar.f,[], [10,10] , state, fields_2 ,astar.succ))
|
|
print(move_list)
|
|
x = True
|
|
while common.get('game_running'):
|
|
pygame.time.Clock().tick(settings.Pygame.fps())
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
common.set('game_running', False)
|
|
if common.get('state_imgShown'):
|
|
read_img(agent, fields)
|
|
else:
|
|
draw_window(agent, fields)
|
|
if x:
|
|
for action in move_list:
|
|
if action == 'l' or action == 'r':
|
|
agent_action(agent.rotate(action))
|
|
elif action == 'f':
|
|
agent_action(agent.move(action))
|
|
draw_window(agent, fields)
|
|
time.sleep(0.5)
|
|
x = False
|
|
agent_action(agent.rotate(None))
|
|
agent_action(agent.move(None))
|
|
|
|
pygame.quit()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|