diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/Projekt_Sztuczna_Inteligencja.iml b/.idea/Projekt_Sztuczna_Inteligencja.iml
new file mode 100644
index 0000000..7e9e487
--- /dev/null
+++ b/.idea/Projekt_Sztuczna_Inteligencja.iml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..e037e18
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..fb92429
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/main.py b/main.py
index 9f46b88..dbb3abd 100644
--- a/main.py
+++ b/main.py
@@ -1,9 +1,10 @@
# libraries
+import sys
import pygame
import time
from pyglet.gl import * # for blocky textures
-
+import random
# other files of this project
import project_constants as const
import minefield as mf
@@ -27,42 +28,157 @@ def main():
minefield = mf.Minefield(const.MAP_RANDOM_10x10)
# get sequence of actions found by BFS algorithm
- action_sequence = bfs.graphsearch(
- initial_state=bfs.State(
- row=minefield.agent.position[0],
- column=minefield.agent.position[1],
- direction=const.Direction.UP),
- minefield=minefield)
- running = True
- while running:
- # FPS control
- clock.tick(const.V_FPS)
+ running = False
- # graphics (from display_assets)
- blit_graphics(minefield)
+ # basic font for user typed
+ base_font = pygame.font.Font(None, 32)
+ user_text1 = ''
+ user_text2 = ''
+ # create rectangle
+ input_rect1 = pygame.Rect(200, 200, 140, 32)
+ input_rect2 = pygame.Rect(200, 250, 140, 32)
- # make the next move from sequence of actions
- if any(action_sequence):
+ randomb = pygame.Rect(200, 300, 140, 32)
+ ok = pygame.Rect(200, 350, 140, 32)
+ x = pygame.Rect(180, 200, 140, 32)
+ y = pygame.Rect(180, 250, 140, 32)
+ okt = pygame.Rect(240, 305, 140, 32)
+ randtext = pygame.Rect(220, 355, 140, 32)
+ # color_active stores color(lightskyblue3) which
+ # gets active when input box is clicked by user
+ color_active = pygame.Color('lightskyblue3')
- action = action_sequence.pop(0)
-
- if action == const.Action.ROTATE_LEFT:
- minefield.agent.rotate_left()
- elif action == const.Action.ROTATE_RIGHT:
- minefield.agent.rotate_right()
- elif action == const.Action.GO:
- minefield.agent.go()
-
- time.sleep(const.ACTION_INTERVAL)
-
- else:
+ # color_passive store color(chartreuse4) which is
+ # color of input box.
+ color_passive = pygame.Color('chartreuse4')
+ color1 = color_passive
+ color2 = color_passive
+ while True:
+ active1 = False
+ active2 = False
+ while running== False:
for event in pygame.event.get():
+ # if user types QUIT then the screen will close
if event.type == pygame.QUIT:
- running = False
+ pygame.quit()
+ sys.exit()
+
+ if event.type == pygame.MOUSEBUTTONDOWN:
+ if input_rect1.collidepoint(event.pos):
+ active1 = True
+ else:
+ active1 = False
+ if input_rect2.collidepoint(event.pos):
+ active2 = True
+ else:
+ active2 = False
+ if randomb.collidepoint(event.pos):
+ running = True
+ if ok.collidepoint(event.pos):
+ user_text1 = str(random.randint(0, 9))
+ user_text2 =str(random.randint(0, 9))
+
+ if event.type == pygame.KEYDOWN:
+ if active2 == True:
+ if event.key == pygame.K_BACKSPACE:
+ user_text2 = user_text2[:-1]
+ else:
+ user_text2 += event.unicode
+
+ if active1 == True:
+ if event.key == pygame.K_BACKSPACE:
+ user_text1 = user_text1[:-1]
+ else:
+ user_text1 += event.unicode
+
+
+ # it will set background color of screen
+ const.SCREEN.fill((255, 255, 255))
+
+ if active1:
+ color1 = color_active
+ else:
+ color1 = color_passive
+
+ if active2:
+ color2 = color_active
+ else:
+ color2 = color_passive
+
+ # draw rectangle and argument passed which should
+ # be on screen
+ pygame.draw.rect(const.SCREEN, color1, input_rect1)
+ pygame.draw.rect(const.SCREEN, color2, input_rect2)
+ pygame.draw.rect(const.SCREEN, color_passive, ok)
+ pygame.draw.rect(const.SCREEN, color_passive, randomb)
+ text_surface1 = base_font.render(user_text1, True, (255, 255, 255))
+ text_surface2 = base_font.render(user_text2, True, (255, 255, 255))
+ xd = base_font.render("x", True, (0, 0, 0))
+ yd = base_font.render("y", True, (0, 0, 0))
+ okd = base_font.render("ok", True, (0, 0, 0))
+ randd = base_font.render("random", True, (0, 0, 0))
+ # render at position stated in arguments
+ const.SCREEN.blit(xd, (x.x, x.y))
+ const.SCREEN.blit(yd, (y.x, y.y))
+ const.SCREEN.blit(okd, (okt.x, okt.y))
+ const.SCREEN.blit(randd, (randtext.x, randtext.y))
+ const.SCREEN.blit(text_surface1, (input_rect1.x + 5, input_rect1.y + 5))
+ const.SCREEN.blit(text_surface2, (input_rect2.x + 5, input_rect2.y + 5))
+ # set width of textfield so that text cannot get
+ # outside of user's text input
+ input_rect1.w = max(100, text_surface1.get_width() + 10)
+ input_rect2.w = max(100, text_surface2.get_width() + 10)
+
+ # display.flip() will update only a portion of the
+ # screen to updated, not full area
+ pygame.display.flip()
+
+ # clock.tick(60) means that for every second at most
+ # 60 frames should be passed.
+ clock.tick(60)
+ toy=int(user_text1)
+ tox = int(user_text2)
+ action_sequence = bfs.graphsearch(
+ initial_state=bfs.State(
+ row=minefield.agent.position[0],
+ column=minefield.agent.position[1],
+ direction=minefield.agent.direction),
+ minefield=minefield, tox=tox, toy = toy)
+ while running:
+
+ # FPS control
+ clock.tick(const.V_FPS)
+
+ # graphics (from display_assets)
+ blit_graphics(minefield)
+
+ # make the next move from sequence of actions
+ if any(action_sequence):
+
+ action = action_sequence.pop(0)
+
+ if action == const.Action.ROTATE_LEFT:
+ minefield.agent.rotate_left()
+ elif action == const.Action.ROTATE_RIGHT:
+ minefield.agent.rotate_right()
+ elif action == const.Action.GO:
+ minefield.agent.go()
+
+ time.sleep(const.ACTION_INTERVAL/5)
+
+ else:
+ running = False
+ time.sleep(const.ACTION_INTERVAL/5)
+ #'for event in pygame.event.get():
+ # if event.type == pygame.QUIT:
+ # running = False
+
+
+
if __name__ == "__main__":
diff --git a/searching_algorithms/bfs.py b/searching_algorithms/bfs.py
index c93dca0..04ab8a8 100644
--- a/searching_algorithms/bfs.py
+++ b/searching_algorithms/bfs.py
@@ -47,13 +47,15 @@ def get_successors(state: State, minefield: Minefield):
return successors
-def graphsearch(initial_state: State, minefield: Minefield, fringe: List[Node] = None, explored: List[Node] = None):
+def graphsearch(initial_state: State, minefield: Minefield, fringe: List[Node] = None, explored: List[Node] = None, tox: int = None,toy: int = None):
# fringe and explored initialization
+ global GOAL
if fringe is None:
fringe = list()
if explored is None:
explored = list()
-
+ if tox is not None and toy is not None:
+ GOAL = (tox, toy)
explored_states = set()
fringe_states = set()