diff --git a/gauss-turing/webserver/gauss_turing.py b/gauss-turing/webserver/gauss_turing.py index e033a91..d0141cf 100644 --- a/gauss-turing/webserver/gauss_turing.py +++ b/gauss-turing/webserver/gauss_turing.py @@ -183,7 +183,7 @@ class Program: self.prg_counter = 0 self.screen_rect = None - def step(self): + def step(self, state='running'): cmd = self.cmds[self.prg_counter] self.prg_counter += 1 @@ -208,17 +208,6 @@ class Program: else: print("color not matching -> skipping command") - # get all events - ev = pygame.event.get() - # proceed events - for event in ev: - # handle MOUSEBUTTONUP - if event.type == pygame.MOUSEBUTTONUP: - pos = pygame.mouse.get_pos() - if pos[0] >= 325 and pos[0] <= 400 and pos[1] >= 600 and pos[1] <= 650: - print(f"clicked at pos = {pos}") - self.state = 'input' - # update state for new robot position if (not (0 <= self.robot.x < self.board.tiles.shape[1])) or not (0 <= self.robot.y < self.board.tiles.shape[0]): # robot leaves the board -> GAME OVER @@ -235,7 +224,7 @@ class Program: return 'won' # by default we continue in the running state - return 'running' + return state def render(self, scale_fac, prg_counter_override=None): """Render the current program. This will render all commands and highlight the next command to execute @@ -298,6 +287,7 @@ class Game: self.won_text = myfont.render('YOU WON', False, GREEN) self.run_text = myfont.render('RUN', False, tuple(BLACK)) self.stop_text = myfont_small.render('STOP', False, tuple(BLACK)) + self.step_text = myfont_small.render('STEP', False, tuple(BLACK)) # save initial state self.initial_pos = (self.robot.x, self.robot.y, self.robot.orientation) @@ -357,6 +347,9 @@ class Game: elif self.state == 'running': btn_surf.fill(tuple(RED)) btn_surf.blit(self.stop_text, (0, 10)) + elif self.state == 'stepping': + btn_surf.fill(tuple(YELLOW)) + btn_surf.blit(self.step_text, (0, 10)) self.screen.blit(btn_surf, self.btn_rect) # render messages @@ -400,6 +393,8 @@ class Game: self.state = 'input' elif self.state == 'input': self.state = 'running' + elif self.state == 'stepping': + self.state = self.prg.step(self.state) elif event.type == pygame.KEYUP: if event.key == pygame.K_x: if not self.beamer_mode: @@ -414,15 +409,17 @@ class Game: # switch to normal mode os.environ['SDL_VIDEO_WINDOW_POS'] = '0, 0' self.scale_fac = 125 - self.screen = pygame.display.set_mode((self.board.tiles.shape[1] * self.scale_fac, - self.board.tiles.shape[0] * self.scale_fac + 5 * self.scale_fac)) + self.screen = pygame.display.set_mode((int(self.board.tiles.shape[1] * self.scale_fac * 1.1), + int((self.board.tiles.shape[0] + 2) * self.scale_fac * 1.2))) self.beamer_mode = False elif event.key == pygame.K_r: # run program self.state = 'running' elif event.key == pygame.K_s: - self.state = 'manual' - self.prg.step() + if self.state != 'stepping': + self.state = 'stepping' + else: + self.state = self.prg.step(self.state) return self.state def reset(self): @@ -445,7 +442,9 @@ class Game: self.state = self.reset() elif self.state == 'quit': running = False - elif self.state == 'manual': + elif self.state == 'stepping': + pass + elif self.state == 'game_over' or self.state == 'won': pass else: print("unknown state")