700 lines
25 KiB
Python
700 lines
25 KiB
Python
import pygame
|
|
|
|
import astar
|
|
from classes import Field, Plant, Fertilizer, Player
|
|
from bfs import Node
|
|
from bfs import Istate, print_moves, succ
|
|
from bfs import graphsearch
|
|
from board import Grid, Box, Obstacle, getGridBoxes, gridObjects
|
|
from screen import SCREEN
|
|
|
|
# pygame.init()
|
|
|
|
# Game Constants
|
|
Ucelu = False
|
|
SCREENX = 500
|
|
SCREENY = 500
|
|
|
|
pygame.display.set_caption('Inteligentny Traktor')
|
|
|
|
# COLORS
|
|
WHITE = (255, 255, 255)
|
|
BLACK = (0, 0, 0)
|
|
RED = (255, 0, 0)
|
|
GREEN = (0, 255, 0, 0)
|
|
BLUE = (0, 0, 255, 0)
|
|
GREY = (128, 128, 128)
|
|
|
|
CLOCK = pygame.time.Clock()
|
|
FPS = 30
|
|
DELAY = 300
|
|
|
|
# np. 10 pól x 10 pól = 100 pól
|
|
GRIDX = 10
|
|
GRIDY = 10
|
|
|
|
obstacleObjects = {} # Store the obstacle objects (Blocks on the path) from Obstacle class
|
|
# global gridObjects
|
|
# gridObjects = {} # Store grid-box objects from Grid Class
|
|
gridObstacle = {} # Store the grid:obstacle pair stuck together
|
|
boxObjects = {}
|
|
boxes = 1
|
|
obstacles = 1
|
|
|
|
# BFS Variables
|
|
|
|
|
|
|
|
startNode = Istate( 1,1,1)
|
|
goalNode = [1,1]
|
|
|
|
graph = dict()
|
|
pathFound = [] # Store the path in a list box index to draw on later
|
|
|
|
def drawGrid(sizex,sizey):
|
|
spaceX = SCREENX // sizex
|
|
spaceY = SCREENY // sizey
|
|
width = 2
|
|
|
|
counter = 1
|
|
for i in range(sizex):
|
|
for j in range(sizey):
|
|
# g = Grid(i*spaceX, j*spaceY, spaceX, spaceY)
|
|
g = Grid(50 + i*50, 50 + j*50, spaceX, spaceY)
|
|
gridObjects[counter] = g
|
|
counter += 1
|
|
def generateGraph(row,col):
|
|
# This function generates a graph based on the gridObjects instantiated!
|
|
sample_graph = {'A':['B','C','E'],
|
|
'B':['A','D','E'],
|
|
'C':['A','F','G'],
|
|
'D':['B'],
|
|
'E':['A','B','D'],
|
|
'F':['C'],
|
|
'G':['C']
|
|
}
|
|
|
|
miniG = {}
|
|
for grid in range(len(gridObjects)):
|
|
grid += 1 # Synchronize index
|
|
mod = grid % col # Used to check the Top and Bottom Grid Boxes!
|
|
gN = grid - 1
|
|
gS = grid + 1
|
|
gE = grid + col
|
|
gW = grid - col
|
|
|
|
# CHECK THE NEIGHBORS TO THE GRID-BOXES, ACCOUNTING FOR THE EXTREME GRID-BOXES(BORDERS)
|
|
if mod == 0: # 5,10,15,20,25 - You can't go south from here (Bottom Boxes)
|
|
if grid > col: # Away from the Left Border of the Screen
|
|
if grid > (col*row)-col: # You are on the Right Border of the screen - You can't go East
|
|
miniG[grid] = [gN, gW]
|
|
else: # Away from the Right Border of the Screen - You can go East
|
|
miniG[grid] = [gN, gE, gW]
|
|
else: # You are on the Left Edge of the screen - You can't go West
|
|
miniG[grid] = [gN, gE]
|
|
|
|
elif mod == 1: # 6,11,16,21 :> You can't go North from here (Top Boxes)
|
|
if grid > col: # Away from the Left Border of the Screen
|
|
if grid > (col*row)-col: # You are on the Right Border of the screen - You can't go East
|
|
miniG[grid] = [gS, gW]
|
|
else: # Away from the Right Border of the Screen - You can go east
|
|
miniG[grid] = [gS, gE, gW]
|
|
else: # You are on the Left Edge of the screen - You can't go West
|
|
miniG[grid] = [gS, gE]
|
|
|
|
else: # All the rest (Not Top or Bottom Boxes) - You can go North or South
|
|
if grid > col: # Away from the Left Border of the Screen
|
|
if grid > (col*row)-col: # You are on the Right Border of the screen - You can't go East
|
|
miniG[grid] = [gN, gS, gW]
|
|
else: # Away from the Right Border of the Screen - You can go East
|
|
miniG[grid] = [gN, gS, gE, gW]
|
|
else: # You are on the Left Edge of the screen - You can't go West
|
|
miniG[grid] = [gN, gS, gE]
|
|
|
|
# FILTER OUT OBSTACLES FROM THE GRAPH
|
|
miniG2 = {}
|
|
for grid in range(len(gridObjects)):
|
|
grid += 1
|
|
if grid not in gridObstacle:
|
|
# gridObjects.remove(grid) # Dict object has no attribute : 'remove'
|
|
# HACK
|
|
miniG2[grid] = miniG[grid] # Created a new dictionary that stored the values required
|
|
# IN-DEPTH FILTER - Filter out obstacles from the neighbors-list
|
|
for neigbor in miniG2[grid]:
|
|
if neigbor in gridObstacle:
|
|
miniG2[grid].remove(neigbor)
|
|
|
|
# Filtering again as the first Filter block didn't clear out everything
|
|
# Filtering through the neighbors
|
|
for grid in miniG2:
|
|
for item in miniG2[grid]:
|
|
if item in gridObstacle:
|
|
miniG2[grid].remove(item)
|
|
|
|
return miniG2
|
|
|
|
def drawGraph(pathF):
|
|
#Draws the path given the path-list
|
|
global Ucelu
|
|
#print(pathF)
|
|
|
|
if (Ucelu == False):
|
|
for grid in pathF:
|
|
# g = gridObjects[grid] # Get the grid-box object mentioned in the path
|
|
# x = g.x
|
|
# y = g.y
|
|
# sx = g.sx
|
|
# sy = g.sy
|
|
# a = 0
|
|
# pygame.draw.rect(SCREEN, GREEN, pygame.Rect(x, y, sx, sy))
|
|
|
|
if grid == 'rotate_right':
|
|
player.rotation = (player.rotation - 90) % 360
|
|
if grid == 'rotate_left':
|
|
player.rotation = (player.rotation + 90) %360
|
|
|
|
#( player.rotation)
|
|
|
|
if grid == 'move':
|
|
if player.rotation == 0:
|
|
if player.x < 9:
|
|
player.x = player.x + 1
|
|
if player.rotation == 180:
|
|
if player.x > 0:
|
|
player.x = player.x - 1
|
|
if player.rotation == 270:
|
|
if player.y < 9:
|
|
player.y = player.y + 1
|
|
if player.rotation == 90:
|
|
if player.y > 0:
|
|
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
|
|
while i < len(T):
|
|
j = 0
|
|
while j < len(T[i]):
|
|
#color = (255, 255, 255, 0)
|
|
if T[i][j].isWet == 0:
|
|
# a = 1
|
|
color = (160, 80, 40, 0)
|
|
else:
|
|
# a = 1
|
|
color = (50, 25, 0, 0)
|
|
|
|
#Covers 'player' on the way
|
|
pygame.draw.rect(SCREEN, color, pygame.Rect(50 + 50 * i, 50 + 50 * j, 50, 50))
|
|
if T[i][j].plantType == 1:
|
|
SCREEN.blit(imgWheat, (50 + 50 * i, 50 + 50 * j))
|
|
if T[i][j].plantType == 2:
|
|
SCREEN.blit(imgCarrot, (50 + 50 * i, 50 + 50 * j))
|
|
if T[i][j].plantType == 3:
|
|
SCREEN.blit(imgCabbage, (50 + 50 * i, 50 + 50 * j))
|
|
if T[i][j].plantType == 4:
|
|
SCREEN.blit(imgTree, (50 + 50 * i, 50 + 50 * j))
|
|
|
|
j = j + 1
|
|
i = i + 1
|
|
|
|
# Render the trees
|
|
for obs in obstacleObjects:
|
|
obstacleObjects[obs].draw()
|
|
|
|
|
|
for bx in boxObjects:
|
|
boxObjects[bx].draw()
|
|
|
|
i = 0
|
|
while i < len(T)+1:
|
|
pygame.draw.line(SCREEN, (0, 0, 0), (50 + i * 50, 50), (50 + i * 50, 50 + len(T) * 50), 1)
|
|
pygame.draw.line(SCREEN, (0, 0, 0), (50, 50 + i * 50), (50 + len(T) * 50, 50 + i * 50), 1)
|
|
i = i + 1
|
|
|
|
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))
|
|
|
|
# --------------------------------------
|
|
|
|
# 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.time.wait(300)
|
|
SCREEN.fill((WHITE))
|
|
# pygame.time.wait(50)
|
|
# pygame.draw.rect(SCREEN, WHITE, pygame.Rect(x, y, sx, sy))
|
|
Ucelu = True
|
|
def UIHandler(mouseObj):
|
|
# drawGrid(GRIDX, GRIDY)
|
|
global Ucelu
|
|
drawGrid(10,10)
|
|
|
|
for grid in gridObjects:
|
|
gridObjects[grid].draw()
|
|
|
|
for bx in boxObjects:
|
|
boxObjects[bx].draw()
|
|
|
|
for obs in obstacleObjects:
|
|
obstacleObjects[obs].draw()
|
|
|
|
if pathFound:
|
|
drawGraph(pathFound)
|
|
# Ucelu = False
|
|
|
|
def eventHandler(kbdObj,mouseObj):
|
|
global boxes
|
|
global obstacles
|
|
global startNode
|
|
global goalNode
|
|
global pathFound
|
|
global Ucelu
|
|
|
|
if event.type == pygame.QUIT:
|
|
running = False
|
|
|
|
if event.type == pygame.KEYDOWN:
|
|
pygame.time.wait(DELAY)
|
|
if event.key == pygame.K_LEFT:
|
|
if player.x > 0:
|
|
player.x = player.x - 1
|
|
player.rotation = 180
|
|
|
|
if event.key == pygame.K_UP:
|
|
if player.y > 0:
|
|
player.y = player.y - 1
|
|
player.rotation = 90
|
|
|
|
if event.key == pygame.K_RIGHT:
|
|
if player.x < 9:
|
|
player.x = player.x + 1
|
|
player.rotation = 0
|
|
|
|
if event.key == pygame.K_DOWN:
|
|
if player.y < 9:
|
|
player.y = player.y + 1
|
|
player.rotation = 270
|
|
|
|
# Aga start lewo prawo, naprzód
|
|
if event.key == pygame.K_a:
|
|
player.rotation = (player.rotation + 90) % 360
|
|
if event.key == pygame.K_d:
|
|
player.rotation = (player.rotation - 90) % 360
|
|
if event.key == pygame.K_w:
|
|
if player.rotation == 0:
|
|
if player.x < 9:
|
|
player.x = player.x + 1
|
|
if player.rotation == 180:
|
|
if player.x > 0:
|
|
player.x = player.x - 1
|
|
if player.rotation == 270:
|
|
if player.y < 9:
|
|
player.y = player.y + 1
|
|
if player.rotation == 90:
|
|
if player.y > 0:
|
|
player.y = player.y - 1
|
|
|
|
# If Key_f is pressed, set goal node
|
|
if kbdObj[pygame.K_f]:
|
|
gBox = getGridBoxes(int(len(gridObjects)))
|
|
# gBox = getGridBoxes()
|
|
|
|
#x = mouseObj[0]
|
|
#y = mouseObj[1]
|
|
# x = gBox.x
|
|
# y = gBox.y
|
|
sx = gBox.sx
|
|
sy = gBox.sy
|
|
# ----------------------------------------
|
|
mseX = mouseObj[0]
|
|
mseY = mouseObj[1]
|
|
|
|
for grid in gridObjects:
|
|
g = getGridBoxes(grid)
|
|
x = g.x
|
|
y = g.y
|
|
sx = g.sx
|
|
sy = g.sy
|
|
if mseX > x and mseX < x + sx:
|
|
if mseY > y and mseY < y + sy:
|
|
posX = x
|
|
posY = y
|
|
gridBox = grid
|
|
|
|
# SCREEN.blit(imgTree, (posX, posY))
|
|
|
|
# ---------------------------------------
|
|
bo = Box(posX, posY, sx, sy, BLUE)
|
|
boxObjects[boxes] = bo
|
|
# boxes += 1
|
|
boxes = 1
|
|
# goalNode = GRIDX*GRIDX
|
|
# goalNode = (10 * (x + 1) + (y + 1) - 10)
|
|
|
|
# goalNode.state = int(10 * (posX/50 ) + (posY/50) - 10)
|
|
|
|
# goalNode[0] = int((posX/50)
|
|
# goalNode[1] = int(posY/50) - 10
|
|
|
|
goalNode = [int(posX/50), int(posY/50)]
|
|
# goalNode = [10,10]
|
|
|
|
print(' goalNode x=', goalNode[0], 'goalNode y=', goalNode[1])
|
|
|
|
|
|
|
|
|
|
# pygame.display.update()
|
|
|
|
# goalNode = (x/sx) * (y/sy)
|
|
# Delay to avoid multiple spawning of objects
|
|
pygame.time.wait(DELAY)
|
|
|
|
# If Key_x is pressed, spawn tree
|
|
if kbdObj[pygame.K_x]:
|
|
obs = Obstacle(mouseObj)
|
|
obstacleObjects[obstacles] = obs
|
|
# print(obs.gridBox)
|
|
obstacles += 1
|
|
# print(obstacleObjects)
|
|
gridObstacle[obs.gridBox] = obstacles
|
|
# Delay to avoid multiple spawning of objects
|
|
|
|
mseX = mouseObj[0]
|
|
mseY = mouseObj[1]
|
|
|
|
for grid in gridObjects:
|
|
g = getGridBoxes(grid)
|
|
x = g.x
|
|
y = g.y
|
|
sx = g.sx
|
|
sy = g.sy
|
|
if mseX > x and mseX < x + sx:
|
|
if mseY > y and mseY < y + sy:
|
|
posX = x
|
|
posY = y
|
|
|
|
T[int((posX/50)-1)][int((posY/50)-1)].plantType=4
|
|
|
|
|
|
pygame.display.update()
|
|
pygame.time.wait(DELAY)
|
|
|
|
|
|
# if Key_SPACE is pressed, start the magic
|
|
if kbdObj[pygame.K_SPACE]:
|
|
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
|
|
|
|
# startNode.state = (10 * (player.x + 1) + (player.y + 1) - 10)
|
|
|
|
startNode.x = player.x + 1
|
|
startNode.y = player.y + 1
|
|
|
|
if player.rotation == 0:
|
|
startNode.direction = 1
|
|
elif player.rotation == 90:
|
|
startNode.direction = 2
|
|
elif player.rotation == 180:
|
|
startNode.direction = 3
|
|
elif player.rotation == 270:
|
|
startNode.direction = 4
|
|
|
|
print(' startNode x=', startNode.x, 'startNode y= ', startNode.y, 'startNode direction =', startNode.direction)
|
|
|
|
graph = generateGraph(GRIDY,GRIDX)
|
|
print(graph)
|
|
|
|
# if startNode != goalNode:
|
|
if startNode.x != goalNode[0] or startNode.y != goalNode[1]:
|
|
elem = []
|
|
|
|
|
|
move_list = (graphsearch([], [], goalNode, startNode)) # przeszukiwanie grafu wszerz
|
|
|
|
pathFound = move_list
|
|
|
|
# pathFound = bfs.graphsearch()
|
|
print('akcje które wykonuję by znalezc sie u celu')
|
|
print(move_list)
|
|
print('\n')
|
|
# Delay to avoid multiple spawning of objects
|
|
pygame.time.wait(DELAY)
|
|
# startNode = goalNode
|
|
|
|
|
|
if kbdObj[pygame.K_b]:
|
|
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
|
|
|
|
# startNode.state = (10 * (player.x + 1) + (player.y + 1) - 10)
|
|
|
|
startNode.x = player.x + 1
|
|
startNode.y = player.y + 1
|
|
|
|
if player.rotation == 0:
|
|
startNode.direction = 1
|
|
elif player.rotation == 90:
|
|
startNode.direction = 2
|
|
elif player.rotation == 180:
|
|
startNode.direction = 3
|
|
elif player.rotation == 270:
|
|
startNode.direction = 4
|
|
|
|
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)
|
|
print(graph)
|
|
|
|
# if startNode != goalNode:
|
|
if startNode.x != goalNode[0] or startNode.y != goalNode[1]:
|
|
elem = []
|
|
|
|
move_list = (astar.graphsearch([], astar.f, [], goalNode, startNode, T, succ)) # przeszukiwanie grafu wszerz
|
|
|
|
pathFound = move_list
|
|
|
|
# pathFound = bfs.graphsearch()
|
|
print('akcje które wykonuję by znalezc sie u celu')
|
|
print(move_list)
|
|
print('\n')
|
|
|
|
|
|
# else:
|
|
# startNode = (10 * (player.x + 1) + (player.y + 1) - 10)
|
|
# Ucelu = True
|
|
|
|
# Delay to avoid multiple spawning of objects
|
|
pygame.time.wait(DELAY)
|
|
|
|
#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)],
|
|
[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(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,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,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,3,1,0,0,0),Field(1,0,0,0,0,0),Field(1,0,1,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,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,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,0,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,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,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,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)]]
|
|
|
|
|
|
#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
|
|
|
|
pygame.init()
|
|
|
|
player = Player()
|
|
running = True
|
|
# clock = pygame.time.Clock()
|
|
|
|
SCREEN.fill(WHITE)
|
|
|
|
while running:
|
|
|
|
for event in pygame.event.get():
|
|
kbd = pygame.key.get_pressed()
|
|
mse = pygame.mouse.get_pos()
|
|
UIHandler(mse)
|
|
eventHandler(kbd, mse)
|
|
pygame.display.update()
|
|
# CLOCK.tick(FPS)
|
|
|
|
#screen.fill((175, 255, 50, 0))
|
|
|
|
# SCREEN.fill((WHITE))
|
|
imgWheat = pygame.image.load('img/wheat.png')
|
|
imgCarrot = pygame.image.load('img/carrot.png')
|
|
imgCabbage = pygame.image.load('img/cabbage.png')
|
|
imgPlayer = pygame.image.load('img/player.png')
|
|
global imgTree
|
|
imgTree = pygame.image.load('img/tree.png')
|
|
# pygame.display.update()
|
|
|
|
i = 0
|
|
while i < len(T):
|
|
j = 0
|
|
while j < len(T[i]):
|
|
# color = (255, 255, 255, 0)
|
|
if T[i][j].isWet == 0:
|
|
# a = 1
|
|
color = (160, 80, 40, 0)
|
|
else:
|
|
# a = 1
|
|
color = (50, 25, 0, 0)
|
|
#colour from the beginning
|
|
pygame.draw.rect(SCREEN, color, pygame.Rect(50 + 50 * i, 50 + 50 * j, 50, 50))
|
|
if T[i][j].plantType == 1:
|
|
SCREEN.blit(imgWheat, (50 + 50 * i, 50 + 50 * j))
|
|
if T[i][j].plantType == 2:
|
|
SCREEN.blit(imgCarrot, (50 + 50 * i, 50 + 50 * j))
|
|
if T[i][j].plantType == 3:
|
|
SCREEN.blit(imgCabbage, (50 + 50 * i, 50 + 50 * j))
|
|
if T[i][j].plantType == 4:
|
|
SCREEN.blit(imgTree, (50 + 50 * i, 50 + 50 * j))
|
|
|
|
|
|
j = j + 1
|
|
i = i + 1
|
|
|
|
i = 0
|
|
while i < len(T)+1:
|
|
pygame.draw.line(SCREEN, (0, 0, 0), (50 + i * 50, 50), (50 + i * 50, 50 + len(T) * 50), 1)
|
|
pygame.draw.line(SCREEN, (0, 0, 0), (50, 50 + i * 50), (50 + len(T) * 50, 50 + i * 50), 1)
|
|
i = i + 1
|
|
|
|
for obs in obstacleObjects:
|
|
obstacleObjects[obs].draw()
|
|
|
|
# if startNode.state != goalNode.state:
|
|
if startNode.x != goalNode[0] or startNode.y != goalNode[1] :
|
|
for bx in boxObjects:
|
|
boxObjects[bx].draw()
|
|
|
|
|
|
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 seen at the beginning
|
|
SCREEN.blit(tmpImg, (55 + 50 * player.x, 55 + 50 * player.y))
|
|
|
|
|
|
|
|
# if Ucelu == False:
|
|
# for bx in boxObjects:
|
|
# boxObjects[bx].draw()
|
|
|
|
|
|
font = pygame.font.SysFont('comicsans', 18)
|
|
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))
|
|
|
|
# pygame.display.flip()
|
|
|
|
pygame.display.update()
|
|
CLOCK.tick(FPS)
|
|
|
|
# Done! Time to quit.
|
|
|
|
pygame.quit() |