diff --git a/.idea/SztIn_gr.234798.iml b/.idea/SztIn_gr.234798.iml
index d0876a7..8388dbc 100644
--- a/.idea/SztIn_gr.234798.iml
+++ b/.idea/SztIn_gr.234798.iml
@@ -2,7 +2,7 @@
-
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index dc9ea49..d56657a 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,4 +1,4 @@
-
+
\ No newline at end of file
diff --git a/field.py b/field.py
index cd4b8c0..57ac78e 100644
--- a/field.py
+++ b/field.py
@@ -1,15 +1,14 @@
-import asyncio
+import os
import random
import time
-from heapq import *
from enum import Enum, IntEnum
from queue import PriorityQueue
-from collections import deque
from threading import Thread
-from IC3 import tree
-
import pygame
+#from recognition_v1.proverka import *
+
+from IC3 import tree
pygame.init()
BLACK = (0, 0, 0)
@@ -17,15 +16,15 @@ WHITE = (200, 200, 200)
BLUE = (46, 34, 240)
WINDOW_DIMENSIONS = 900
BLOCK_SIZE = 60
-ROCKS_NUMBER = 30
+ROCKS_NUMBER = 20
VEGETABLES_NUMBER = 20
-VEGETABLES = ('Potato', 'Broccoli', 'Carrot', 'Onion')
+VEGETABLES = ('Potato', 'Broccoli', 'Carrot', 'Capsicum')
BOARD_SIZE = int(WINDOW_DIMENSIONS / BLOCK_SIZE)
WATER_TANK_CAPACITY = 10
GAS_TANK_CAPACITY = 250
SPAWN_POINT = (0, 0)
SKLEP_POINT = (14, 14)
-TIMEOUT = 30
+TIMEOUT = 1
tractor_image = pygame.transform.scale(pygame.image.load("images/tractor_image.png"), (BLOCK_SIZE, BLOCK_SIZE))
rock_image = pygame.transform.scale(pygame.image.load("images/rock_image.png"), (BLOCK_SIZE, BLOCK_SIZE))
@@ -33,8 +32,11 @@ potato_image = pygame.transform.scale(pygame.image.load("images/potato.png"), (B
carrot_image = pygame.transform.scale(pygame.image.load("images/carrot.png"), (BLOCK_SIZE, BLOCK_SIZE))
broccoli_image = pygame.transform.scale(pygame.image.load("images/broccoli.png"), (BLOCK_SIZE, BLOCK_SIZE))
onion_image = pygame.transform.scale(pygame.image.load("images/onion.png"), (BLOCK_SIZE, BLOCK_SIZE))
+capsicum_image = pygame.transform.scale(pygame.image.load("images/capsicum.png"), (BLOCK_SIZE, BLOCK_SIZE))
+unknown_image = pygame.transform.scale(pygame.image.load("images/unknown.png"), (BLOCK_SIZE, BLOCK_SIZE))
gas_station_image = pygame.transform.scale(pygame.image.load("images/gas_station.png"), (BLOCK_SIZE, BLOCK_SIZE))
-gas_station_closed_image = pygame.transform.scale(pygame.image.load("images/gas_station_closed.png"), (BLOCK_SIZE, BLOCK_SIZE))
+gas_station_closed_image = pygame.transform.scale(pygame.image.load("images/gas_station_closed.png"),
+ (BLOCK_SIZE, BLOCK_SIZE))
sklep_station_image = pygame.transform.scale(pygame.image.load("images/storage_open.png"), (BLOCK_SIZE, BLOCK_SIZE))
sklep_closed_station_image = pygame.transform.scale(pygame.image.load("images/storage_closed.png"),
(BLOCK_SIZE, BLOCK_SIZE))
@@ -76,7 +78,7 @@ def draw_interface():
tractor.gas = GAS_TANK_CAPACITY
if (tractor.x, tractor.y) == SKLEP_POINT:
tractor.collected_vegetables = {vegetables.POTATO: 0, vegetables.BROCCOLI: 0, vegetables.CARROT: 0,
- vegetables.ONION: 0}
+ vegetables.CAPSICUM: 0}
global sc
sc = pygame.display.set_mode((WINDOW_DIMENSIONS, WINDOW_DIMENSIONS))
@@ -90,7 +92,13 @@ def draw_interface():
grid = Grid(BOARD_SIZE, BOARD_SIZE, BLOCK_SIZE)
graph1 = Graph(grid)
+ t2 = Thread(target=close_open, args=(grid,))
+ t2.setDaemon(True)
+ t2.start()
fl_running = True
+ determine_thread = Thread(target=grid.determine)
+ determine_thread.setDaemon(True)
+ determine_thread.start()
while fl_running:
draw_grid()
# region events
@@ -110,9 +118,6 @@ def draw_interface():
elif event.type == pygame.MOUSEBUTTONDOWN:
startpoint = (tractor.x, tractor.y, tractor.direction)
endpoint = get_click_mouse_pos()
- a, c = graph1.a_star(startpoint, endpoint, grid)
- b = getRoad(startpoint, c, a)
- #movement(tractor, grid, b)
decisionTree(startpoint, endpoint, tractor, grid, graph1)
# a, c = graph1.a_star(startpoint, endpoint)
# b = getRoad(startpoint, c, a)
@@ -122,9 +127,6 @@ def draw_interface():
# graph1.initialize_graph(grid)
-
-
-
class Direction(IntEnum):
UP = 0
RIGHT = 1
@@ -136,7 +138,8 @@ class vegetables(Enum):
POTATO = 3
BROCCOLI = 4
CARROT = 5
- ONION = 6
+ CAPSICUM = 6
+ UNKNOWN = 7
class types(Enum):
@@ -145,7 +148,8 @@ class types(Enum):
POTATO = 3
BROCCOLI = 4
CARROT = 5
- ONION = 6
+ CAPSICUM = 6
+ UNKNOWN = 7
class Grid:
@@ -154,20 +158,13 @@ class Grid:
self.height = height
self.block_size = block_size
self.grid = [[types.EMPTY for col in range(BOARD_SIZE)] for row in range(BOARD_SIZE)]
+ self.photo_paths = [['' for col in range(BOARD_SIZE)] for row in range(BOARD_SIZE)]
+ self.vegetables_locations = []
self.initialize_grid()
- self.is_gas_station_closed = True
- self.is_storage_closed = True
- t2 = Thread(target=self.close_open, args=(self,))
- t2.setDaemon(True)
- t2.start()
+ self.is_gas_station_closed = False
+ self.is_storage_closed = False
- def close_open(self):
- while True:
- time.sleep(TIMEOUT)
- self.is_gas_station_closed = bool(random.getrandbits(1))
- self.is_storage_closed = bool(random.getrandbits(1))
-
- def add_object(self, x, y, type_of_object: types):
+ def add_object(self, x, y, type_of_object):
if self.grid[x][y] == types.EMPTY:
self.grid[x][y] = type_of_object
return True
@@ -185,7 +182,9 @@ class Grid:
for i in range(VEGETABLES_NUMBER):
x, y = random.randrange(0, BOARD_SIZE), random.randrange(0, BOARD_SIZE)
if self.grid[x][y] == types.EMPTY and (x, y) != (0, 0):
- self.add_object(x, y, random.choice(list(vegetables)))
+ if self.add_object(x, y, vegetables.UNKNOWN): # random.choice(list(vegetables)))
+ self.vegetables_locations.append((x, y))
+ self.photo_paths[x][y] = get_random_photo_path()
else:
i -= 1
for i in range(ROCKS_NUMBER):
@@ -195,13 +194,27 @@ class Grid:
else:
i -= 1
+ def determine(self):
+
+ for x, y in self.vegetables_locations:
+ if self.grid[x][y] == vegetables.UNKNOWN:
+ timeout = time.time() + 0.5
+ while True:
+ sc.blit(pygame.transform.scale(pygame.image.load(self.photo_paths[x][y]), (BLOCK_SIZE*2, BLOCK_SIZE*2)),
+ ((x * BLOCK_SIZE) - BLOCK_SIZE/2, (y * BLOCK_SIZE) - BLOCK_SIZE/2))
+ if time.time() > timeout:
+ break
+ # time.sleep(1)
+ random_veg = random.choice(list(vegetables))
+ while random_veg == vegetables.UNKNOWN:
+ random_veg = random.choice(list(vegetables))
+ self.grid[x][y] = random_veg
+ # self.grid[x][y] = VegebatlesRecognizer.recognize(self.photo_paths[x][y])
+
class Graph:
def __init__(self, grid: Grid):
self.graph = {}
-#<<<<<<< HEAD
-
-#=======
# self.initialize_graph(grid)
# def initialize_graph(self, grid: Grid):
@@ -210,7 +223,6 @@ class Graph:
# for direction in Direction:
# self.graph[(x, y, direction)] = get_next_nodes(x, y, direction, grid)
-#>>>>>>> 2287b2b09f973efdd2dec60834b09109e0b221b9
def a_star(self, start, goal, grid: Grid):
# not finished yet https://www.youtube.com/watch?v=abHftC1GU6w
queue = PriorityQueue()
@@ -250,7 +262,7 @@ class Tractor:
self.gas = GAS_TANK_CAPACITY
self.water = WATER_TANK_CAPACITY
self.collected_vegetables = {vegetables.POTATO: 0, vegetables.BROCCOLI: 0, vegetables.CARROT: 0,
- vegetables.ONION: 0}
+ vegetables.CAPSICUM: 0}
self.image = pygame.transform.scale(pygame.image.load("images/tractor_image.png"), (BLOCK_SIZE, BLOCK_SIZE))
def rot_center(self, direc: Direction):
@@ -304,7 +316,6 @@ def get_next_nodes(x, y, direction: Direction, grid: Grid):
def movement(tractor: Tractor, grid: Grid, road):
- print(road)
n = len(road)
for i in range(n - 1):
aA = road[i]
@@ -366,8 +377,10 @@ def updateDisplay(tractor: Tractor, grid: Grid):
sc.blit(carrot_image, (x * BLOCK_SIZE + 5, y * BLOCK_SIZE + 5))
elif grid.grid[x][y] == vegetables.BROCCOLI:
sc.blit(broccoli_image, (x * BLOCK_SIZE + 5, y * BLOCK_SIZE + 5))
- elif grid.grid[x][y] == vegetables.ONION:
- sc.blit(onion_image, (x * BLOCK_SIZE + 5, y * BLOCK_SIZE + 5))
+ elif grid.grid[x][y] == vegetables.CAPSICUM:
+ sc.blit(capsicum_image, (x * BLOCK_SIZE + 5, y * BLOCK_SIZE + 5))
+ elif grid.grid[x][y] == vegetables.UNKNOWN:
+ sc.blit(unknown_image, (x * BLOCK_SIZE + 5, y * BLOCK_SIZE + 5))
elif grid.grid[x][y] == types.ROCK:
sc.blit(rock_image, (x * BLOCK_SIZE, y * BLOCK_SIZE))
sc.blit(gas_station_image, (SPAWN_POINT[0] * BLOCK_SIZE, SPAWN_POINT[1] * BLOCK_SIZE))
@@ -384,8 +397,8 @@ def updateDisplay(tractor: Tractor, grid: Grid):
vegetables_text = font.render(
'Potato: ' + str(tractor.collected_vegetables[vegetables.POTATO]) + ' Broccoli: ' + str(
tractor.collected_vegetables[vegetables.BROCCOLI]) + ' Carrot: ' + str(
- tractor.collected_vegetables[vegetables.CARROT]) + ' Onion: ' + str(
- tractor.collected_vegetables[vegetables.ONION]), True, WHITE, BLACK)
+ tractor.collected_vegetables[vegetables.CARROT]) + ' Capsicum: ' + str(
+ tractor.collected_vegetables[vegetables.CAPSICUM]), True, WHITE, BLACK)
vegetables_textrect = vegetables_text.get_rect()
vegetables_textrect.center = (WINDOW_DIMENSIONS // 2, WINDOW_DIMENSIONS - 30)
sc.blit(vegetables_text, vegetables_textrect)
@@ -512,4 +525,23 @@ def decisionTree(startpoint, endpoint, tractor, grid, graph1):
print("GAME OVER")
+def close_open(grid: Grid):
+ while True:
+ time.sleep(TIMEOUT)
+ grid.is_gas_station_closed = bool(random.getrandbits(1))
+ grid.is_storage_closed = bool(random.getrandbits(1))
+
+def get_random_photo_path():
+ dir_num = random.randint(1, 4)
+ image_dir = "test_image_dataset"
+ if dir_num == 1:
+ image_dir = "test_image_dataset/Broccoli"
+ if dir_num == 2:
+ image_dir = "test_image_dataset/Capsicum"
+ if dir_num == 3:
+ image_dir = "test_image_dataset/Carrot"
+ if dir_num == 4:
+ image_dir = "test_image_dataset/Potato"
+
+ return image_dir + '\\' + random.choice(os.listdir(image_dir))
diff --git a/images/capsicum.png b/images/capsicum.png
new file mode 100644
index 0000000..6b9606a
Binary files /dev/null and b/images/capsicum.png differ
diff --git a/images/unknown.png b/images/unknown.png
new file mode 100644
index 0000000..6b0d532
Binary files /dev/null and b/images/unknown.png differ