-
Notifications
You must be signed in to change notification settings - Fork 8
/
beat_the_room.py
128 lines (102 loc) · 3.58 KB
/
beat_the_room.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
import time
from threading import Thread
import subprocess
import RPi.GPIO as GPIO
# KEINE UMLAUTE IN DIE DATEIEN
class Controller(object):
def __init__(self):
self.puzzles = []
import Klopfraetsel
import Puzzle1
import SchluessekRaetsel
import KameraRaetsel
import RadioRaetsel
import TasterRaetsel
import NumpadRaetsel
# puzlle hier Importieren und zu der Liste hinzufuegen
# die Reihenfolge hier ist auch die Reihenfolge der Puzzle!
#self.puzzles.append(NumpadRaetsel.NumpadRaetsel()) # TODO: nach unten schieben
self.puzzles.append(SchluessekRaetsel.SchluesselRaetsel())
self.puzzles.append(TasterRaetsel.TasterRaetsel())
self.puzzles.append(KameraRaetsel.KameraRaetsel())
self.puzzles.append(Klopfraetsel.Klopfraetsel())
#self.puzzles.append(Puzzle1.Puzzle1())
#self.puzzles.append(RadioRaetsel.RadioRaetsel())
self.hint_queue = []
self.run_thread = Thread(target=self.run_func)
def run_func(self):
print("running")
print(self.puzzles)
self.puzzles[0].activated = True
while len(self.puzzles) > 0:
while not self.puzzles[0].solved:
pass
self.puzzles.pop(0)
if len(self.puzzles) > 0:
self.puzzles[0].activated = True
print(str(len(self.puzzles)))
print("GEWONNEN!")
def reset_timer(self):
pass
def deactivate(self, puzzle): # muss hinweis und puzzle entfernen
self.puzzles.remove(puzzle)
for h in puzzle.hints:
self.hint_queue.remove(h)
''' Multithreading:
def activate(self, id):
for p in puzzles:
if p.id == id:
active_puzzles.append(p)
p.activated = True
return
'''
class Puzzle(object):
def __init__(self):
self.id = None
self.controller = "test"
self.hints = []
self.activated = False
self.solved = False
self.run_thread = Thread(target=self.run_thread_func)
self.run_thread.start()
self.interact_thread = Thread(target=self.interact)
def run_thread_func(self):
while not self.activated:
pass
self.init()
self.interact_thread.start()
timer = 0
next_hint = 0
while not self.solved:
print("Not Solved" + str(timer))
# alle fuenf Sekunden kommt ein Hinweis
if timer == 60:
# fur jedes Raetsel muss es zwei Hinweise geben. Nach den naechsten funf Sekunden loest sich das Raetsel von alleinr
if next_hint == 2:
self.solved = True
self.hints[next_hint].show()
timer = 0
next_hint = next_hint + 1
timer = timer + 1
time.sleep(1)
self.deinit()
def init(self):
raise NotImplementedError
def interact(self):
raise NotImplementedError
def deinit(self):
raise NotImplementedError
class Hint(object):
def __init__(self, puzzle, file):
self.puzzle = puzzle
self.file = file
def show(self):
# implemtierung von filmabspielen muss noch hinzugefuegt werden
# argumente fuer omxplayer: -b -loop --no-osd
# killall omxplayer, nach ende des hinweises
subprocess.Popen("omxplayer",)
print("showing hint "+str(self.file))
def make_hint(puzzle, file):
return Hint(puzzle, file)
if __name__ == "__main__":
Controller().run_thread.start()