| from guess_env.models import GuessObservation | |
| import random | |
| class GuessEnvironment: | |
| def __init__(self, max_guesses: int): | |
| self.max_guesses = max_guesses | |
| self.guesses_made = 0 | |
| self.done = False | |
| def reset(self): | |
| self.guesses_made = 0 | |
| self.done = False | |
| self.target_number = random.randint(1, 100) | |
| return GuessObservation( | |
| last_guess_feedback="Game reset. Start guessing!", | |
| guesses_remaining=self.max_guesses, | |
| reward=0.0, | |
| done=self.done | |
| ) | |
| def step(self, action): | |
| if self.done: | |
| raise Exception("Game is over. Please reset the environment.") | |
| self.guesses_made += 1 | |
| guess = action.guess | |
| if guess < self.target_number: | |
| feedback = "Too low!" | |
| reward = -1.0 | |
| elif guess > self.target_number: | |
| feedback = "Too high!" | |
| reward = -1.0 | |
| else: | |
| feedback = "Correct! You've guessed the number!" | |
| reward = 10.0 | |
| self.done = True | |
| if self.guesses_made >= self.max_guesses and not self.done: | |
| feedback = f"Game over! The correct number was {self.target_number}." | |
| self.done = True | |
| return GuessObservation( | |
| last_guess_feedback=feedback, | |
| guesses_remaining=self.max_guesses - self.guesses_made, | |
| reward=reward, | |
| done=self.done | |
| ) |