Merge pull request 'small fix + pygad install' (#3) from fix into master

Reviewed-on: #3
This commit is contained in:
Kacper Topolski 2023-06-15 14:08:03 +02:00
commit 7aebe22f82
14 changed files with 120 additions and 285 deletions

View File

@ -15,7 +15,6 @@ b = [Image.open("b1.png").convert('RGBA'), Image.open("b2.png").convert('RGBA'),
def generate(water, fertilizer, plantf): def generate(water, fertilizer, plantf):
new_im = None
if water == 1: if water == 1:
new_im = Image.new('RGB', (100, 100), new_im = Image.new('RGB', (100, 100),
(160 + random.randint(-10, 10), 80 + random.randint(-10, 10), 40 + random.randint(-10, 10))) (160 + random.randint(-10, 10), 80 + random.randint(-10, 10), 40 + random.randint(-10, 10)))
@ -81,4 +80,3 @@ for x in range(0, 1000):
generate(0, 1, random.randint(0, 2)).save('datasets/01/' + str(x) + '.png') generate(0, 1, random.randint(0, 2)).save('datasets/01/' + str(x) + '.png')
for x in range(0, 1000): for x in range(0, 1000):
generate(1, 1, random.randint(0, 2)).save('datasets/11/' + str(x) + '.png') generate(1, 1, random.randint(0, 2)).save('datasets/11/' + str(x) + '.png')

View File

@ -2,13 +2,14 @@ import pathlib
import random import random
import torch import torch
from PIL.Image import Image
from torch import nn from torch import nn
from torch.utils.data import DataLoader from torch.utils.data import DataLoader
from torchvision import datasets, transforms from torchvision import datasets, transforms
from torchvision.transforms import Lambda from torchvision.transforms import Lambda
device = torch.device('cuda')
device = torch.device('cpu')
def train(model, dataset, n_iter=100, batch_size=2560000): def train(model, dataset, n_iter=100, batch_size=2560000):
optimizer = torch.optim.SGD(model.parameters(), lr=0.01) optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
@ -40,7 +41,7 @@ train_data = datasets.ImageFolder(root="./datasets",
transform=data_transform, transform=data_transform,
target_transform=None) target_transform=None)
model1=nn.Sequential(nn.Linear(30000, 10000),nn.ReLU(),nn.Linear(10000,10000),nn.ReLU(),nn.Linear(10000,10000),nn.Linear(10000,4),nn.LogSoftmax(dim=-1)).to(device) model1 = nn.Sequential(nn.Linear(30000, 10000), nn.ReLU(), nn.Linear(10000, 10000), nn.ReLU(), nn.Linear(10000, 0000), nn.Linear(10000, 4), nn.LogSoftmax(dim=-1)).to(device)
model1.load_state_dict(torch.load("./trained")) model1.load_state_dict(torch.load("./trained"))
train(model1, train_data) train(model1, train_data)

View File

@ -1,7 +1,6 @@
from operator import itemgetter from operator import itemgetter
import cart import cart
import copy import copy
from classes import Field
class Istate: class Istate:
@ -92,7 +91,7 @@ def fieldCost(T,node):
def cost(T, node): def cost(T, node):
cost = 0 cost = 0
while (node.get_parent() != None): while node.get_parent() is not None:
cost = cost + fieldCost(T, node) cost = cost + fieldCost(T, node)
node = node.get_parent() node = node.get_parent()
@ -154,7 +153,7 @@ def heuristic(goaltest, node):
def print_moves(elem): def print_moves(elem):
moves_list = [] moves_list = []
while (elem.get_parent() != None): while elem.get_parent() is not None:
moves_list.append(elem.get_action()) moves_list.append(elem.get_action())
elem = elem.get_parent() elem = elem.get_parent()
moves_list.reverse() moves_list.reverse()
@ -184,7 +183,6 @@ def succ(elem):
temp_move_east = elem.get_x() + 1 temp_move_east = elem.get_x() + 1
temp_move_north = elem.get_y() + 1 temp_move_north = elem.get_y() + 1
if cart.Cart.is_move_allowed_succ(elem) == "x + 1": if cart.Cart.is_move_allowed_succ(elem) == "x + 1":
actions_list.append(("move", (elem.get_direction(), temp_move_east, elem.get_y()))) actions_list.append(("move", (elem.get_direction(), temp_move_east, elem.get_y())))
elif cart.Cart.is_move_allowed_succ(elem) == "y + 1": elif cart.Cart.is_move_allowed_succ(elem) == "y + 1":
@ -194,8 +192,4 @@ def succ(elem):
elif cart.Cart.is_move_allowed_succ(elem) == "x - 1": elif cart.Cart.is_move_allowed_succ(elem) == "x - 1":
actions_list.append(("move", (elem.get_direction(), temp_move_west, elem.get_y()))) actions_list.append(("move", (elem.get_direction(), temp_move_west, elem.get_y())))
return actions_list return actions_list

14
bfs.py
View File

@ -1,4 +1,3 @@
import sys
import cart import cart
import copy import copy
@ -74,16 +73,12 @@ def goal_test(goaltest,elem):
return False return False
# def graphsearch(explored, fringe, goaltest, istate, succ): # przeszukiwanie grafu wszerz def graphsearch(goaltest, istate): # przeszukiwanie grafu wszerz
def graphsearch(explored, fringe, goaltest, istate): # przeszukiwanie grafu wszerz
node = Node(None, istate.get_direction(), None, istate.get_x(), istate.get_y()) node = Node(None, istate.get_direction(), None, istate.get_x(), istate.get_y())
fringe = [] fringe = []
#elem = []
explored = [] explored = []
#action = []
fringe.append(node) # wierzchołki do odwiedzenia fringe.append(node) # wierzchołki do odwiedzenia
# fringe = [node]
while True: while True:
if not fringe: if not fringe:
return False return False
@ -109,7 +104,7 @@ def graphsearch(explored, fringe, goaltest, istate): # przeszukiwanie grafu wsz
def print_moves(elem): def print_moves(elem):
moves_list = [] moves_list = []
while (elem.get_parent() != None): while elem.get_parent() is not None:
moves_list.append(elem.get_action()) moves_list.append(elem.get_action())
elem = elem.get_parent() elem = elem.get_parent()
moves_list.reverse() moves_list.reverse()
@ -139,7 +134,6 @@ def succ(elem):
temp_move_east = elem.get_x() + 1 temp_move_east = elem.get_x() + 1
temp_move_north = elem.get_y() + 1 temp_move_north = elem.get_y() + 1
if cart.Cart.is_move_allowed_succ(elem) == "x + 1": if cart.Cart.is_move_allowed_succ(elem) == "x + 1":
actions_list.append(("move", (elem.get_direction(), temp_move_east, elem.get_y()))) actions_list.append(("move", (elem.get_direction(), temp_move_east, elem.get_y())))
elif cart.Cart.is_move_allowed_succ(elem) == "y + 1": elif cart.Cart.is_move_allowed_succ(elem) == "y + 1":
@ -149,8 +143,4 @@ def succ(elem):
elif cart.Cart.is_move_allowed_succ(elem) == "x - 1": elif cart.Cart.is_move_allowed_succ(elem) == "x - 1":
actions_list.append(("move", (elem.get_direction(), temp_move_west, elem.get_y()))) actions_list.append(("move", (elem.get_direction(), temp_move_west, elem.get_y())))
return actions_list return actions_list

View File

@ -1,6 +1,5 @@
import pygame import pygame
from screen import SCREEN from screen import SCREEN
global BLACK
# global SCREEN # global SCREEN
global BLACK global BLACK
@ -8,9 +7,9 @@ global gridObjects
global imgTree global imgTree
global imgTree global imgTree
imgTree = pygame.image.load('img/tree.png') imgTree = pygame.image.load('img/tree.png')
gridObjects = {} # Store grid-box objects from Grid Class gridObjects = {} # Store grid-box objects from Grid Class
class Grid(object): class Grid(object):
# ta klasa rysuje kratę na ekranie # ta klasa rysuje kratę na ekranie
def __init__(self, x, y, sx, sy): def __init__(self, x, y, sx, sy):
@ -27,6 +26,7 @@ class Grid(object):
BLACK = (0, 0, 0) BLACK = (0, 0, 0)
pygame.draw.rect(SCREEN, BLACK, (self.x, self.y, self.sx, self.sy), self.width) pygame.draw.rect(SCREEN, BLACK, (self.x, self.y, self.sx, self.sy), self.width)
class Box(object): class Box(object):
# global SCREEN # global SCREEN
@ -43,6 +43,7 @@ class Box(object):
# global BLACK # global BLACK
pygame.draw.rect(SCREEN, self.color, pygame.Rect(self.x, self.y, self.sx, self.sy)) pygame.draw.rect(SCREEN, self.color, pygame.Rect(self.x, self.y, self.sx, self.sy))
class Obstacle(object): class Obstacle(object):
def __init__(self, mouseObj): def __init__(self, mouseObj):
self.mseX = mouseObj[0] self.mseX = mouseObj[0]
@ -66,6 +67,7 @@ class Obstacle(object):
SCREEN.blit(imgTree, (self.posX, self.posY)) SCREEN.blit(imgTree, (self.posX, self.posY))
# pygame.display.update() # pygame.display.update()
def getGridBoxes(grid_box): def getGridBoxes(grid_box):
global gridObjects global gridObjects
return gridObjects[grid_box] return gridObjects[grid_box]

View File

@ -25,7 +25,6 @@ class Cart:
def set_y(self, y): def set_y(self, y):
self.y = y self.y = y
def is_move_allowed(self, def is_move_allowed(self,
cart_rect): # sprawdza czy dany ruch, który chce wykonać wózek jest możliwy, zwraca prawdę lub fałsz cart_rect): # sprawdza czy dany ruch, który chce wykonać wózek jest możliwy, zwraca prawdę lub fałsz
if self.direction == definitions.CART_DIRECTION_EAST and cart_rect.x + definitions.BLOCK_SIZE < definitions.WIDTH_MAP: if self.direction == definitions.CART_DIRECTION_EAST and cart_rect.x + definitions.BLOCK_SIZE < definitions.WIDTH_MAP:
@ -74,4 +73,3 @@ class Cart:
self.direction = 1 self.direction = 1
else: else:
self.direction = self.direction + 1 self.direction = self.direction + 1

View File

@ -7,6 +7,7 @@ class Field:
self.isFertilized = isFertilized # yes/no self.isFertilized = isFertilized # yes/no
self.fertilizedTime = fertilizedTime # number self.fertilizedTime = fertilizedTime # number
class Plant: class Plant:
def __init__(self, plantType, growthState): def __init__(self, plantType, growthState):
self.plantType = plantType # wheat/carrot/cabbage self.plantType = plantType # wheat/carrot/cabbage

View File

@ -1,5 +1,6 @@
import random import random
# Generowanie unikalnej losowej linii tekstu # Generowanie unikalnej losowej linii tekstu
def generate_unique_line(existing_lines): def generate_unique_line(existing_lines):
while True: while True:
@ -9,6 +10,7 @@ def generate_unique_line(existing_lines):
if line not in existing_lines: if line not in existing_lines:
return line return line
# Generowanie 200 unikalnych linii tekstu # Generowanie 200 unikalnych linii tekstu
lines = [] lines = []
while len(lines) < 200: while len(lines) < 200:

View File

@ -1,5 +1,3 @@
# from sklearn.datasets import load_iris # from sklearn.datasets import load_iris
from sklearn.tree import export_text from sklearn.tree import export_text

View File

@ -1,5 +1,3 @@
# definicje
import os
import pygame import pygame
pygame.init() pygame.init()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

223
main.py
View File

@ -1,18 +1,15 @@
import pygame import pygame
import pathlib
import random import random
import torch import torch
from torch import nn from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets, transforms from torchvision import datasets, transforms
from torchvision.transforms import Lambda from torchvision.transforms import Lambda
from PIL import Image from PIL import Image
import astar import astar
from classes import Field, Plant, Fertilizer, Player from classes import Field, Player
from bfs import Node from bfs import Istate, succ
from bfs import Istate, print_moves, succ
from bfs import graphsearch from bfs import graphsearch
from board import Grid, Box, Obstacle, getGridBoxes, gridObjects from board import Grid, Box, Obstacle, getGridBoxes, gridObjects
from screen import SCREEN from screen import SCREEN
@ -40,8 +37,8 @@ plants[2].append(Image.open("NN/ca2.png"))
plants[2].append(Image.open("NN/ca3.png")) plants[2].append(Image.open("NN/ca3.png"))
b = [Image.open("NN/b1.png").convert('RGBA'), Image.open("NN/b2.png").convert('RGBA'), Image.open("NN/b3.png").convert('RGBA')] b = [Image.open("NN/b1.png").convert('RGBA'), Image.open("NN/b2.png").convert('RGBA'), Image.open("NN/b3.png").convert('RGBA')]
def generate(water, fertilizer, plantf): def generate(water, fertilizer, plantf):
new_im = None
if water == 1: if water == 1:
new_im = Image.new('RGB', (100, 100), new_im = Image.new('RGB', (100, 100),
(160 + random.randint(-10, 10), 80 + random.randint(-10, 10), 40 + random.randint(-10, 10))) (160 + random.randint(-10, 10), 80 + random.randint(-10, 10), 40 + random.randint(-10, 10)))
@ -98,6 +95,7 @@ def generate(water, fertilizer, plantf):
return new_im return new_im
# COLORS # COLORS
WHITE = (255, 255, 255) WHITE = (255, 255, 255)
BLACK = (0, 0, 0) BLACK = (0, 0, 0)
@ -124,18 +122,16 @@ obstacles = 1
# BFS Variables # BFS Variables
startNode = Istate(1, 1, 1) startNode = Istate(1, 1, 1)
goalNode = [1, 1] goalNode = [1, 1]
graph = dict() graph = dict()
pathFound = [] # Store the path in a list box index to draw on later pathFound = [] # Store the path in a list box index to draw on later
def drawGrid(sizex, sizey): def drawGrid(sizex, sizey):
spaceX = SCREENX // sizex spaceX = SCREENX // sizex
spaceY = SCREENY // sizey spaceY = SCREENY // sizey
width = 2
counter = 1 counter = 1
for i in range(sizex): for i in range(sizex):
@ -144,16 +140,18 @@ def drawGrid(sizex,sizey):
g = Grid(50 + i*50, 50 + j*50, spaceX, spaceY) g = Grid(50 + i*50, 50 + j*50, spaceX, spaceY)
gridObjects[counter] = g gridObjects[counter] = g
counter += 1 counter += 1
def generateGraph(row, col): def generateGraph(row, col):
# This function generates a graph based on the gridObjects instantiated! # This function generates a graph based on the gridObjects instantiated!
sample_graph = {'A':['B','C','E'], # sample_graph = {'A': ['B', 'C', 'E'],
'B':['A','D','E'], # 'B': ['A', 'D', 'E'],
'C':['A','F','G'], # 'C': ['A', 'F', 'G'],
'D':['B'], # 'D': ['B'],
'E':['A','B','D'], # 'E': ['A', 'B', 'D'],
'F':['C'], # 'F': ['C'],
'G':['C'] # 'G': ['C']
} # }
miniG = {} miniG = {}
for grid in range(len(gridObjects)): for grid in range(len(gridObjects)):
@ -214,12 +212,13 @@ def generateGraph(row,col):
return miniG2 return miniG2
def drawGraph(pathF): def drawGraph(pathF):
# Draws the path given the path-list # Draws the path given the path-list
global Ucelu global Ucelu
# print(pathF) # print(pathF)
if (Ucelu == False): if not Ucelu:
for grid in pathF: for grid in pathF:
# g = gridObjects[grid] # Get the grid-box object mentioned in the path # g = gridObjects[grid] # Get the grid-box object mentioned in the path
# x = g.x # x = g.x
@ -250,44 +249,6 @@ def drawGraph(pathF):
if player.y > 0: if player.y > 0:
player.y = player.y - 1 player.y = player.y - 1
# if player.x < (x/50 - 1):
# a = 1
# if player.x > (x/50 - 1):
# a =2
# if player.y < (y/50 - 1):
# a =3
# if player.y > (y/50 - 1):
# a =4
#
# if a==1:
# # player.x = x/50 - 1
# player.rotation = 0
# if a==2:
# # player.x = x/50 - 1
# player.rotation = 180
# if a==3:
# # player.y = y/50 - 1
# player.rotation = 270
# if a==4:
# # player.y = y/50 - 1
# player.rotation = 90
# tmpImg = pygame.transform.rotate(imgPlayer, player.rotation)
# if player.rotation == 180:
# tmpImg = pygame.transform.flip(tmpImg, True, True)
# tmpImg = pygame.transform.flip(tmpImg, True, False)
#
# #player is seen on the way
# SCREEN.blit(tmpImg, (55 + 50 * player.x, 55 + 50 * player.y))
# pygame.display.update()
# # pygame.time.wait(300)
# player.y = y/50 - 1
# player.x = x/50 - 1
# -----------------------------
i = 0 i = 0
while i < len(T): while i < len(T):
j = 0 j = 0
@ -318,7 +279,6 @@ def drawGraph(pathF):
for obs in obstacleObjects: for obs in obstacleObjects:
obstacleObjects[obs].draw() obstacleObjects[obs].draw()
for bx in boxObjects: for bx in boxObjects:
boxObjects[bx].draw() boxObjects[bx].draw()
@ -336,24 +296,15 @@ def drawGraph(pathF):
# player is seen on the way # player is seen on the way
SCREEN.blit(tmpImg, (55 + 50 * player.x, 55 + 50 * player.y)) SCREEN.blit(tmpImg, (55 + 50 * player.x, 55 + 50 * player.y))
# --------------------------------------
# tmpImg = pygame.transform.rotate(imgPlayer, player.rotation)
# # if flip:
# # if flip == True:
# if player.rotation == 180:
# tmpImg = pygame.transform.flip(tmpImg, True, True)
# tmpImg = pygame.transform.flip(tmpImg, True, False)
#
# SCREEN.blit(tmpImg, (55 + 50 * player.x, 55 + 50 * player.y))
pygame.display.update() pygame.display.update()
pygame.time.wait(300) pygame.time.wait(300)
SCREEN.fill((WHITE)) SCREEN.fill(WHITE)
# pygame.time.wait(50) # pygame.time.wait(50)
# pygame.draw.rect(SCREEN, WHITE, pygame.Rect(x, y, sx, sy)) # pygame.draw.rect(SCREEN, WHITE, pygame.Rect(x, y, sx, sy))
Ucelu = True Ucelu = True
def UIHandler(mouseObj):
def UIHandler():
# drawGrid(GRIDX, GRIDY) # drawGrid(GRIDX, GRIDY)
global Ucelu global Ucelu
drawGrid(10, 10) drawGrid(10, 10)
@ -369,7 +320,7 @@ def UIHandler(mouseObj):
if pathFound: if pathFound:
drawGraph(pathFound) drawGraph(pathFound)
# Ucelu = False
def eventHandler(kbdObj, mouseObj): def eventHandler(kbdObj, mouseObj):
global boxes global boxes
@ -380,7 +331,7 @@ def eventHandler(kbdObj,mouseObj):
global Ucelu global Ucelu
if event.type == pygame.QUIT: if event.type == pygame.QUIT:
running = False pygame.quit()
if event.type == pygame.KEYDOWN: if event.type == pygame.KEYDOWN:
pygame.time.wait(DELAY) pygame.time.wait(DELAY)
@ -426,15 +377,10 @@ def eventHandler(kbdObj,mouseObj):
# If Key_f is pressed, set goal node # If Key_f is pressed, set goal node
if kbdObj[pygame.K_f]: if kbdObj[pygame.K_f]:
gBox = getGridBoxes(int(len(gridObjects))) gBox = getGridBoxes(int(len(gridObjects)))
# gBox = getGridBoxes()
#x = mouseObj[0]
#y = mouseObj[1]
# x = gBox.x
# y = gBox.y
sx = gBox.sx sx = gBox.sx
sy = gBox.sy sy = gBox.sy
# ----------------------------------------
mseX = mouseObj[0] mseX = mouseObj[0]
mseY = mouseObj[1] mseY = mouseObj[1]
@ -444,15 +390,11 @@ def eventHandler(kbdObj,mouseObj):
y = g.y y = g.y
sx = g.sx sx = g.sx
sy = g.sy sy = g.sy
if mseX > x and mseX < x + sx: if x < mseX < x + sx:
if mseY > y and mseY < y + sy: if y < mseY < y + sy:
posX = x posX = x
posY = y posY = y
gridBox = grid
# SCREEN.blit(imgTree, (posX, posY))
# ---------------------------------------
bo = Box(posX, posY, sx, sy, BLUE) bo = Box(posX, posY, sx, sy, BLUE)
boxObjects[boxes] = bo boxObjects[boxes] = bo
# boxes += 1 # boxes += 1
@ -470,9 +412,6 @@ def eventHandler(kbdObj,mouseObj):
print(' goalNode x=', goalNode[0], 'goalNode y=', goalNode[1]) print(' goalNode x=', goalNode[0], 'goalNode y=', goalNode[1])
# pygame.display.update() # pygame.display.update()
# goalNode = (x/sx) * (y/sy) # goalNode = (x/sx) * (y/sy)
@ -527,44 +466,22 @@ def eventHandler(kbdObj,mouseObj):
y = g.y y = g.y
sx = g.sx sx = g.sx
sy = g.sy sy = g.sy
if mseX > x and mseX < x + sx: if x < mseX < x + sx:
if mseY > y and mseY < y + sy: if y < mseY < y + sy:
posX = x posX = x
posY = y posY = y
T[int((posX/50)-1)][int((posY/50)-1)].plantType = 4 T[int((posX/50)-1)][int((posY/50)-1)].plantType = 4
pygame.display.update() pygame.display.update()
pygame.time.wait(DELAY) pygame.time.wait(DELAY)
# if Key_SPACE is pressed, start the magic # if Key_SPACE is pressed, start the magic
if kbdObj[pygame.K_SPACE]: if kbdObj[pygame.K_SPACE]:
Ucelu = False Ucelu = False
gBox = getGridBoxes(1)
x = gBox.x
y = gBox.y
sx = gBox.sx
sy = gBox.sy
x = (player.x +1) * 50
y = (player.y +1) * 50
# tmpImg = pygame.transform.rotate(imgPlayer, player.rotation)
# SCREEN.blit(tmpImg, (50 + 50 * player.x, 50 + 50 * player.y))
# pygame.display.update()
#when on it keeps flashing - among others
#bo = Box(x, y, sx, sy, RED)
#boxObjects[boxes] = bo
# boxes += 1
boxes = 1 boxes = 1
# startNode.state = (10 * (player.x + 1) + (player.y + 1) - 10)
startNode.x = player.x + 1 startNode.x = player.x + 1
startNode.y = player.y + 1 startNode.y = player.y + 1
@ -582,12 +499,9 @@ def eventHandler(kbdObj,mouseObj):
graph = generateGraph(GRIDY, GRIDX) graph = generateGraph(GRIDY, GRIDX)
print(graph) print(graph)
# if startNode != goalNode:
if startNode.x != goalNode[0] or startNode.y != goalNode[1]: if startNode.x != goalNode[0] or startNode.y != goalNode[1]:
elem = []
move_list = (graphsearch(goalNode, startNode)) # przeszukiwanie grafu wszerz
move_list = (graphsearch([], [], goalNode, startNode)) # przeszukiwanie grafu wszerz
pathFound = move_list pathFound = move_list
@ -599,32 +513,11 @@ def eventHandler(kbdObj,mouseObj):
pygame.time.wait(DELAY) pygame.time.wait(DELAY)
# startNode = goalNode # startNode = goalNode
if kbdObj[pygame.K_b]: if kbdObj[pygame.K_b]:
Ucelu = False Ucelu = False
gBox = getGridBoxes(1)
x = gBox.x
y = gBox.y
sx = gBox.sx
sy = gBox.sy
x = (player.x +1) * 50
y = (player.y +1) * 50
# tmpImg = pygame.transform.rotate(imgPlayer, player.rotation)
# SCREEN.blit(tmpImg, (50 + 50 * player.x, 50 + 50 * player.y))
# pygame.display.update()
#when on it keeps flashing - among others
#bo = Box(x, y, sx, sy, RED)
#boxObjects[boxes] = bo
# boxes += 1
boxes = 1 boxes = 1
# startNode.state = (10 * (player.x + 1) + (player.y + 1) - 10)
startNode.x = player.x + 1 startNode.x = player.x + 1
startNode.y = player.y + 1 startNode.y = player.y + 1
@ -639,22 +532,11 @@ def eventHandler(kbdObj,mouseObj):
print(' startNode x=', startNode.x, 'startNode y= ', startNode.y, 'startNode direction =', startNode.direction) print(' startNode x=', startNode.x, 'startNode y= ', startNode.y, 'startNode direction =', startNode.direction)
# startNode = (((player.x + 1)*10 - 9) * (player.y + 1) )
# startNode = 2
# tmpImg = pygame.transform.rotate(imgPlayer, player.rotation)
# SCREEN.blit(tmpImg, (55 + 50 * player.x, 55 + 50 * player.y))
# pygame.display.update()
# Delay to avoid multiple spawning of objects
#pygame.time.wait(DELAY)
graph = generateGraph(GRIDY, GRIDX) graph = generateGraph(GRIDY, GRIDX)
print(graph) print(graph)
# if startNode != goalNode: # if startNode != goalNode:
if startNode.x != goalNode[0] or startNode.y != goalNode[1]: if startNode.x != goalNode[0] or startNode.y != goalNode[1]:
elem = []
move_list = (astar.graphsearch([], astar.f, [], goalNode, startNode, T, succ)) # przeszukiwanie grafu wszerz move_list = (astar.graphsearch([], astar.f, [], goalNode, startNode, T, succ)) # przeszukiwanie grafu wszerz
@ -665,17 +547,11 @@ def eventHandler(kbdObj,mouseObj):
print(move_list) print(move_list)
print('\n') print('\n')
# else:
# startNode = (10 * (player.x + 1) + (player.y + 1) - 10)
# Ucelu = True
# Delay to avoid multiple spawning of objects # Delay to avoid multiple spawning of objects
pygame.time.wait(DELAY) pygame.time.wait(DELAY)
# With it it keeps going, if without it turns off # With it it keeps going, if without it turns off
# Ucelu = False
T = [[Field(1,0,0,0,0,0),Field(0,0,1,0,0,0),Field(1,2,1,0,0,0),Field(1,3,0,0,0,0),Field(0,3,0,0,0,0),Field(0,0,1,0,0,0),Field(0,0,0,0,0,0),Field(1,3,1,0,0,0),Field(1,0,0,0,0,0),Field(1,0,1,0,0,0)], T = [[Field(1,0,0,0,0,0),Field(0,0,1,0,0,0),Field(1,2,1,0,0,0),Field(1,3,0,0,0,0),Field(0,3,0,0,0,0),Field(0,0,1,0,0,0),Field(0,0,0,0,0,0),Field(1,3,1,0,0,0),Field(1,0,0,0,0,0),Field(1,0,1,0,0,0)],
[Field(1,0,0,0,0,0),Field(0,0,1,0,0,0),Field(1,0,1,0,0,0),Field(1,3,1,0,0,0),Field(0,0,0,0,0,0),Field(0,0,0,0,0,0),Field(0,0,0,0,0,0),Field(1,3,1,0,0,0),Field(1,0,0,0,0,0),Field(1,0,1,0,0,0)], [Field(1,0,0,0,0,0),Field(0,0,1,0,0,0),Field(1,0,1,0,0,0),Field(1,3,1,0,0,0),Field(0,0,0,0,0,0),Field(0,0,0,0,0,0),Field(0,0,0,0,0,0),Field(1,3,1,0,0,0),Field(1,0,0,0,0,0),Field(1,0,1,0,0,0)],
@ -688,20 +564,6 @@ T = [[Field(1,0,0,0,0,0),Field(0,0,1,0,0,0),Field(1,2,1,0,0,0),Field(1,3,0,0,0,0
[Field(1,0,0,0,0,0),Field(0,2,0,0,0,0),Field(1,1,0,0,0,0),Field(1,0,1,0,0,0),Field(0,2,1,0,0,0),Field(0,3,0,0,0,0),Field(0,0,0,0,0,0),Field(1,0,1,0,0,0),Field(1,0,0,0,0,0),Field(1,0,1,0,0,0)], [Field(1,0,0,0,0,0),Field(0,2,0,0,0,0),Field(1,1,0,0,0,0),Field(1,0,1,0,0,0),Field(0,2,1,0,0,0),Field(0,3,0,0,0,0),Field(0,0,0,0,0,0),Field(1,0,1,0,0,0),Field(1,0,0,0,0,0),Field(1,0,1,0,0,0)],
[Field(1,0,1,0,0,0),Field(0,0,0,0,0,0),Field(1,1,1,0,0,0),Field(1,0,0,0,0,0),Field(0,1,1,0,0,0),Field(0,0,1,0,0,0),Field(0,0,0,0,0,0),Field(1,0,1,0,0,0),Field(1,0,0,0,0,0),Field(1,0,1,0,0,0)]] [Field(1,0,1,0,0,0),Field(0,0,0,0,0,0),Field(1,1,1,0,0,0),Field(1,0,0,0,0,0),Field(0,1,1,0,0,0),Field(0,0,1,0,0,0),Field(0,0,0,0,0,0),Field(1,0,1,0,0,0),Field(1,0,0,0,0,0),Field(1,0,1,0,0,0)]]
#T = [[Field(1,0,0,0,0,0),Field(0,0,1,0,0,0),Field(1,2,1,0,0,0),Field(1,3,0,0,0,0),Field(0,3,0,0,0,0),Field(0,0,1,0,0,0),Field(0,3,0,0,0,0),Field(1,0,1,0,0,0),Field(1,3,0,0,0,0),Field(1,2,1,0,0,0)],
# [Field(1,0,0,0,0,0),Field(0,0,1,0,0,0),Field(1,0,1,0,0,0),Field(1,3,1,0,0,0),Field(0,0,0,0,0,0),Field(0,0,0,0,0,0),Field(0,2,0,0,0,0),Field(1,1,0,0,0,0),Field(1,0,1,0,0,0),Field(1,1,0,0,0,0)],
# [Field(0,2,1,0,0,0),Field(0,0,1,0,0,0),Field(1,0,0,0,0,0),Field(1,0,0,0,0,0),Field(0,2,1,0,0,0),Field(0,1,1,0,0,0),Field(0,2,0,0,0,0),Field(1,0,0,0,0,0),Field(1,0,0,0,0,0),Field(1,1,0,0,0,0)],
# [Field(1,0,1,0,0,0),Field(0,0,1,0,0,0),Field(1,1,1,0,0,0),Field(1,2,0,0,0,0),Field(0,3,1,0,0,0),Field(0,1,0,0,0,0),Field(0,0,0,0,0,0),Field(1,2,0,0,0,0),Field(1,0,0,0,0,0),Field(1,0,0,0,0,0)],
# [Field(1,3,0,0,0,0),Field(0,3,1,0,0,0),Field(1,2,1,0,0,0),Field(1,1,1,0,0,0),Field(0,1,1,0,0,0),Field(0,0,0,0,0,0),Field(0,0,1,0,0,0),Field(1,0,1,0,0,0),Field(1,3,0,0,0,0),Field(1,0,1,0,0,0)],
# [Field(1,0,0,0,0,0),Field(0,0,1,0,0,0),Field(1,1,1,0,0,0),Field(1,2,0,0,0,0),Field(0,1,0,0,0,0),Field(0,2,0,0,0,0),Field(0,1,0,0,0,0),Field(1,0,1,0,0,0),Field(1,0,0,0,0,0),Field(1,1,1,0,0,0)],
# [Field(1,0,0,0,0,0),Field(0,0,0,0,0,0),Field(1,1,1,0,0,0),Field(1,2,0,0,0,0),Field(0,0,1,0,0,0),Field(0,0,1,0,0,0),Field(0,1,0,0,0,0),Field(1,2,1,0,0,0),Field(1,2,1,0,0,0),Field(1,0,0,0,0,0)],
# [Field(1,0,0,0,0,0),Field(0,0,1,0,0,0),Field(1,3,1,0,0,0),Field(1,2,1,0,0,0),Field(0,0,1,0,0,0),Field(0,0,0,0,0,0),Field(0,1,1,0,0,0),Field(1,0,0,0,0,0),Field(1,1,1,0,0,0),Field(1,1,1,0,0,0)],
# [Field(1,0,0,0,0,0),Field(0,2,0,0,0,0),Field(1,1,0,0,0,0),Field(1,0,1,0,0,0),Field(0,2,1,0,0,0),Field(0,3,0,0,0,0),Field(0,0,0,0,0,0),Field(1,0,0,0,0,0),Field(1,2,1,0,0,0),Field(1,2,1,0,0,0)],
# [Field(1,0,1,0,0,0),Field(0,0,0,0,0,0),Field(1,1,1,0,0,0),Field(1,0,0,0,0,0),Field(0,1,1,0,0,0),Field(0,0,1,0,0,0),Field(0,1,0,0,0,0),Field(1,1,1,0,0,0),Field(1,0,1,0,0,0),Field(1,0,0,0,0,0)]]
# ========================================================================================= # =========================================================================================
# no i tutaj mamy główna pętlę programu # no i tutaj mamy główna pętlę programu
@ -718,7 +580,7 @@ while running:
for event in pygame.event.get(): for event in pygame.event.get():
kbd = pygame.key.get_pressed() kbd = pygame.key.get_pressed()
mse = pygame.mouse.get_pos() mse = pygame.mouse.get_pos()
UIHandler(mse) UIHandler()
eventHandler(kbd, mse) eventHandler(kbd, mse)
pygame.display.update() pygame.display.update()
# CLOCK.tick(FPS) # CLOCK.tick(FPS)
@ -756,7 +618,6 @@ while running:
if T[i][j].plantType == 4: if T[i][j].plantType == 4:
SCREEN.blit(imgTree, (50 + 50 * i, 50 + 50 * j)) SCREEN.blit(imgTree, (50 + 50 * i, 50 + 50 * j))
j = j + 1 j = j + 1
i = i + 1 i = i + 1
@ -774,7 +635,6 @@ while running:
for bx in boxObjects: for bx in boxObjects:
boxObjects[bx].draw() boxObjects[bx].draw()
tmpImg = pygame.transform.rotate(imgPlayer, player.rotation) tmpImg = pygame.transform.rotate(imgPlayer, player.rotation)
if player.rotation == 180: if player.rotation == 180:
tmpImg = pygame.transform.flip(tmpImg, True, True) tmpImg = pygame.transform.flip(tmpImg, True, True)
@ -783,21 +643,14 @@ while running:
# player seen at the beginning # player seen at the beginning
SCREEN.blit(tmpImg, (55 + 50 * player.x, 55 + 50 * player.y)) SCREEN.blit(tmpImg, (55 + 50 * player.x, 55 + 50 * player.y))
font = pygame.font.SysFont('comicsans', 22)
label = font.render('F - cel | X - drzewo', True, (0, 0, 0))
# if Ucelu == False: label1 = font.render('ARROWS - ręczne poruszanie', True, (0, 0, 0))
# for bx in boxObjects: label2 = font.render('A - lewo | D - prawo | W - ruch', True, (0, 0, 0))
# boxObjects[bx].draw() label3 = font.render('SPACE - start BFS | B - start A*', True, (0, 0, 0))
SCREEN.blit(label, (10, 555))
SCREEN.blit(label1, (10, 580))
font = pygame.font.SysFont('comicsans', 18) SCREEN.blit(label2, (10, 605))
label = font.render('f- punkt końcowy, x- drzewa, spacja- uruchomienie', 1, (0, 0, 0))
label1 = font.render('strzałki-ręczne poruszanie traktorem,', 1, (0, 0, 0))
label2 = font.render('a- obrót w lewo, d- w prawo, w-ruch naprzód', 1, (0, 0, 0))
label3 = font.render('b - uruchom A*', 1, (0, 0, 0))
SCREEN.blit(label, (10, 570))
SCREEN.blit(label1, (10, 590))
SCREEN.blit(label2, (10, 610))
SCREEN.blit(label3, (10, 630)) SCREEN.blit(label3, (10, 630))
# pygame.display.flip() # pygame.display.flip()