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); }
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 )); }
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); }