Пример #1
0
    private int[,] GetScoreBoard(char[,] board, int range)
    {
        var scoreBoard = new int[HEIGHT, WIDTH];

        for (int y = 0; y < HEIGHT; y++)
        {
            for (int x = 0; x < WIDTH; x++)
            {
                char cell = board[y, x];
                if (!cell.Equals(FLOOR_CELL))
                {
                    scoreBoard[y, x] = 0;
                    continue;
                }

                if (Bombs.Any(b => b.X == x && b.Y == y))
                {
                    scoreBoard[y, x] = 0;
                    continue;
                }

                scoreBoard[y, x] = GetHitCount(board, new Bomb(x, y, 8, range));
            }
        }

        return(scoreBoard);
    }
Пример #2
0
 public int GetMaxCountSteps()
 {
     return
         (Math.Max(
              Troops.Any() ? Troops.Max(x => x.Remaining) : 0,
              Bombs.Any() ? Bombs.Max(x => x.Remaining) + Constants.BOMB_EXPLODE_DURATION : 0
              ));
 }
Пример #3
0
        bool IsSafeToPutBomb(Position pos, int power)
        {
            logger.Debug("---------- IsSafeToPutBomb -----------");
            logger.Debug($"pos {pos.ToString()} power {power} ");

            // 置こうとしている場所が、既存の爆弾の誘爆圏内ならfalse
            var isInExplosion = Bombs.Any(bomb =>
            {
                var affects = PosAffectedIncludingCausingExplosion(bomb);
                return(affects.Contains(pos));
            });

            if (isInExplosion)
            {
                logger.Debug($"pos {pos.ToString()} is inExplosion ");
                logger.Debug($"false ");
                logger.Debug("---------- IsSafeToPutBomb -----------");
                return(false);
            }

            // 置いた場合5歩以内に誘爆圏内から逃れられるか?
            var b        = new Bomb(pos, power);
            var affected = PosAffectedIncludingCausingExplosion(b);

            var minEscapeStep = affected.Select(p =>
            {
                return(CellDict[p].Distance);
            }).Min();

            logger.Debug($"minEscapeStep {minEscapeStep} ");
            if (minEscapeStep > 5)
            {
                logger.Debug($"false ");
                logger.Debug("---------- IsSafeToPutBomb -----------");
                return(false);
            }

            logger.Debug($"true ");
            logger.Debug("---------- IsSafeToPutBomb -----------");
            return(true);
        }