| f rocket_bottom_y <= terrain_y_at_x: | |
| self.rocket.y = terrain_y_at_x + self.rocket.height // 2 | |
| if abs(self.rocket.velocity_y) <= 5.0 and abs(self.rocket.velocity_x) <= 5 and abs(self.rocket.angle) <= 10: | |
| self.game_over = True | |
| self.win = True # Successful landing | |
| reward = 1 # Positive reward for successful landing | |
| else: | |
| self.game_over = True # Rocket destroyed | |
| reward = -0.6 # Negative reward for crash | |
| else: | |
| if thrusting: | |
| reward = 0.002 | |
| else: | |
| reward=0 | |
| if abs(self.rocket.angle) >5: | |
| reward = -0.02 | |
| if abs(self.rocket.velocity_y) > 5 or abs(self.rocket.velocity_x) > 5: | |
| reward = -0.02 | |
| if self.rocket.y>700: | |
| self.game_over = True | |
| reward = -0.6 | |
| if self.rocket.x>800 or self.rocket.x<0: | |
| self.game_over = True | |
| reward = -0.6 | |
| return reward, self.game_over, self.win |