Как я могу изменить этот блок кода для обнаружения столбцов, состоящих из 3 или более синих кубов (Unity)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу изменить этот блок кода для обнаружения столбцов, состоящих из 3 или более синих кубов (Unity)

Сообщение Anonymous »

Итак, в настоящее время у меня есть этот блок кода, который определяет, есть ли в ряду кубов 3 или более красных куба, расположенных рядом друг с другом. Игровая зона, которую будут занимать кубики, будет иметь ширину 5 кубиков и высоту 10-15 кубиков. Причина в том, что я собираюсь запрограммировать кубики так, чтобы они падали с верхней части игровой площадки, как блоки тетриса. Вот почему я использую код, который отбрасывает луч от пустого игрового объекта, идущий слева направо, и другой пустой игровой объект, который отбрасывает луч, идущий справа налево, которые блокируются кубиками некрасного цвета. Код работает для горизонтальных проверок, поскольку нужно проверить только 5 кубов. Если я использую тот же метод для проверки столбцов, я обнаружил, что, поскольку столбцы будут иметь высоту примерно 10-15 кубов, существует вероятность того, что может быть 3 или более синих кубов, где лучи как с верхней, так и с нижней стороны блокируются не синими кубами. .

Код: Выделить всё

using UnityEngine;
using System.Collections.Generic;

public class ColorMatcher : MonoBehaviour
{
public ScoreManager scoreManager;
public LayerMask cubeLayer;
public string cubeColor;
public int detectedRedCubesLayer; // Layer for detected red cubes
public int detectedBlueCubesLayer;
public List detectedRedMatches = new List(); // List to store detected cubes
public List detectedBlueMatches = new List();
public List detectedMatches;
public Vector2 rayDirection;
public Vector2 rayOrigin;

public void Start()
{
rayOrigin.x = this.gameObject.transform.position.x;
rayOrigin.y = this.gameObject.transform.position.y;
}
private void Update()
{
CheckForMatches();

}

private void CheckForMatches()
{

if (cubeColor == "Red")
{
CheckHorizontalMatches(cubeColor);
DisableCubeMatches(cubeColor);
}

if(cubeColor == "Blue")
{
CheckVerticalMatches(cubeColor);
DisableCubeMatches(cubeColor);
}

}

private void CheckHorizontalMatches(string color)
{
Debug.DrawRay(transform.position, rayDirection, Color.red);
detectedMatches = CheckMatches(rayOrigin,color,rayDirection);

}

private void CheckVerticalMatches(string color)
{
Debug.DrawRay(transform.position, rayDirection, Color.blue);
}

private void DisableCubeMatches(string cubecolor)
{
if (cubecolor == "Red")
{
// Implement logic for disabling consecutive red cubes

}
else if (cubecolor == "Blue")
{
// Implement logic for disabling consecutive blue cubes
}
}

private List CheckMatches(Vector2 rayOrigin, string color,Vector2 rayDirection)
{

// shoots a ray through all objects - results are ordered by distance from origin
var hits = Physics2D.RaycastAll(rayOrigin, rayDirection, Mathf.Infinity, cubeLayer);

var matches = new List(4); // There are maximum 4 matches in a column of 15 items
var currentMatch = new List(15); // maximum match size would be 15 if an entire column is blue e.g.

for (var i = 0; i < hits.Length; i++)
{
// Have we hit something we are looking for?
if (hits[i].transform.CompareTag(color))
{
// simply track it in the current match list
currentMatch.Add(hits[i].transform.gameObject);
}
else // we did hit something we are NOT looking for
{
// Does the currentMatch already contain enough items?
if (currentMatch.Count >= 3)
{
// if so we add a new match to the results and start a potential new one
matches.Add(currentMatch);
currentMatch = new List(15);
}
else
{
// otherwise for a bit of memory saving we reuse the existing match
// but erase it to also start a new one as it didn't reach the required amount of items
currentMatch.Clear();
}
}
}

return matches;
}
}

Примечание: красные блоки могут «совпадать» только по горизонтали, а синие блоки — только по вертикали.
Пока меня устраивает горизонталь. бит кода, в котором он определяет, есть ли 3 или более кубиков красного цвета, поскольку в ряду может быть не более 5 красных кубиков. Настоящая проблема — обнаружить 3 или более синих кубика, сложенных друг на друга.

Подробнее здесь: https://stackoverflow.com/questions/784 ... or-more-bl
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»