/******************************************************************************* * Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://robocode.sourceforge.net/license/epl-v10.html * * Contributors: * Flemming N. Larsen * - Initial implementation *******************************************************************************/ package robocode.control.snapshot; /** * Defines a robot state, which can be: active on the battlefield, hitting a wall or robot this turn, or dead. * * @author Flemming N. Larsen (original) * @since 1.6.2 */ public enum RobotState { /** The robot is active on the battlefield and has not hit the wall or a robot at this turn. */ ACTIVE(0), /** The robot has hit a wall, i.e. one of the four borders, at this turn. This state only last one turn. */ HIT_WALL(1), /** The robot has hit another robot at this turn. This state only last one turn. */ HIT_ROBOT(2), /** The robot is dead. */ DEAD(3); private final int value; private RobotState(int value) { this.value = value; } /** * Returns the state as an integer value. * * @return an integer value representing this state. * * @see #toState(int) */ public int getValue() { return value; } /** * Returns a RobotState based on an integer value that represents a RobotState. * * @param value the integer value that represents a specific RobotState. * @return a RobotState that corresponds to the specific integer value. * * @see #getValue() * * @throws IllegalArgumentException if the specified value does not correspond * to a RobotState and hence is invalid. */ public static RobotState toState(int value) { switch (value) { case 0: return ACTIVE; case 1: return HIT_WALL; case 2: return HIT_ROBOT; case 3: return DEAD; default: throw new IllegalArgumentException("unknown value"); } } /** * Checks if the robot is alive. * * @return {@code true} if the robot is alive; {@code false} otherwise. * * @see #isDead() */ public boolean isAlive() { return this != DEAD; } /** * Checks if the robot is dead. * * @return {@code true} if the robot is dead; {@code false} otherwise. * * @see #isAlive() */ public boolean isDead() { return this == DEAD; } /** * Checks if the robot has hit another robot. * * @return {@code true} if the robot has hit a robot; {@code false} otherwise. * * @see #isHitWall() */ public boolean isHitRobot() { return this == HIT_ROBOT; } /** * Checks if the robot has hit the wall, i.e. one of the four borders. * * @return {@code true} if the robot has hit the wall; {@code false} otherwise. * * @see #isHitRobot() */ public boolean isHitWall() { return this == HIT_WALL; } }