Agent can rotate + changed map randomization
This commit is contained in:
parent
0db53c8892
commit
5096a289ca
3
.gitignore
vendored
3
.gitignore
vendored
@ -1 +1,2 @@
|
|||||||
__pycache__/
|
__pycache__/*
|
||||||
|
/**/.idea/*
|
31
agent.py
31
agent.py
@ -3,11 +3,12 @@ import settings
|
|||||||
|
|
||||||
|
|
||||||
class Instance:
|
class Instance:
|
||||||
def __init__(self, tank_capacity):
|
def __init__(self, tank_capacity, direction):
|
||||||
size = settings.Field.size
|
size = settings.Field.size
|
||||||
self.rect = pygame.Rect(0, 0, size(), size())
|
self.rect = pygame.Rect(0, 0, size(), size())
|
||||||
self.action = ''
|
self.action = ''
|
||||||
self.tank_capacity = tank_capacity
|
self.tank_capacity = tank_capacity
|
||||||
|
self.direction = direction
|
||||||
|
|
||||||
def coordinates(self):
|
def coordinates(self):
|
||||||
return {
|
return {
|
||||||
@ -33,14 +34,34 @@ class Instance:
|
|||||||
width = settings.Pygame.width()
|
width = settings.Pygame.width()
|
||||||
tile_size = settings.Field.size()
|
tile_size = settings.Field.size()
|
||||||
|
|
||||||
if key_pressed[pygame.K_LEFT] and self.rect.x > 0:
|
if key_pressed[pygame.K_UP] and self.direction == 'west' and self.rect.x > 0:
|
||||||
self.rect.x -= tile_size
|
self.rect.x -= tile_size
|
||||||
elif key_pressed[pygame.K_RIGHT] and self.rect.x < width - tile_size:
|
elif key_pressed[pygame.K_UP] and self.direction == 'east' and self.rect.x < width - tile_size:
|
||||||
self.rect.x += tile_size
|
self.rect.x += tile_size
|
||||||
elif key_pressed[pygame.K_UP] and self.rect.y > 0:
|
elif key_pressed[pygame.K_UP] and self.direction == 'north' and self.rect.y > 0:
|
||||||
self.rect.y -= tile_size
|
self.rect.y -= tile_size
|
||||||
elif key_pressed[pygame.K_DOWN] and self.rect.y < height - tile_size:
|
elif key_pressed[pygame.K_UP] and self.direction == 'south' and self.rect.y < height - tile_size:
|
||||||
self.rect.y += tile_size
|
self.rect.y += tile_size
|
||||||
elif key_pressed[pygame.K_SPACE]:
|
elif key_pressed[pygame.K_SPACE]:
|
||||||
return 'open_window'
|
return 'open_window'
|
||||||
return 'none'
|
return 'none'
|
||||||
|
|
||||||
|
def rotate(self):
|
||||||
|
key_pressed = pygame.key.get_pressed()
|
||||||
|
if key_pressed[pygame.K_LEFT] and self.direction == 'east':
|
||||||
|
self.direction = 'north'
|
||||||
|
elif key_pressed[pygame.K_LEFT] and self.direction == 'north':
|
||||||
|
self.direction = 'west'
|
||||||
|
elif key_pressed[pygame.K_LEFT] and self.direction == 'west':
|
||||||
|
self.direction = 'south'
|
||||||
|
elif key_pressed[pygame.K_LEFT] and self.direction == 'south':
|
||||||
|
self.direction = 'east'
|
||||||
|
elif key_pressed[pygame.K_RIGHT] and self.direction == 'north':
|
||||||
|
self.direction = 'east'
|
||||||
|
elif key_pressed[pygame.K_RIGHT] and self.direction == 'west':
|
||||||
|
self.direction = 'north'
|
||||||
|
elif key_pressed[pygame.K_RIGHT] and self.direction == 'south':
|
||||||
|
self.direction = 'west'
|
||||||
|
elif key_pressed[pygame.K_RIGHT] and self.direction == 'east':
|
||||||
|
self.direction = 'south'
|
||||||
|
return 'none'
|
||||||
|
BIN
assets/fields/special/station.jpg
Normal file
BIN
assets/fields/special/station.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.5 KiB |
BIN
assets/fields/special/station_block.jpg
Normal file
BIN
assets/fields/special/station_block.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 24 KiB |
BIN
assets/tracktor/tractor_east.png
Normal file
BIN
assets/tracktor/tractor_east.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 76 KiB |
BIN
assets/tracktor/tractor_north.png
Normal file
BIN
assets/tracktor/tractor_north.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 85 KiB |
BIN
assets/tracktor/tractor_south.png
Normal file
BIN
assets/tracktor/tractor_south.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 76 KiB |
BIN
assets/tracktor/tractor_west.png
Normal file
BIN
assets/tracktor/tractor_west.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 76 KiB |
13
field.py
13
field.py
@ -78,6 +78,7 @@ class Field:
|
|||||||
class Dirt(Field):
|
class Dirt(Field):
|
||||||
type = Type.PLANT
|
type = Type.PLANT
|
||||||
name = 'dirt'
|
name = 'dirt'
|
||||||
|
cost = 5
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Dirt, self).__init__()
|
super(Dirt, self).__init__()
|
||||||
@ -86,6 +87,7 @@ class Dirt(Field):
|
|||||||
class Cobble(Field):
|
class Cobble(Field):
|
||||||
type = Type.SPECIAL
|
type = Type.SPECIAL
|
||||||
name = 'cobble'
|
name = 'cobble'
|
||||||
|
cost = 1
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Cobble, self).__init__()
|
super(Cobble, self).__init__()
|
||||||
@ -94,6 +96,7 @@ class Cobble(Field):
|
|||||||
class Grass(Field):
|
class Grass(Field):
|
||||||
type = Type.DEFAULT
|
type = Type.DEFAULT
|
||||||
name = 'grass'
|
name = 'grass'
|
||||||
|
cost = 3
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Grass, self).__init__()
|
super(Grass, self).__init__()
|
||||||
@ -102,7 +105,17 @@ class Grass(Field):
|
|||||||
class Sand(Field):
|
class Sand(Field):
|
||||||
type = Type.DEFAULT
|
type = Type.DEFAULT
|
||||||
name = 'sand'
|
name = 'sand'
|
||||||
|
cost = 10
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(Sand, self).__init__()
|
super(Sand, self).__init__()
|
||||||
|
|
||||||
|
|
||||||
|
class Station(Field):
|
||||||
|
type = Type.SPECIAL
|
||||||
|
name = 'station'
|
||||||
|
cost = 1
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
super(Station, self).__init__()
|
||||||
# Tile Types END
|
# Tile Types END
|
||||||
|
65
main.py
65
main.py
@ -5,17 +5,19 @@ import field
|
|||||||
import settings
|
import settings
|
||||||
import common
|
import common
|
||||||
import agent
|
import agent
|
||||||
|
import math
|
||||||
|
|
||||||
|
|
||||||
AGENT_IMG = pygame.image.load('./assets/tracktor/tractor.png')
|
|
||||||
AGENT = pygame.transform.scale(AGENT_IMG, (settings.Field.size(), settings.Field.size()))
|
|
||||||
|
|
||||||
possibleFields = {
|
possibleFields = {
|
||||||
'dirt': field.Dirt(),
|
'dirt': field.Dirt(),
|
||||||
'grass': field.Grass(),
|
'grass': field.Grass(),
|
||||||
'cobble': field.Cobble(),
|
'cobble': field.Cobble(),
|
||||||
'sand': field.Sand(),
|
'sand': field.Sand(),
|
||||||
|
'station': field.Station(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def randomize_map():
|
def randomize_map():
|
||||||
fields_array = []
|
fields_array = []
|
||||||
for i in possibleFields:
|
for i in possibleFields:
|
||||||
@ -24,17 +26,38 @@ def randomize_map():
|
|||||||
field_array_small = []
|
field_array_small = []
|
||||||
field_array_big_2 = []
|
field_array_big_2 = []
|
||||||
field_array_small_2 = []
|
field_array_small_2 = []
|
||||||
for i in range(settings.Field.horizontal_count()):
|
width = settings.Field.horizontal_count()
|
||||||
for j in range(settings.Field.vertical_count()):
|
height = settings.Field.vertical_count()
|
||||||
k = random.choice(list(possibleFields.keys()))
|
for i in range(width):
|
||||||
field_array_small.append(possibleFields[k].tile.object)
|
for j in range(height):
|
||||||
field_array_small_2.append(k)
|
# k = random.choice(list(possibleFields.keys()))
|
||||||
|
x = random.uniform(0, 100)
|
||||||
|
if x < 80:
|
||||||
|
field_array_small.append(possibleFields['dirt'].tile.object)
|
||||||
|
field_array_small_2.append('dirt')
|
||||||
|
elif 80 < x < 90:
|
||||||
|
field_array_small.append(possibleFields['sand'].tile.object)
|
||||||
|
field_array_small_2.append('sand')
|
||||||
|
elif 90 < 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.append(field_array_small)
|
||||||
field_array_big_2.append(field_array_small_2)
|
field_array_big_2.append(field_array_small_2)
|
||||||
field_array_small = []
|
field_array_small = []
|
||||||
field_array_small_2 = []
|
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
|
return field_array_big, field_array_big_2
|
||||||
|
|
||||||
|
|
||||||
def read_img(agent, fields):
|
def read_img(agent, fields):
|
||||||
window = common.get('window')
|
window = common.get('window')
|
||||||
current_field = fields[agent.x()][agent.y()]
|
current_field = fields[agent.x()][agent.y()]
|
||||||
@ -46,28 +69,49 @@ def read_img(agent, fields):
|
|||||||
window.blit(possibleFields['sand'].block.object, (0, 0))
|
window.blit(possibleFields['sand'].block.object, (0, 0))
|
||||||
elif current_field == possibleFields['cobble'].tile.object:
|
elif current_field == possibleFields['cobble'].tile.object:
|
||||||
window.blit(possibleFields['cobble'].block.object, (0, 0))
|
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.display.update()
|
||||||
pygame.time.delay(2000)
|
pygame.time.delay(2000)
|
||||||
common.set('state_imgShown', False)
|
common.set('state_imgShown', False)
|
||||||
|
|
||||||
|
|
||||||
def agent_action(action: str):
|
def agent_action(action: str):
|
||||||
if action == 'open_window':
|
if action == 'open_window':
|
||||||
common.set('state_imgShown', True)
|
common.set('state_imgShown', True)
|
||||||
|
|
||||||
|
|
||||||
def draw_window(agent, fields):
|
def draw_window(agent, fields):
|
||||||
window = common.get('window')
|
window = common.get('window')
|
||||||
rect = agent.rect
|
rect = agent.rect
|
||||||
for i in range(settings.Field.horizontal_count()):
|
for i in range(settings.Field.horizontal_count()):
|
||||||
for j in range(settings.Field.vertical_count()):
|
for j in range(settings.Field.vertical_count()):
|
||||||
window.blit(fields[i][j], (i * settings.Field.size(), j * settings.Field.size()))
|
window.blit(fields[i][j], (i * settings.Field.size(), j * settings.Field.size()))
|
||||||
window.blit(AGENT, (rect.x, rect.y))
|
if agent.direction == 'east':
|
||||||
|
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 == 'west':
|
||||||
|
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 == 'north':
|
||||||
|
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 == 'south':
|
||||||
|
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()
|
pygame.display.update()
|
||||||
|
|
||||||
|
|
||||||
common = common.Instance()
|
common = common.Instance()
|
||||||
agent = agent.Instance(1000)
|
agent = agent.Instance(1000, 'east')
|
||||||
graph = graph.Instance()
|
graph = graph.Instance()
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
common.set('game_running', True)
|
common.set('game_running', True)
|
||||||
common.set('state_imgShown', False)
|
common.set('state_imgShown', False)
|
||||||
@ -92,10 +136,11 @@ def main():
|
|||||||
read_img(agent, fields)
|
read_img(agent, fields)
|
||||||
else:
|
else:
|
||||||
draw_window(agent, fields)
|
draw_window(agent, fields)
|
||||||
|
agent_action(agent.rotate())
|
||||||
agent_action(agent.move())
|
agent_action(agent.move())
|
||||||
|
|
||||||
pygame.quit()
|
pygame.quit()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
Loading…
Reference in New Issue
Block a user