Я делаю простую игру в winforms С#. То, что я пытаюсь сделать, - это разновидность игры, использующая черные и серые плитки. Цель - поразить черную плитку, но theres - улов, каждую секунду черная черепица меняет свое место.
Я сделал это так, как хочу, но теперь настало время настроить! В то время как я столкнулся с проблемой, я не могу понять. Это то, что я пытаюсь сделать:
У меня есть сетка 3 * 4, сделанная из ящиков с картинками. первая строка генерируется случайным образом из 1 черной и 3-х серых плит. Это должно оставаться таким образом на секунду, тогда первая строка плиток должна переместиться во вторую строку, и первая строка должна быть случайно сгенерирована снова. Затем плитки на втором ринге нужно переместить в третью строку, плитки в первой строке - на вторую, а первая строка должна быть сгенерирована снова.
Я сделал эту работу, но не так, как хочу.
Поскольку все мои коробки с картинками имеют одну и ту же комбинацию цветов. Может ли кто-нибудь помочь мне понять это? или подтолкнуть меня в правильном направлении? Я буду предоставлять свой код, если его запросят, поскольку я понятия не имею, что добавить в мой пост прямо сейчас.
Извините за ссылки, но я не смог загрузить изображения!
Это мой метод для плиток:
public void RandomPanel()
{
if (i == 1)
{
i++;
Random rnd = new Random();
int temp = rnd.Next(1, 5);
switch (temp)
{
case 1:
TilelLoc = 1;
PbRow3_1.BackgroundImage = _2048Tiles.Properties.Resources.BlackTile;
PbRow3_2.BackgroundImage = _2048Tiles.Properties.Resources.GrayTile;
PbRow3_3.BackgroundImage = _2048Tiles.Properties.Resources.GrayTile;
PbRow3_4.BackgroundImage = _2048Tiles.Properties.Resources.GrayTile;
break;
case 2:
TilelLoc = 2;
PbRow3_2.BackgroundImage = _2048Tiles.Properties.Resources.BlackTile;
PbRow3_1.BackgroundImage = _2048Tiles.Properties.Resources.GrayTile;
PbRow3_3.BackgroundImage = _2048Tiles.Properties.Resources.GrayTile;
PbRow3_4.BackgroundImage = _2048Tiles.Properties.Resources.GrayTile;
break;
case 3:
TilelLoc = 3;
PbRow3_3.BackgroundImage = _2048Tiles.Properties.Resources.BlackTile;
PbRow3_1.BackgroundImage = _2048Tiles.Properties.Resources.GrayTile;
PbRow3_2.BackgroundImage = _2048Tiles.Properties.Resources.GrayTile;
PbRow3_4.BackgroundImage = _2048Tiles.Properties.Resources.GrayTile;
break;
case 4:
TilelLoc = 4;
PbRow3_4.BackgroundImage = _2048Tiles.Properties.Resources.BlackTile;
PbRow3_1.BackgroundImage = _2048Tiles.Properties.Resources.GrayTile;
PbRow3_2.BackgroundImage = _2048Tiles.Properties.Resources.GrayTile;
PbRow3_3.BackgroundImage = _2048Tiles.Properties.Resources.GrayTile;
break;
default:
break;
}
}
else if (i == 2)
{
PbRow2_1.BackgroundImage = PbRow3_1.BackgroundImage;
PbRow2_2.BackgroundImage = PbRow3_2.BackgroundImage;
PbRow2_3.BackgroundImage = PbRow3_3.BackgroundImage;
PbRow2_4.BackgroundImage = PbRow3_4.BackgroundImage;
i++;
}
else if (i == 3)
{
i = 1;
PbRow1_1.BackgroundImage = PbRow2_1.BackgroundImage;
PbRow1_2.BackgroundImage = PbRow2_2.BackgroundImage;
PbRow1_3.BackgroundImage = PbRow2_3.BackgroundImage;
PbRow1_4.BackgroundImage = PbRow2_4.BackgroundImage;
}
}
Несколько вопросов. Ваша переменная i
не работает, потому что вы хотите рандомизировать плитки строки 1 каждый раз, когда вы вызываете этот метод, и после этого цвета должны прокручиваться от одного к другому. Это требует, чтобы вы сначала установили следующие строки в значения строки выше, прежде чем дать первой строке новую случайность:
private int counter = 0;
Random rnd = new Random();
public void RandomPanel() {
++counter;
if (counter > 2) {
PbRow1_1.BackgroundImage = PbRow2_1.BackgroundImage;
PbRow1_2.BackgroundImage = PbRow2_2.BackgroundImage;
PbRow1_3.BackgroundImage = PbRow2_3.BackgroundImage;
PbRow1_4.BackgroundImage = PbRow2_4.BackgroundImage;
}
if (counter > 1) {
PbRow2_1.BackgroundImage = PbRow3_1.BackgroundImage;
PbRow2_2.BackgroundImage = PbRow3_2.BackgroundImage;
PbRow2_3.BackgroundImage = PbRow3_3.BackgroundImage;
PbRow2_4.BackgroundImage = PbRow3_4.BackgroundImage;
}
int temp = rnd.Next(0, 4);
Control[] boxes = new Control[] { PbRow3_1, PbRow3_2, PbRow3_3, PbRow3_4 };
for (int i = 0; i < boxes.Length; ++i) {
if (i == temp) {
boxes[i].BackgroundImage = _2048Tiles.Properties.Resources.BlackTile;
} else {
boxes[i].BackgroundImage = _2048Tiles.Properties.Resources.GrayTile;
}
}
}