/// <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));
                }
            }
        }
コード例 #2
0
 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]));
        }
コード例 #4
0
 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]);
 }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
 /// <summary>常にred, 0の1マス</summary>
 public IEnumerable <PieceData> GetBonusPiece()
 {
     yield return(PieceData.Create(Constants.ColorNames[0], Constants.ShapeNames[0], new Vector2Int[] { Vector2Int.zero, }));
 }