/// <summary> /// 色と形はこちらで決定する /// 配置は 「大きさは指定のものだけをしてい」「候補の配置をランダムに回転したものを指定」 /// </summary> /// <returns></returns> public IEnumerable <PieceData> GetCandidates() { var enableColorList = m_colorList.Where(x => x.Value == true).ToArray(); var enablShapeList = m_shapeList.Where(x => x.Value == true).ToArray(); //色と形の決定 int enableColorIndex = UnityEngine.Random.Range(0, enableColorList.Length); var colorIndex = m_colorList.IndexOf(enableColorList[enableColorIndex]); int enableShapeIndex = UnityEngine.Random.Range(0, enablShapeList.Length); var shapeIndex = m_shapeList.IndexOf(enablShapeList[enableShapeIndex]); //候補の決定 for (int i = 0; i < m_sizeList.Count; i++) { if (!m_sizeList[i]) { continue; } foreach (var data in m_positions[i]) { var posShape = RotateRandom(data); yield return(PieceData.Create(Constants.ColorNames[colorIndex], Constants.ShapeNames[shapeIndex], posShape)); } } }
public IEnumerable <PieceData> GetCandidates() { yield return(PieceData.Create(Constants.ColorNames[0], Constants.ShapeNames[0], new Vector2Int[] { new Vector2Int(0, 0), new Vector2Int(1, 0), new Vector2Int(2, 0), })); }
PieceData CreateRandomPiece() { int colorIndex = UnityEngine.Random.Range(0, Constants.ColorNames.Count); int shapeIndex = UnityEngine.Random.Range(0, Constants.ShapeNames.Count); int positionDataIndex = UnityEngine.Random.Range(0, m_PositionDataList.Count); if (m_isOutLog) { OutLog(m_PositionDataList[positionDataIndex]); } return(PieceData.Create(Constants.ColorNames[colorIndex], Constants.ShapeNames[shapeIndex], m_PositionDataList[positionDataIndex])); }
private PieceData GetPieceData(Piece piece, Vector2Int[] positions) { if (m_pieceData.ContainsKey(piece)) { var data = m_pieceData[piece]; data.m_positions = positions; } else { var data = PieceData.Create(piece.m_pieceData, positions); m_pieceData.Add(piece, data); } return(m_pieceData[piece]); }
private void ApplyBonusSpace() { foreach (var space in m_spaces) { Services.Board.Remove(space.m_positions); Services.PieceConnection.Remove(space); } m_spaces.Clear(); foreach (var bonus in Services.BonusSpaceInfo.GetBonusPiece()) { if (bonus == null) { continue; } var origins = Services.BonusSpaceChecker.GetBonusSpaceOrigins(bonus.m_positions); if (origins == null) { continue; } foreach (var origin in origins) { var space = PieceData.Create(bonus, bonus.m_positions.Select(p => p + origin).ToArray()); m_spaces.Add(space); Services.PieceConnection.Add(space); } } Debug.Log($"Bonus: {m_spaces.Count}"); // 盤面の評価を行う. m_combinations.Clear(); Services.Combinations.ForEach(x => x.SetupBeforeEvaluate()); foreach (var piece in m_pieceData.Values) { CheckCombinations(piece, ref m_combinations); } foreach (var space in m_spaces) { CheckCombinations(space, ref m_combinations); } m_combinationCalculator.UpdateBoardScore(m_combinations); }
public IEnumerable <Piece> CreateInitialPieces() { if (m_colors.All(x => !x)) { yield break; } if (m_shapes.All(x => !x)) { yield break; } if (m_sizes.All(x => !x)) { yield break; } List <PieceData> pieces = new List <PieceData>(); for (int i = 0; i < m_count; i++) { var color = Constants.ColorNames[GetRandomIndex(m_colors)]; var shape = Constants.ShapeNames[GetRandomIndex(m_shapes)]; var positionGroups = m_positions[GetRandomIndex(m_sizes)]; var positions = RotateRandom(positionGroups[Random.Range(0, positionGroups.Length)]); pieces.Add(PieceData.Create(color, shape, positions)); } foreach (var data in pieces) { if (!GetOrigin(data, out Vector2Int origin)) { continue; } var piece = Services.PieceObjectFactory.Create(data); Services.PiecePosition.SetPiecePosition(piece, origin); yield return(piece); } }
/// <summary>常にred, 0の1マス</summary> public IEnumerable <PieceData> GetBonusPiece() { yield return(PieceData.Create(Constants.ColorNames[0], Constants.ShapeNames[0], new Vector2Int[] { Vector2Int.zero, })); }