示例#1
0
        static void Main( string[] args )
        {
            Bot bot = new Bot();

            while ( myPhase != GamePhase.Done )
            {
                // Read a line, remove leading or trailing white
                // space and make all letters lower case
                String line = Console.ReadLine().Trim().ToLower();

                // If line is empty or commented, skip
                if ( line.Length == 0 || line[ 0 ] == '#' )
                    continue;

                if ( myPhase == GamePhase.None )
                {
                    switch ( line )
                    {
                        case "setup":
                            myPhase = GamePhase.Setup;
                            break;
                        case "turn":
                            myPhase = GamePhase.Turn;
                            GameState.PreTurn();
                            break;
                        case "done":
                            myPhase = GamePhase.Done;
                            break;
                        default:
                            continue;
                    }
                }
                else
                {
                    if ( line == "end" )
                    {
                        switch ( myPhase )
                        {
                            case GamePhase.Setup:
                                GameState.PostSetup();
                                break;
                            case GamePhase.Turn:
                                bot.TakeTurn();
                                break;
                        }

                        myPhase = GamePhase.None;
                    }
                    else
                    {
                        String[] split = line.Split( new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries );

                        switch ( myPhase )
                        {
                            case GamePhase.Setup:
                                switch ( split[ 0 ] )
                                {
                                    case "width":
                                        GameState.MapWidth = int.Parse( split[ 1 ] );
                                        break;
                                    case "height":
                                        GameState.MapHeight = int.Parse( split[ 1 ] );
                                        break;
                                    case "seed":
                                        GameState.Random = new Random( int.Parse( split[ 1 ] ) );
                                        break;
                                    case "fow":
                                        GameState.FogOfWar = bool.Parse( split[ 1 ] );
                                        break;
                                    case "vrange":
                                        GameState.ViewRange = float.Parse( split[ 1 ] );
                                        break;
                                    case "teams":
                                        GameState.TeamCount = int.Parse( split[ 1 ] );
                                        break;
                                    case "turns":
                                        GameState.TurnLimit = int.Parse( split[ 1 ] );
                                        break;
                                    case "timeout":
                                        GameState.Timeout = int.Parse( split[ 1 ] );
                                        break;
                                }
                                break;
                            case GamePhase.Turn:
                                int team;
                                bool found;
                                Position pos;
                                Direction dir;
                                switch ( split[ 0 ] )
                                {
                                    case "t":
                                        GameState.Turn = int.Parse( split[ 1 ] );
                                        break;
                                    case "a":
                                        team = int.Parse( split[ 1 ] );
                                        pos = new Position( int.Parse( split[ 2 ] ), int.Parse( split[ 3 ] ) );
                                        dir = Direction.Parse( split[ 4 ] );
                                        if ( team == 0 )
                                        {
                                            found = false;
                                            foreach ( Agent agent in GameState.Agents[ 0 ] )
                                            {
                                                if ( agent.Position.Equals( pos ) )
                                                {
                                                    found = true;
                                                    if ( !agent.Confirmed )
                                                        agent.Confirmed = true;
                                                    else
                                                        throw new Exception( "Duplicate agent detected" );

                                                    break;
                                                }
                                            }

                                            if ( !found )
                                                GameState.Agents[ 0 ].Add( new Agent( team, pos, dir ) );
                                        }
                                        else
                                        {
                                            GameState.Agents[ team ].Add( new Agent( team, pos, dir ) );
                                        }
                                        break;
                                    case "d":
                                        team = int.Parse( split[ 1 ] );
                                        pos = new Position( int.Parse( split[ 2 ] ), int.Parse( split[ 3 ] ) );
                                        dir = Direction.Parse( split[ 4 ] );
                                        GameState.Dead[ team ].Add( new Agent( team, pos, dir ) );
                                        break;
                                    case "b":
                                        team = int.Parse( split[ 1 ] );
                                        pos = new Position( int.Parse( split[ 2 ] ), int.Parse( split[ 3 ] ) );
                                        GameState.Bases[ team ].Add( pos );
                                        break;
                                    case "p":
                                        pos = new Position( int.Parse( split[ 1 ] ), int.Parse( split[ 2 ] ) );
                                        GameState.Packages.Add( pos );
                                        break;
                                    case "w":
                                        pos = new Position( int.Parse( split[ 1 ] ), int.Parse( split[ 2 ] ) );
                                        GameState.Map[ pos.X, pos.Y ] = Tile.Wall;
                                        break;
                                }
                                break;
                        }
                    }
                }
            }
        }
示例#2
0
        static void Main(string[] args)
        {
            Bot bot = new Bot();

            while (myPhase != GamePhase.Done)
            {
                // Read a line, remove leading or trailing white
                // space and make all letters lower case
                String line = Console.ReadLine().Trim().ToLower();

                // If line is empty or commented, skip
                if (line.Length == 0 || line[0] == '#')
                {
                    continue;
                }

                if (myPhase == GamePhase.None)
                {
                    switch (line)
                    {
                    case "setup":
                        myPhase = GamePhase.Setup;
                        break;

                    case "turn":
                        myPhase = GamePhase.Turn;
                        GameState.PreTurn();
                        break;

                    case "done":
                        myPhase = GamePhase.Done;
                        break;

                    default:
                        continue;
                    }
                }
                else
                {
                    if (line == "end")
                    {
                        switch (myPhase)
                        {
                        case GamePhase.Setup:
                            GameState.PostSetup();
                            break;

                        case GamePhase.Turn:
                            bot.TakeTurn();
                            break;
                        }

                        myPhase = GamePhase.None;
                    }
                    else
                    {
                        String[] split = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                        switch (myPhase)
                        {
                        case GamePhase.Setup:
                            switch (split[0])
                            {
                            case "width":
                                GameState.MapWidth = int.Parse(split[1]);
                                break;

                            case "height":
                                GameState.MapHeight = int.Parse(split[1]);
                                break;

                            case "seed":
                                GameState.Random = new Random(int.Parse(split[1]));
                                break;

                            case "fow":
                                GameState.FogOfWar = bool.Parse(split[1]);
                                break;

                            case "vrange":
                                GameState.ViewRange = float.Parse(split[1]);
                                break;

                            case "teams":
                                GameState.TeamCount = int.Parse(split[1]);
                                break;

                            case "turns":
                                GameState.TurnLimit = int.Parse(split[1]);
                                break;

                            case "timeout":
                                GameState.Timeout = int.Parse(split[1]);
                                break;
                            }
                            break;

                        case GamePhase.Turn:
                            int       team;
                            bool      found;
                            Position  pos;
                            Direction dir;
                            switch (split[0])
                            {
                            case "t":
                                GameState.Turn = int.Parse(split[1]);
                                break;

                            case "a":
                                team = int.Parse(split[1]);
                                pos  = new Position(int.Parse(split[2]), int.Parse(split[3]));
                                dir  = Direction.Parse(split[4]);
                                if (team == 0)
                                {
                                    found = false;
                                    foreach (Agent agent in GameState.Agents[0])
                                    {
                                        if (agent.Position.Equals(pos))
                                        {
                                            found = true;
                                            if (!agent.Confirmed)
                                            {
                                                agent.Confirmed = true;
                                            }
                                            else
                                            {
                                                throw new Exception("Duplicate agent detected");
                                            }

                                            break;
                                        }
                                    }

                                    if (!found)
                                    {
                                        GameState.Agents[0].Add(new Agent(team, pos, dir));
                                    }
                                }
                                else
                                {
                                    GameState.Agents[team].Add(new Agent(team, pos, dir));
                                }
                                break;

                            case "d":
                                team = int.Parse(split[1]);
                                pos  = new Position(int.Parse(split[2]), int.Parse(split[3]));
                                dir  = Direction.Parse(split[4]);
                                GameState.Dead[team].Add(new Agent(team, pos, dir));
                                break;

                            case "b":
                                team = int.Parse(split[1]);
                                pos  = new Position(int.Parse(split[2]), int.Parse(split[3]));
                                GameState.Bases[team].Add(pos);
                                break;

                            case "p":
                                pos = new Position(int.Parse(split[1]), int.Parse(split[2]));
                                GameState.Packages.Add(pos);
                                break;

                            case "w":
                                pos = new Position(int.Parse(split[1]), int.Parse(split[2]));
                                GameState.Map[pos.X, pos.Y] = Tile.Wall;
                                break;
                            }
                            break;
                        }
                    }
                }
            }
        }