Beispiel #1
0
 public void Reset()
 {
     Bots.Clear();
     Bombs.Clear();
     Missiles.Clear();
     Explosions.Clear();
     Board = new BoardTile[Board.GetLength(0), Board.GetLength(1)];
     OnArenaChanged();
 }
Beispiel #2
0
 private void OnStateChange(KMGameInfo.State state)
 {
     currentState = state;
     setPins();
     if (currentState != KMGameInfo.State.PostGame)
     {
         arduinoConnection.Stop();
     }
     else
     {
         if (bombState == 0)
         {
             StopCoroutines(); arduinoConnection.sendMSG(String.Format("{0} {1} {2} 0 0 255", RP, GP, BP));
         }                                                                                                                      //For multiple bombs
     }
     if (currentState == KMGameInfo.State.Gameplay)
     {
         //if(arduinoConnection._connected) StartCoroutine(Test());
         bombState   = 0;
         lastStrikes = 0;
         lastSolves  = 0;
         strikeCounts.Clear();
         solveCounts.Clear();
         StartCoroutine(getField());
         StartCoroutine(Warning());
         StartCoroutine(OnStrike());
         StartCoroutine(OnSolve());
         StartCoroutine(CheckForBomb(true));
         StartCoroutine(FactoryCheck());
         StartCoroutine(getBomb());
         StartCoroutine(HandleReflectors());
     }
     else
     {
         currentModuleName = "";
         Modules.Clear();
         StopCoroutine(CheckForBomb(false));
         StopCoroutine(FactoryCheck());
         StopCoroutine(WaitUntilEndFactory());
         StopCoroutine(HandleReflectors());
         BombActive = false;
         Bombs.Clear();
         BombCommanders.Clear();
     }
     if (currentState == KMGameInfo.State.Quitting)
     {
         arduinoConnection.Disconnect();
     }
 }
Beispiel #3
0
 public void Start(Texture2D bomb_texture, GameTime gametime, SpriteBatch spritebatch)
 {
     if (Teachers.Count != 0)
     {
         int randx = random.Next(832, 4928);
         spawn += (float)gametime.ElapsedGameTime.TotalSeconds;
         if (spawn >= 1)
         {
             spawn = 0;
             if (Bombs.Count() < 30)
             {
                 Bombs.Add(new BombQuestion(bomb_texture, new Vector2(randx, 0), spritebatch));
             }
         }
     }
     else
     {
         Bombs.Clear();
     }
 }
Beispiel #4
0
 public void ClearMovedEntities()
 {
     Troops.Clear();
     Bombs.Clear();
 }
Beispiel #5
0
        public void GenerateBombs()
        {
            foreach (Bomb bomb in Bombs)
            {
                if (!(GameMap.MapUnits[bomb.UnitPosition.Row, bomb.UnitPosition.Column] is Snake))
                {
                    GameMap.RemoveUnit(bomb.UnitPosition);
                }
            }
            Bombs.Clear();

            Random random = new Random();
            int    aux    = random.Next(100);

            if (aux < 60) // place one Bomb
            {
                bool canPut = false;
                while (!canPut)
                {
                    Random rdRow     = new Random();
                    Random rdColumn  = new Random();
                    int    auxRow    = rdRow.Next(GameMap.NumberOfRows);
                    int    auxColumn = rdColumn.Next(GameMap.NumberOfColumns);
                    if (GameMap.MapUnits[auxRow, auxColumn] == null &&
                        (((auxRow - SnakeParts[0].UnitPosition.Row) < -2) || ((auxRow - SnakeParts[0].UnitPosition.Row) > 2) ||
                         ((auxColumn - SnakeParts[0].UnitPosition.Column) < -2) || ((auxColumn - SnakeParts[0].UnitPosition.Column) > 2)))
                    {
                        GameMap.AddUnit(new Bomb(new Position(auxRow, auxColumn)));
                        Bombs.Add(new Bomb(new Position(auxRow, auxColumn)));
                        canPut = true;
                    }
                }
            }
            else // place two bombs
            {
                bool canPut = false;
                while (!canPut)
                {
                    Random rdRow1     = new Random();
                    Random rdColumn1  = new Random();
                    Random rdRow2     = new Random();
                    Random rdColumn2  = new Random();
                    int    auxRow1    = rdRow1.Next(GameMap.NumberOfRows);
                    int    auxColumn1 = rdColumn1.Next(GameMap.NumberOfColumns);
                    int    auxRow2    = rdRow2.Next(GameMap.NumberOfRows);
                    int    auxColumn2 = rdColumn2.Next(GameMap.NumberOfColumns);
                    if ((auxRow1 != auxRow2 || auxColumn1 != auxColumn2) &&
                        GameMap.MapUnits[auxRow1, auxColumn1] == null && GameMap.MapUnits[auxRow2, auxColumn2] == null &&
                        (((auxRow1 - SnakeParts[0].UnitPosition.Row) < -2) || ((auxRow1 - SnakeParts[0].UnitPosition.Row) > 2) ||
                         ((auxColumn1 - SnakeParts[0].UnitPosition.Column) < -2) || ((auxColumn1 - SnakeParts[0].UnitPosition.Column) > 2)) &&
                        (((auxRow2 - SnakeParts[0].UnitPosition.Row) < -2) || ((auxRow2 - SnakeParts[0].UnitPosition.Row) > 2) ||
                         ((auxColumn2 - SnakeParts[0].UnitPosition.Column) < -2) || ((auxColumn2 - SnakeParts[0].UnitPosition.Column) > 2)))
                    {
                        GameMap.AddUnit(new Bomb(new Position(auxRow1, auxColumn1)));
                        Bombs.Add(new Bomb(new Position(auxRow1, auxColumn1)));
                        GameMap.AddUnit(new Bomb(new Position(auxRow2, auxColumn2)));
                        Bombs.Add(new Bomb(new Position(auxRow2, auxColumn2)));
                        canPut = true;
                    }
                }
            }
        }
Beispiel #6
0
    private void Run()
    {
        string[] inputs;
        inputs = Console.ReadLine().Split(' ');
        int width  = int.Parse(inputs[0]);
        int height = int.Parse(inputs[1]);

        MyID = int.Parse(inputs[2]);

        var   boxes   = new List <Coordinate>();
        Robot myRobot = new Robot();
        var   myBombs = new List <Bomb>();

        char[,] board = new char[HEIGHT, WIDTH];

        // game loop
        while (true)
        {
            boxes.Clear();
            myBombs.Clear();
            Bombs.Clear();

            Log("Board:");
            for (int i = 0; i < height; i++)
            {
                string row = Console.ReadLine();
                Log(row);
                for (int j = 0; j < width; j++)
                {
                    board[i, j] = row[j];
                    if (row[j].Equals(EMPTY_BOX) || row[j].Equals(RANGE_BOX) || row[j].Equals(BOMB_BOX))
                    {
                        boxes.Add(new Coordinate(j, i));
                    }
                }
            }

            Log("");
            int entities = int.Parse(Console.ReadLine());
            Log($"Entities: {entities}");
            Log("entityType owner x y param1 param2");
            for (int i = 0; i < entities; i++)
            {
                inputs = Console.ReadLine().Split(' ');
                int entityType = int.Parse(inputs[0]);                 // player: 0, bomb: 1
                int owner      = int.Parse(inputs[1]);
                int x          = int.Parse(inputs[2]);
                int y          = int.Parse(inputs[3]);
                int param1     = int.Parse(inputs[4]);              // num. of bombs, num. of rounds
                int param2     = int.Parse(inputs[5]);              // explosion range
                Log($"{entityType} {owner} {x} {y} {param1} {param2}");

                switch (entityType)
                {
                case 0:                         // player
                    if (owner == MyID)
                    {
                        // owner, x, y, num. of bombs, explosion range
                        myRobot.X = x;
                        myRobot.Y = y;
                        myRobot.AvailableBombs = param1;
                        myRobot.BombRange      = param2;
                    }
                    break;

                case 1:                         // bomb
                    var bomb = new Bomb(x, y, param1, param2);
                    if (owner == MyID)
                    {
                        // owner, x, y, num. of rounds to explode, explosion range
                        myBombs.Add(bomb);
                    }
                    Bombs.Add(bomb);
                    break;
                }
            }

            int[,] scoreBoard = GetScoreBoard(board, myRobot.BombRange);
            PrintScoreBoard(scoreBoard);

            Dictionary <int, List <Coordinate> > scoredDict = GetScoreDictionary(scoreBoard);

            int               closestDist = 0;
            Coordinate        closestBox  = null;
            List <Coordinate> places;
            for (int score = 4; score > 0; score--)
            {
                if (!scoredDict.TryGetValue(score, out places))
                {
                    continue;
                }

                foreach (Coordinate place in places)
                {
                    int tempDist = place.GetDistance(myRobot);
                    if (closestBox == null || closestDist > tempDist)
                    {
                        closestDist = tempDist;
                        closestBox  = place;
                    }
                }

                if (closestBox != null)
                {
                    break;
                }
            }

            Log($"Closest: {closestBox.X}, {closestBox.Y}");
            if (closestBox == null)
            {
                Console.WriteLine($"MOVE {myRobot.X} {myRobot.Y}");
            }
            else if (closestDist == 0 && myRobot.AvailableBombs > 0)
            {
                Console.WriteLine($"BOMB {closestBox.X} {closestBox.Y}");
            }
            else
            {
                Console.WriteLine($"MOVE {closestBox.X} {closestBox.Y}");
            }
        }
    }