-
Notifications
You must be signed in to change notification settings - Fork 0
/
run.py
executable file
·129 lines (102 loc) · 3.55 KB
/
run.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/env python
from PySide.QtCore import *
from PySide.QtGui import *
import sys
from maze import Maze
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setWindowTitle("Bomb Seekerz")
self.init_maze()
def init_maze(self):
# custom map is a list containing each row
# and the width is the length of the first row
custom_map = []
f = open('map.txt', 'r')
for line in f.readlines():
custom_map.append(line)
f.close()
width = len(custom_map[0])
height = len(custom_map)
self.maze = Maze(width, height, custom_map)
hbox = QHBoxLayout()
hbox.setContentsMargins(0, 0, 10, 0)
hbox.addWidget(self.maze)
vbox = QVBoxLayout()
vbox.setContentsMargins(0, 10, 0, 0)
hbox.addLayout(vbox)
self.agents = QLineEdit("s")
vbox.addWidget(QLabel("agent to watch:"))
vbox.addWidget(self.agents)
self.btn_watch = QPushButton("Watch Agent")
self.btn_watch.clicked.connect(self.watchAgent)
vbox.addWidget(self.btn_watch)
self.btn_remove = QPushButton("Remove path")
self.btn_remove.clicked.connect(self.remove)
vbox.addWidget(self.btn_remove)
self.btn_solve = QPushButton("Start")
self.btn_solve.clicked.connect(self.startSolving)
vbox.addWidget(self.btn_solve)
self.btn_step = QPushButton("Next Step")
self.btn_step.clicked.connect(self.doStep)
vbox.addWidget(self.btn_step)
self.btn_stop = QPushButton("Stop")
self.btn_stop.setEnabled(False)
self.btn_stop.clicked.connect(self.stopSolving)
vbox.addWidget(self.btn_stop)
self.btn_restart = QPushButton("Restart")
self.btn_restart.setEnabled(True)
self.btn_restart.clicked.connect(self.restart)
vbox.addWidget(self.btn_restart)
vbox.addStretch()
proxy_widget = QWidget()
proxy_widget.setLayout(hbox)
self.setCentralWidget(proxy_widget)
self.maze.init()
def watchAgent(self):
if self.agents.displayText() == 's':
for a in self.maze.agents:
if a.is_scout:
agent = a
break
else:
try:
agent = self.maze.agents[int(self.agents.displayText())-1]
except:
return True
for a in self.maze.agents:
if a.draw_path:
a.draw_path = False
agent.draw_path = True
def remove(self):
for a in self.maze.agents:
if a.draw_path:
a.draw_path = False
def restart(self):
self.Maze = None
self.init_maze()
def doStep(self):
if self.maze.stop_parent:
self.stopSolving()
self.maze.step_num += 1
for a in self.maze.agents:
a.move()
self.maze.repaint()
def startSolving(self):
self.btn_solve.setEnabled(False)
self.btn_stop.setEnabled(True)
self.btn_step.setEnabled(True)
self.maze.init()
self.timer = QTimer(self)
self.timer.timeout.connect(self.doStep)
self.timer.setInterval(250)
self.timer.start()
def stopSolving(self):
self.btn_stop.setEnabled(False)
self.btn_solve.setEnabled(True)
self.btn_step.setEnabled(True)
self.timer.stop()
app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec_())