示例#1
0
        public Form1(string name,Simulator sim)
        {
            simulator = sim;
            map = sim.map;
            InitializeComponent();

            this.Text = name;

            pictureBox1.Width = CELL_SIZE * (map.width - map.height / 2) + CELL_SIZE / 2;
            pictureBox1.Height = CELL_SIZE * map.height;

            image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            render();
        }
示例#2
0
        static void Main(String[] args)
        {
            if (args.Length != 4 && args.Length !=5)
            {
                Console.WriteLine("Ant simulator (from ICFPC 2004)");
                Console.WriteLine("Usage:");
                Console.WriteLine("       simulator.exe <world> <ant1> <ant2> <randseed> [-nogui]");
                return;
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Map m = new Map(args[0]);

            Automaton redProgram = new Automaton(args[1]);
            Automaton blackProgram = new Automaton(args[2]);

            int seed = Int32.Parse(args[3]);

            bool noGui = args.Contains("-nogui");

            Simulator sim = new Simulator(m,redProgram,blackProgram,seed);

            /*
            // make dump
            FileStream fs = new FileStream(@"..\..\data\dump", FileMode.Create);
            StreamWriter wr = new StreamWriter(fs);

            wr.WriteLine("random seed: {0}",seed);
            for (int i = 0; i <= 1000; i++)
            {
                sim.dump(wr);
                sim.step();
            }
            wr.Close();
            */

            if (noGui)
            {
                DateTime start = DateTime.Now;
                for (int i = 0; i < 100000; i++)
                    sim.step();
                sim.printScore();
                Console.WriteLine(DateTime.Now - start);
            }
            else
                Application.Run(new Form1(String.Join(" ", args), sim));
        }
 public override void execute(Ant ant, Simulator simulator)
 {
     ant.direction += dDir;
     ant.direction = (ant.direction + 6) % 6;
     ant.state = nextState;
     simulator.map.cells[ant.x, ant.y].updated = true;
 }
 public override void execute(Ant ant, Simulator simulator)
 {
     Cell cell = simulator.map.cells[ant.x, ant.y];
     if (ant.hasFood || cell.food == 0)
         ant.state = failState;
     else
     {
         cell.food--;
         cell.updated = true;
         ant.hasFood = true;
         ant.state = nextState;
     }
 }
 public override void execute(Ant ant, Simulator simulator)
 {
     int x = ant.x;
     int y = ant.y;
     if (dir == Dir.Ahead)
     {
         x += Map.directions[ant.direction, 0];
         y += Map.directions[ant.direction, 1];
     }
     else if (dir == Dir.LeftAhead)
     {
         x += Map.directions[(ant.direction + 5) % 6, 0];
         y += Map.directions[(ant.direction + 5) % 6, 1];
     }
     else if (dir == Dir.RightAhead)
     {
         x += Map.directions[(ant.direction + 1) % 6, 0];
         y += Map.directions[(ant.direction + 1) % 6, 1];
     }
     Cell cell = simulator.map.cells[x, y];
     if (cellMatches(cell, ant.color))
         ant.state = trueState;
     else
         ant.state = falseState;
 }
 public override void execute(Ant ant, Simulator simulator)
 {
     int newX = ant.x + Map.directions[ant.direction, 0];
     int newY = ant.y + Map.directions[ant.direction, 1];
     Cell oldCell = simulator.map.cells[ant.x, ant.y];
     Debug.Assert(oldCell.ant == ant);
     Cell newCell = simulator.map.cells[newX, newY];
     if (newCell.type == CellType.ROCK || newCell.ant != null)
         ant.state = failState;
     else
     {
         oldCell.updated = true;
         newCell.updated = true;
         oldCell.ant = null;
         newCell.ant = ant;
         ant.x = newX;
         ant.y = newY;
         ant.resting = 14;
         ant.state = nextState;
         simulator.checkForSurroundedAnts(ant.x, ant.y);
     }
 }
 public override void execute(Ant ant, Simulator simulator)
 {
     Cell cell = simulator.map.cells[ant.x, ant.y];
     if (unMark)
         cell.markers[ant.color] &= ~(1 << bit);
     else
         cell.markers[ant.color] |= 1 << bit;
     cell.updated = true;
     ant.state = nextState;
 }
 public virtual void execute(Ant ant, Simulator simulator)
 {
 }
 public override void execute(Ant ant, Simulator simulator)
 {
     if (simulator.random(p) == 0)
         ant.state = nextState1;
     else
         ant.state = nextState2;
 }
示例#10
0
 public override void execute(Ant ant, Simulator simulator)
 {
     if (ant.hasFood)
     {
         ant.hasFood = false;
         Cell cell = simulator.map.cells[ant.x, ant.y];
         cell.food++;
         cell.updated = true;
     }
     ant.state = nextState;
 }