naumnek
@naumnek
Unity Developer

Как использовать множество переменных в одном коде?

Дело вот в чём, сижу я такой пишу тетрис, и работает всё просто, по очереди вызываются кубики)
Но вот таких кубиков 10 (должна получиться определённая структура) и у каждой код один и тот же
if (D4.gameObject.name == "D-4 l")
            {
                if (xD4 < xD4s - 1 || xD4 > xD4s + 1)
                {
                    Console.text = "D4";
                    GameOver();
                }

                if (xD4 > xD4s - 1 && xD4 < xD4s + 1 || xD4 == xD4s)
                {
                    StartD5();
                }
            }

И таких кубиков ещё штук 6, и для каждой тратить по 20 строк, ну это слишком! И у меня вопрос к гениям,
1: Как заменять переменную D4 на D5, D5 на D6 и т.д (это звучит как бред, но надо:D)
2: Или, то что звучит логичнее, подставлять значения этих переменных, а потом присваивать им же, в C# (Делается для Unity3D), в представленном выше коде (можете и свои примеры, я просто кусок из проекта взял)
И не надо мне заливать, про то как я вообще это писал:)
Я учусь, будто вы были гениями)
  • Вопрос задан
  • 329 просмотров
Решения вопроса 2
yudinikita
@yudinikita
Инженер-программист из России
Я бы сделал так.
1. Создал бы класс, в котором описал общую игровую фигуру. Ее координаты и перемещение. Координаты хранил бы в виде X0, Y0; X1, Y1; X2, Y2; X3, Y3; и в конструктор передавал бы тип фигуры, а с помощью switch строил фигуру.
2. Вызыв фигуру сделал бы с помощью генерации случайного числа и потом сравнивал бы через enum.enum Figure { green, red, yellow... }
Но я немного не понял, что вы имеете в виду под кубиком. То есть один квадратик с помощью которого строится тетромино? Если да, то это явно можно упростить до написание одного класса, в котором генерировать фигуру. Также, если вы делаете обычный тетрис, с 7 фигурами, то вместо случайного числа используйте сумку с фигурами, рекомандциии по ней написаны в Википедии по тетрису.
3. Что вы используете для хранения фигур на игровом поле? Я бы сделал отдельный класс, в котором использовал обычный двумерный массив для хранения всех фигур на поле, с методами для удаления заполненных линий.
Ответ написан
tsarevfs
@tsarevfs
C++ developer
В вашем случае напрашивается использование массива обьектов.

Обьект позвоит сгруппировать переменные относящиеся к описанию одного кубика.
StartD1, StartD2, ..., StartD5 превратятся в один метод Start.
class Box
{
    public int x; 
    public int xs;
    public void Start()
    {
    	//ваш код

    }
    public bool isOver() //наверно можно придумать имя лучше
    {
    	return x < xs - 1 || x > xs + 1;
    }
}
...
//создаем массив кубиков
int size = 10;
Box[] boxes = new Boxes[size];
//запозняем его
for (int i = 0; i < size; ++i)
{
	boxes[i] = new Box();
}
//используем
for (int i = 0; i < size; ++i)
{
	if (boxes[i].isOver()) 
	{
	    GameOver();
	}
	else
	{
	    boxes[i].Start();
	}
}


Чтобы адаптировать это к вашему случаю надо научиться по имени обьекта "D-4 l" получать его номер i=4.
Это можно реализовать с помощью www.quizful.net/interview/csharp/parse-tryparse-di... предварительно вырезав нужный кусок строки с помощью substring.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы