Змінюй хід війни! Допомагай ЗСУ!

вопрос по C#

  • Автор теми Автор теми ligorl
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 20.03.2010
Повідом.: 145
вопрос по C#

вообщем так
как в массив загнать нарисованный квадрат или другое художество потом его сравнить и нарисовать сново.
Может поймете так пытаюсь написать игу 15-ка. планирую добавить 5 кнопок вправо влево вниз вверх и поменять местами и панель где будет все отображаться.
+как текст расположить в нужном месте или дайте ссылку где прочитать.
Ввобщем не поленитесь подскажите.
 
Останнє редагування:
сами-то поняли что написали? Сохранить квадрат...

Уясните в первую очередь для себя, где у вас уровень презентации, где уровень логики, в каком виде существует ваш "квадрат"
 
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics gr = e.Graphics;
Pen p = new Pen(Color.FromName(comboBox1.Text), 5);// цвет линии и ширина

int[,] A;
A = new int[4, 4];
for (int j = 0; j < 4; j++)
{
for (int i = 0; i < 4; i++)
{
A[i, j] = gr.DrawRectangle(p, 1, 1, 51, 51);

}
}

так оно не работает а как сделать чтоб ...
 
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics gr = e.Graphics;
Pen p = new Pen(Color.FromName(comboBox1.Text), 5);// цвет линии и ширина

int[,] A;
A = new int[4, 4];
for (int j = 0; j < 4; j++)
{
for (int i = 0; i < 4; i++)
{
A[i, j] = gr.DrawRectangle(p, 1, 1, 51, 51);

}
}

так оно не работает а как сделать чтоб ...

:D Аффтар жги еще.
 
я хочу чтоб в одной ячейки массива хранился нарисованный прямоугольник
судя по тому как тут новечку тут подсказывают я так понял так вообще сделать нельзя
 
зачем тебе прямоугольник?
зачем кнопка "поменять местами"?

пятнашка делается проще

у гугла спросил - получил
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
 
1. сделай массив int[4,4] отдельно от Paint'а. напиши внутрь массива циферки от 0 до 15 (0 - не занятый)
2. рисуя при событии Paint то, что у тебя находится в массиве, не забывай делать отступы от каждого квадрата. типа:
gr.DrawRectangle(p, x+1, y+1, 51, 51);

и т.д.
 
private void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics gr = e.Graphics;
Pen p = new Pen(Color.FromName(comboBox1.Text), 5);// цвет линии и ширина

int[,] A;
A = new int[4, 4];
for (int j = 0; j < 4; j++)
{
for (int i = 0; i < 4; i++)
{
A[i, j] = gr.DrawRectangle(p, 1, 1, 51, 51);

}
}

так оно не работает а как сделать чтоб ...

мдя...

вообще все это отдельно делается
должен быть уровень логики (в котором хранится и обрабатывается массив A) и уровень представления (ну хоть бы panel1_Paint)

и чё это за таинственные пассажи gr.DrawRectangle(p, 1, 1, 51, 51) в цикле. ты же 16 раз в одном и том же месте рисуешь один и тот же прямоугольник :D

Ты лучше в массиве А содержи число, которое у тебя в текущий момент в ячейке находится. в паинте отдельно рисуй сетку, например так (студии нету, так что сам догадаешься)

for (int i = 0; i < 4; i++)
{
gr.DrawLine(50+50*i, 50, 50+50*i, 250);
gr.DrawLine(50, 50+50*i, 250, 50+50*i);
}
или ректанглами в два цикла. в общем полет фантазии

а в неё рисуй число из массива

for (int j = 0; j < 4; j++)
{
for (int i = 0; i < 4; i++)
{
gr.DrawString(... A[j, i] ...);
}
}

да отдельно функцию напиши, которая бы определяла элемент массива например в зависимости от положения мыши. ты же будешь как-то перемещать элементы? вот тебе и будут какой-то уровень логики и управление. т.е. по маус-доун - захват элемента, по маус-ап - анализ, перестройка массива А и Invalidate()
 
Назад
Зверху Знизу