Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 61

Шахматное поле

12.09.2009, 21:14. Показов 3481. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Надо сделать, что то на подобия шахомтного поля.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
.......
 private void pictureBox1_Click(object sender, EventArgs e)
        {
            Graphics g = pictureBox1.CreateGraphics();
            Pen MyPenB = new Pen(Color.Green, 0);
            Pen MyPenW = new Pen(Color.White, 0);
            Brush MyBrushB = Brushes.Black;
            Brush MyBrushW = Brushes.White;
 
 
           ????????????????????
g.DrawRectangle(MyPenB, 1, 1, 50, 50);//(float x, float y, float widh, float height)
            g.FillRectangle(MyBrushB, 1, 1, 50, 50);
 
            g.DrawRectangle(MyPenW, 1, 50, 50, 50);
            g.FillRectangle(MyBrushW, 1, 50, 50, 50);
 
            g.DrawRectangle(MyPenB, 1, 100, 50, 50);
            g.FillRectangle(MyBrushB, 1, 100, 50, 50);
 
            g.DrawRectangle(MyPenW, 50, 1, 50, 50);
            g.FillRectangle(MyBrushW, 50, 1, 50, 50);
 
            g.DrawRectangle(MyPenB, 100, 1, 50, 50);
            g.FillRectangle(MyBrushB, 100, 1, 50, 50);
 
            g.DrawRectangle(MyPenW, 150, 1, 50, 50);
            g.FillRectangle(MyBrushW, 150, 1, 50, 50);
 
 
            g.DrawRectangle(MyPenB, 50, 50, 50, 50);
            g.FillRectangle(MyBrushB, 50, 50, 50, 50);
 
            g.DrawRectangle(MyPenW, 100, 50, 50, 50);
            g.FillRectangle(MyBrushW, 100, 50, 50, 50);
 
            g.DrawRectangle(MyPenB, 150, 50, 50, 50);
            g.FillRectangle(MyBrushB, 150, 50, 50, 50);
 
            g.DrawRectangle(MyPenW, 50, 100, 50, 50);
            g.FillRectangle(MyBrushW, 50, 100, 50, 50);
 
            g.DrawRectangle(MyPenB, 100, 100, 50, 50);
            g.FillRectangle(MyBrushB, 100, 100, 50, 50);
 
            g.DrawRectangle(MyPenW, 150, 100, 50, 50);
            g.FillRectangle(MyBrushW, 150, 100, 50, 50);
            ???????Как это заменить for циклом??????
 
        }
Должно получиться, что то вроди этого:
[IMG]http://i011.***********/0909/d2/f59d15d1c868.jpg[/IMG]
При каждом движении мышки, чёрный квадратик должен становиться белым, а белый чёрным. - как это сделать не знаю ....
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.09.2009, 21:14
Ответы с готовыми решениями:

Шахматное поле в PictureBox
Здравствуйте! Подскажите пожалуйста решение проблемы... Мне необходимо нарисовать программно шахматную доску. Размер каждого поля...

Как запихнуть шахматное поле состоящее из картинок в двумерный массив
Как запихнуть шахматное поле состоящее из картинок в двумерный массив. Картинка генерируется с помощью: dim l as integer for l=1 to 64 ...

Статическое поле абстрактного класса в как наследуемое поле и преведение его типа
public abstract class BaseManager : BaseClass { public static BaseManager Instance { get; private set; } public...

16
 Аватар для Sergei
1513 / 780 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
12.09.2009, 21:48
Перехватывайте сообщения мыши MouseHover и в обработчике проверяете координаты и делаете что вам надо.
1
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
12.09.2009, 22:31
По поводу замены цикла:

C#
1
2
3
4
5
6
For(i=0; i<=3; i++)
For(j=0; j<=2; j++)
{
g.DrawRectangle(MyPenW, i*50, j*50, 50, 50);
g.FillRectangle(MyBrushW, i*50, j*50, 50, 50);
}
Как-то так
1
0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 61
12.09.2009, 23:54  [ТС]
Цитата Сообщение от SergBokh Посмотреть сообщение
По поводу замены цикла:

C#
1
2
3
4
5
6
For(i=0; i<=3; i++)
For(j=0; j<=2; j++)
{
g.DrawRectangle(MyPenW, i*50, j*50, 50, 50);
g.FillRectangle(MyBrushW, i*50, j*50, 50, 50);
}
Как-то так
Получается большой белый квадрат

Добавлено через 12 минут
Цитата Сообщение от Sergei Посмотреть сообщение
Перехватывайте сообщения мыши MouseHover и в обработчике проверяете координаты и делаете что вам надо.
Ну как перехватить я знаю:

C#
1
2
3
4
        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
// ЧТО ТУТ ПИСАТЬ НЕ ЗНАЮ!
        }
Добавлено через 14 минут
Вот .....

C#
1
2
3
4
5
6
7
8
int j;
            int i;
            for (i = 0; i <= 3; i++)
                for (j = 0; j <= 2; j++)
               
                {
                    g.DrawRectangle(MyPenGranica, i * 50, j*50, 50, 50);
                }
Этот код делает это:



Добавлено через 3 минуты
Теперь, что бы из этого поля сделать ШАХМАТНОЕ поле надо написать, что то типа этого:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 int j;
            int i;
            for (i = 0; i <= 3; i++)
                for (j = 0; j <= 2; j++)
               
                {
                    
                    g.DrawRectangle(MyPenGranica, i * 50, j*50, 50, 50);
                    
                    if ((i+j)%2 = 1)//если делится с остатком, то квадрат белый
                    {
                        g.FillRectangle(MyBrushW, i * 50,50, 50, 50);
                    }
                   
                    else//если без остатка чёрный
                    {
                        g.FillRectangle(MyBrushB, i * 50,50, 50, 50);
                    }
                }
только к сожалению if цикл не работает и я не знаю как его исправить ;(
Ошибка, где то тут - if ((i+j)%2 = 1)
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
13.09.2009, 00:00
Вот правильный вариант
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for(int i=0; i<=3; i++)
            {
                for(int j=0; j<=2; j++)
                {
                    if ((i + j) % 2 == 1)
                    {
                        g.FillRectangle(MyBrushW, i * 50, j * 50, 50, 50);
                    }
                    else
                    {
                        g.DrawRectangle(MyPenB, i * 50, j * 50, 50, 50);
                        g.FillRectangle(MyBrushB, i * 50, j * 50, 50, 50);
                    }
                }
                
            }
2
0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 61
13.09.2009, 00:27  [ТС]
СПАСИБО!!!

Ещё помогите с событием MouseMove

C#
1
2
3
4
    private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
// ЧТО ТУТ ПИСАТЬ НЕ ЗНАЮ!
        }
Надо, что бы при движении мышки чёрные квадратики становились белыми, а белые чёрными.
0
85 / 77 / 13
Регистрация: 03.09.2009
Сообщений: 346
13.09.2009, 01:44
Цитата Сообщение от [JB] Посмотреть сообщение
Получается большой белый квадрат
тупанул, все-таки нужно было мне сначала проверить как работает. kirill29 доработал.

Добавлено через 31 минуту
По поводу мыши:

ты используеш обработчик события - pictureBox1_MouseMove(object sender, MouseEventArgs e)

Здесь нужно брать параметр е. В нем есть координаты положения мышки:

C#
1
2
e.X
e.Y
Зная размер твоего квадрата (50х50) вычисляеш в каком квадрате находится мышка.
Алгоритм примерно такой:

C#
1
2
kX=(int)(е.Х / 50) // узнаеш в каком столбце мыша
kY=(int)(е.Y / 50)  // узнаеш в какой строке мыша
Рисовать придется так:

C#
1
g.DrawRectangle(MyPenW, kX*50, kY*50,50,50);
Нужно еще будет определять какой цвет у квадрата в данное время, чтобы знать на что менять. И следить чтобы после замены цвета не менять его снова по движению мыши, до тех пор пока мыша не перейдет в другой квадрат (изменится kX либо kY). Иначе будет мерцать.

Извини больше ничего конкретного в голову не лезет - поздно
1
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
13.09.2009, 20:55
У меня получилось вот так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            Graphics g = pictureBox1.CreateGraphics();
            Brush MyBrushB = Brushes.Black;
            Brush MyBrushW = Brushes.White;
            int x = e.X / 50;
            int y = e.Y / 50;
            if ((x + y) % 2 == 0)
            {
                g.FillRectangle(MyBrushW, x * 50, y * 50, 50, 50);
            }
            else 
            {
                g.FillRectangle(MyBrushB, x * 50, y * 50, 50, 50);
            }
        }
1
0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 61
13.09.2009, 23:26  [ТС]
А если усложнить немного задания и сделать так.

Вот ехешник, примено того, что должно получиться:
http://----------/_fr/36/Papilduzd2.exe

1 Жмём кнопку Raset, появляется шахмотное поле.
Это делаем так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 Graphics g = pictureBox1.CreateGraphics();
            for (int i = 0; i <= 8; i++)
            {
                for (int j = 0; j <= 8; j++)
                {
                    if ((i + j) % 2 == 1)
                    {
                        g.FillRectangle(MyBrushB, i * 25, j * 25, 25, 25);
                    }
                    else
                    {
                        g.FillRectangle(MyBrushW, i * 25, j * 25, 25, 25);
                    }
                }
            }
2 При нажатии кнопки Sakt Kustibu клеточки должны двигаться, как это сделать не знаю.
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
13.09.2009, 23:53
Выложи файлик сюда в архиве (не получается скачать по ссылке).
0
0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 61
13.09.2009, 23:59  [ТС]
Попробуй скачать тут!

Как файл загрузить на этот форум не знаю.
0
14.09.2009, 00:07

Не по теме:

Цитата Сообщение от [JB
;266779]Как файл загрузить на этот форум не знаю.
Когда пишешь ответ, нажми на кнопки, отмеченные на картинке. Откроется расширенный режим написания ответа. Там ниже окна для написания сообщения будет кнопка "Управление вложениями."

0
0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 61
14.09.2009, 00:10  [ТС]
Вот, что то типа этого надо.
Вложения
Тип файла: rar Papilduzd2.rar (4.3 Кб, 27 просмотров)
0
0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 61
14.09.2009, 18:06  [ТС]
Ну кто нибудь знает, как заставить клеточки двигаться?
0
0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 61
25.09.2009, 20:04  [ТС]
Есть поле 8 на 8.

[IMG]http://i003.***********/0909/3b/e1c66e77d73d.jpg[/IMG]

Есть событие: pictureBox1_Click

Надо сделать так, что бы при первом клике по клеточке квадратик красился в чёрный цвет.
Если квадрат уже черный, то он перекрашивается в белый, а если квадрат белый, то он красится в чёрный.

Вот начал делать, но не знаю как проверить какого цвета квадрат в данный момент!?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
           
        private void pictureBox1_Click(object sender, EventArgs e)
        {
            Graphics g = pictureBox1.CreateGraphics();
 
            for (int kol = 0; kol < 8; kol++)
            {
                for (int rin = 0; rin < 8; rin++)
                {
                    g.FillRectangle(MyBrushB, vx * 50, vy * 50, 50, 50);
                    mas1[kol, rin] = 1;
                    label1.Text = Convert.ToString(mas1[kol, rin]);
                }
            }
        }
0
 Аватар для kirill29
2098 / 1263 / 173
Регистрация: 01.02.2009
Сообщений: 2,842
25.09.2009, 22:07
[JB], смотри пост #8
0
0 / 0 / 0
Регистрация: 12.09.2009
Сообщений: 61
25.09.2009, 22:19  [ТС]
kirill29, ты меня не много не понял. Это я уже придумал новую задачу. Сделать не шахмотное поле а просто поле.

Счас выложу ехе файл, примерно того, что должно было получиться (посмотри его), только там я сделал это с помощью двух событий: МоусеКлик и МоусеДублКлик.

А надо весь код записать в событии моусе клик и там сделать проверку, какого цвета квадрат ...
Вложения
Тип файла: rar dop_uzd_2.rar (4.5 Кб, 19 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.09.2009, 22:19
Помогаю со студенческими работами здесь

Как запретить пустое поле или кириллицу в поле?
Вечер добрый. Помогите разобраться. Как в поле запретить кириллицу или пустое поле. Пустое поле не проблема. А вот и то и другое не...

Если в текстовое поле введены целые числа – поле подсвечивается зелёным, в остальных случаях красным
Написать программу, которая будет контролировать вводимые в текстовое поле значения. Если в текстовое поле введены целые числа – поле...

шахматное поле
На экране нарисовать с помощью символа ‘-’ шахматное поле. При этом использовать функцию, в которой осуществляется вывод символа ‘-’

Шахматное поле
Всем привет. Пишу программу которая создает шахматное поле, но не могу найти где ошибка, помогите, пожалуйста. clc clear all close...

Работа с графикой: шахматное поле
Нарисуйте шахматное поле. Заранее спасибо!!!)))


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru