Почему я не могу умножить 16 на 2?C#

Место общения программистов C#
Ответить
Anonymous
 Почему я не могу умножить 16 на 2?

Сообщение Anonymous »


Я пытаюсь запрограммировать игру 2048 на C# с использованием WinForms и только что закончил настройку кода для объединения чисел. 2 может слиться в 4, 4 может слиться с 8, 8 может слиться с 16, а 32 может слиться с 64. Но 16 не может слиться с 32??? Все файлы идентичны, за исключением изображения и имени. Все файлы в своей папке.

Этот код проверяет, пытаются ли два одинаковых числа занять одно и то же пространство, и должен объединить их в одну ячейку, что работает для всего, кроме 16 в 32. Он просто получает тег изображения и умножает его на 2. и устанавливает его в качестве нового тега и пути к файлу.

else if ((imageList[a, b].Tag == imageList[a + aChange, b + bChange].Tag) && imageList[a, b].Tag.ToString() != "0 ") { imageList[a + aChange, b + bChange].Tag = (int.Parse(imageList[a, b].Tag.ToString() ?? string. Empty) * 2).To String(); imageList[a + aChange, b + bChange].Image = Image.FromFile(imageList[a + aChange, b + bChange].Tag.ToString() + ".jpg"); imageList[a, b].Image = null; imageList[a, b].Tag = "0"; двигаться = правда; } Чтобы просмотреть тег, который содержит значение числа в виде строки, я использовал:

MessageBox.Show(imageList[a + aChange, b + bChange].Tag.ToString()); При объединении двух чисел он показывает тег нового числа, включая 16, а добавив вручную 32, я вижу, что у них правильный тег 64. Я продублировал каждый файл, чтобы убедиться, что проблема не в нем, но он все равно не работает.

Я также пробовал объединить 16 по отдельности.

else if (imageList[a, b].Tag.ToString() == "16") { imageList[a + aChange, b + bChange].Tag = "32"; imageList[a + aChange, b + bChange].Image = Image.FromFile("32.jpg"); imageList[a, b].Image = null; imageList[a, b].Tag = "0"; двигаться = правда; } По какой-то причине это работает, а исходный вариант умножения — нет.

Вот полный код нажатия клавиши для всех желающих:

private void Form1_KeyPress(отправитель объекта, KeyPressEventArgs e) { ИНТ aChange = 0; интервал bChange = 0; bool действительный = ложь; if (e.KeyChar.ToString().ToLower() == "a") { аИзменение = -1; действительный = правда; } иначе, если (e.KeyChar.ToString().ToLower() == "d") { аИзменение = 1; действительный = правда; } иначе, если (e.KeyChar.ToString().ToLower() == "w") { бИзменить = -1; действительный = правда; } иначе, если (e.KeyChar.ToString().ToLower() == "s") { бИзменить = 1; действительный = правда; } если (действительно == верно) { Bool Move = Истина; пока (двигаться) { двигаться = ложь; for (int a = 0; a < 4; a++) { для (int b = 0; b -1 && a + aChange < 4 && b + bChange > -1 && b + bChange < 4) { if (imageList[a, b].Tag.ToString() != "0" && imageList[a + aChange, b + bChange].Tag.ToString() == "0") { imageList[a + aChange, b + bChange].Tag = imageList[a, b].Tag; imageList[a + aChange, b + bChange].Image = Image.FromFile((imageList[a + aChange, b + bChange].Tag.ToString() ?? string.Empty) + ".jpg"); imageList[a, b].Image = null; imageList[a, b].Tag = "0"; двигаться = правда; } else if ((imageList[a, b].Tag == imageList[a + aChange, b + bChange].Tag) && imageList[a, b].Tag.ToString() != "0") { imageList[a + aChange, b + bChange].Tag = (int.Parse(imageList[a, b].Tag.ToString() ?? string.Empty) * 2).ToString(); imageList[a + aChange, b + bChange].Image = Image.FromFile(imageList[a + aChange, b + bChange].Tag.ToString() + ".jpg"); imageList[a, b].Image = null; imageList[a, b].Tag = "0"; двигаться = правда; } } } } } Bool Cont = Ложь; for (int a = 0; a < 4; a++) { для (int b = 0; b this.Height) { tableLayoutPanel1.Size = новый размер (this.ClientSize.Height, this.ClientSize.Height); tableLayoutPanel1.Location = новая точка((this.ClientSize.Width/2) - (this.ClientSize.Height/2), 0); } еще { tableLayoutPanel1.Size = новый размер (this.ClientSize.Width, this.ClientSize.Width); tableLayoutPanel1.Location = new Point(0, (this.ClientSize.Height/2) - (this.ClientSize.Width/2)); } for (int a = 0; a < 4; a++) { для (int b = 0; b
Ответить

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

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

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

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

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