예제 #1
0
        void ScoutEffect(int q, int r, CubeScout scout)
        {
            Vector2Int curr = new Vector2Int(scout.Q, scout.R);
            Vector2Int next = new Vector2Int(q, r);

            if (structureStore.HasStructure(next[0], next[1]))
            {
                boardState.AddNode(q, r, scout.GetPlayer(), scout.GetDamage());
            }
            else
            {
                boardState.AddNode(q, r, scout.GetPlayer(), scout.GetInfluence());
            }
            if (scoutPos.ContainsKey(next))
            {
                RemoveScout(scout, curr);
                RemoveScout(scoutPos[next], next);
            }
            else if (structureStore.HasStructure(next[0], next[1]) && structureStore.GetStructure(next[0], next[1]).GetPlayer() != scout.GetPlayer())
            {
                RemoveScout(scout, curr);
            }
            else
            {
                scoutPos.Remove(curr);
                scout.SetCoords(next[0], next[1]);
                scoutPos[next] = scout;
            }
            scout.DecMoves();
            if (scout.GetMoves() <= 0)
            {
                RemoveScout(scout, next);
            }
        }
예제 #2
0
        void Bombard(int q, int r, Pentagon pentagon)
        {
            Vector2Int           target  = new Vector2Int(q, r);
            HashSet <Vector2Int> visited = new HashSet <Vector2Int>();

            visited.Add(target);
            Queue <Vector3Int> queue = new Queue <Vector3Int>();

            queue.Enqueue(new Vector3Int(target[0], target[1], 0));
            while (queue.Count > 0)
            {
                Vector3Int curr = queue.Dequeue();
                boardState.AddNode(curr[0], curr[1], pentagon.Player, pentagon.GetBombStrength() / (1 + curr[2]));
                if (curr[2] < pentagon.GetBombRadius())
                {
                    List <Vector2Int> neighbors = boardState.GetNeighbors(curr[0], curr[1]);
                    foreach (var n in neighbors)
                    {
                        if (!visited.Contains(n))
                        {
                            visited.Add(n);
                            queue.Enqueue(new Vector3Int(n[0], n[1], curr[2] + 1));
                        }
                    }
                }
            }
        }