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