Коробки с картинками, дающие их изображения картинкам под ними

1

Я делаю простую игру в winforms С#. То, что я пытаюсь сделать, - это разновидность игры, использующая черные и серые плитки. Цель - поразить черную плитку, но theres - улов, каждую секунду черная черепица меняет свое место.

Я сделал это так, как хочу, но теперь настало время настроить! В то время как я столкнулся с проблемой, я не могу понять. Это то, что я пытаюсь сделать:

http://prntscr.com/3llwoe

У меня есть сетка 3 * 4, сделанная из ящиков с картинками. первая строка генерируется случайным образом из 1 черной и 3-х серых плит. Это должно оставаться таким образом на секунду, тогда первая строка плиток должна переместиться во вторую строку, и первая строка должна быть случайно сгенерирована снова. Затем плитки на втором ринге нужно переместить в третью строку, плитки в первой строке - на вторую, а первая строка должна быть сгенерирована снова.

Я сделал эту работу, но не так, как хочу.

http://prntscr.com/3llyxy

Поскольку все мои коробки с картинками имеют одну и ту же комбинацию цветов. Может ли кто-нибудь помочь мне понять это? или подтолкнуть меня в правильном направлении? Я буду предоставлять свой код, если его запросят, поскольку я понятия не имею, что добавить в мой пост прямо сейчас.

Извините за ссылки, но я не смог загрузить изображения!

Это мой метод для плиток:

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;
        }
    }
Теги:
winforms
picturebox

1 ответ

1
Лучший ответ

Несколько вопросов. Ваша переменная 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;
    }
  }
}
  • 0
    Большое спасибо! теперь это работает так, как я хочу!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню