Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/76: Рейтинг темы: голосов - 76, средняя оценка - 4.83
 Аватар для irineyxxx
151 / 53 / 11
Регистрация: 18.09.2011
Сообщений: 730

Как с помощью PictureBox и цикла for (i,j) сделать шахматную доску

23.02.2012, 16:01. Показов 14304. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как с помощью PictureBox и цикла for (i,j) сделать доску черно-белую ? 8x8

Добавлено через 12 секунд
Забыл...

Добавлено через 16 секунд
C#
1
PictureBox[,] board = new PictureBox[8, 8];
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2012, 16:01
Ответы с готовыми решениями:

Условное форматирование: надо сделать шахматную доску
Добрый день! Помогите пожалуйста разобраться с условным форматированием. В форме Form1 надо сделать шахматную доску с помощью...

Как нарисовать шахматную доску
Как нарисовать шахматную доску. Я нарисовал одну строчку, а как дальше с помощью циклов? uses graph; var x, y, device, mode:integer; ...

Как закрасить шахматную доску
Нарисовал шахматную доску,а как закрасить не знаю. Начал учиться,программированию,всего пару дней назад.Знаю что нужно пользоваться...

22
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
23.02.2012, 17:39
ошибка уже в этом выражении
Цитата Сообщение от irineyxxx Посмотреть сообщение
Как с помощью PictureBox
PictureBox - это контейнер для отображения Image. Поэтому нужно клетки рисовать в Image, и уже его "подсовывать" PictureBox'у. Ну а поможет в этом класс Graphics.
1
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
23.02.2012, 18:26
Да вот так
C#
1
pictureBox1.LoadAsync("http://www.tikiwiki.ru/img/design/img165.jpg");
Добавлено через 18 минут
А если серьезно то так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void pictureBox1_Paint_1(object sender, PaintEventArgs e)
        {
            pictureBox1.Size= new Size(65,65);
            int k = 1;
            for (int i = 0;i<64 ; i+=8,k=-k)
            {
                for (int h = 0; h < 64; h+=8)
                {
                    k = -k;
                    if(k>0)
                    e.Graphics.FillRectangle(Brushes.Aqua, h, i, 8, 8);
                    e.Graphics.DrawRectangle(Pens.Black, h, i, 8, 8);
                }
            } 
        }
1
Заблокирован
23.02.2012, 18:50
Лучший ответ Сообщение было отмечено как решение

Решение

мой вариант
C#
1
2
3
4
5
6
7
8
9
10
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            int side = 20;
            for (int i = 0; i < 8; i++)
                for (int j = 0; j < 8; j++)
                {
                    Brush col = (i + j) % 2 != 0 ? Brushes.Black : Brushes.White;
                    e.Graphics.FillRectangle(col, i * side, j * side, side, side);
                }
        }
Добавлено через 13 минут
C#
1
2
3
4
5
6
7
        private void pictureBox1_Paint(object sender, PaintEventArgs e)
        {
            int side = 20;
            for (int i = 0; i < 64; i++)
                e.Graphics.FillRectangle((i / 8 + i % 8) % 2 != 0 ? Brushes.Black : Brushes.White,
                    (i / 8) * side, (i % 8) * side, side, side);
        }
1
 Аватар для irineyxxx
151 / 53 / 11
Регистрация: 18.09.2011
Сообщений: 730
23.02.2012, 20:03  [ТС]
Vitall,
C#
1
pictureBox1.LoadAsync("http://www.tikiwiki.ru/img/design/img165.jpg")
что за подстава

Добавлено через 9 минут
Dzhej-Dzhej, Используя this.Graphics() - ваш код не рисует!
Vitall, твой тоже в this.Graphics(); - планы шашки

Добавлено через 1 минуту
Лучше просто сделать массив 8 на 8 из picturebox, взять, тупо расставить и все я думаю, чтоб легче было потом ) картинку менять и т.п. при перемещении фигуры шашки
0
 Аватар для DimanRu
721 / 712 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
23.02.2012, 20:47
Не проще сделать картинкой доску и отдельными Bitmap'ами или UserControl'ами фигуры?
0
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
23.02.2012, 21:23
Цитата Сообщение от irineyxxx Посмотреть сообщение
Dzhej-Dzhej, Используя this.Graphics() - ваш код не рисует!
Vitall, твой тоже в this.Graphics(); - планы шашки
This - это тебе не карандаш что бы рисовать
0
Злой няш
 Аватар для I2um1
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
23.02.2012, 21:34

Не по теме:

Цитата Сообщение от irineyxxx Посмотреть сообщение
Лучше просто сделать массив 8 на 8 из picturebox, взять, тупо расставить и все я думаю, чтоб легче было потом ) картинку менять и т.п. при перемещении фигуры шашки
Так рождается настоящий говнокод.



Цитата Сообщение от irineyxxx Посмотреть сообщение
this.Graphics()
Там не он нужен, а Graphics изображения с PictureBox, который получается с аргумента обработчика события.
0
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
23.02.2012, 22:32
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  private void pictureBox1_MouseClick_1(object sender, MouseEventArgs e)
        {
             Graphics g = pictureBox1.CreateGraphics(); 
             int k = 1;
             for (int j = 0;j<64 ; j+=8, k = -k)
            {
                for (int f = 0; f<64; f += 8)
                {
                  k = -k;
                  g.FillRectangle(k>0?Brushes.Black:Brushes.White  , f, j, 8, 8);  
                }  
            }
            g.FillRectangle(Brushes.Red, e.X - e.X % 8, e.Y - e.Y % 8, 8, 8);
           
        }
Добавлено через 19 минут
так покрасивше
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 private void pictureBox1_MouseClick_1(object sender, MouseEventArgs e)
        {
             Graphics g = pictureBox1.CreateGraphics(); 
             int k = 1;
             for (int j = 0;j<64 ; j+=8, k = -k)
            {
                for (int f = 0; f<64; f += 8)
                {
                  k = -k;
                  g.FillRectangle(k>0?Brushes.Black:Brushes.White  , f, j, 8, 8);  
                }  
            }
            g.FillEllipse(Brushes.Red, e.X - e.X % 8, e.Y - e.Y % 8, 7, 7);
            g.DrawEllipse(Pens.Red, e.X - e.X % 8, e.Y - e.Y % 8, 7, 7);
        }
0
24.02.2012, 01:00

Не по теме:

Цитата Сообщение от Vitall Посмотреть сообщение
так покрасивше
это говнокод, рисовать нужнно только внутри события прорисовки

0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
24.02.2012, 01:09
Цитата Сообщение от Jupiter Посмотреть сообщение
рисовать нужнно только внутри события прорисовки
не согласен.
Событие прорисовки вызывается за время работы программы 100500 раз, а доску достаточно создать всего один раз. Рисовать по клику мышки, тоже конечно не айс. Единственный правильный вариант, на мой взгляд, предложил Vitall в посте 3. Картика присваивается в самом начале работы программы и не изменяется на протяжении всей работы.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.02.2012, 02:11
Цитата Сообщение от nio Посмотреть сообщение
в посте 3
дык это ж и есть ссобытие прорисовки, разве нет?
0
24.02.2012, 03:52

Не по теме:

Почему то про говнокод говорят те кто своих вариантов не предлагает :-/

0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
24.02.2012, 03:54
вот мой вариант , доска рисуется всего 1 раз при инициализации приложения, содержит 64 элемента, это сделано для того что бы без проблем отрисовывать нужную фигуру в нужном месте при дальнейшей работе программы (перемещения фигур и. т. д.)

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
51
52
53
54
55
56
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace ChessBoard
{
    public partial class ChessBoardForm : Form
    {
        static List<List<bool>> chessBoard = GenerateBoard();
        
        public ChessBoardForm()
        {
            InitializeComponent();
            PaintChess(panelChess);
        }
 
        public static List<List<bool>> GenerateBoard()
        {
            int[] value = { 0, 1, 2, 3, 4, 5, 6, 7 };
            return value.Select<int, List<bool>>(row =>
                         value.Select<int, bool>(col => Convert.ToBoolean((row + col) % 2))
                              .ToList())
                        .ToList();
        }
 
        public void PaintChess(Panel panelChess)
        {
            int i=0;
            Color color;
            panelChess.Controls.Clear();
            chessBoard.All(row => 
            {
                int j = 0;
                row.All(col => 
                {
                    color = col ? Color.Black : Color.White;
                    panelChess.Controls.Add(new PictureBox() 
                    { 
                        Size=new Size(50,50),
                        Location=new Point(i*50, j*50),
                        BackColor=color
                    });
                    j++;
                    return true;
                });
                i++;
                return true;
            });
        }
    }
}
здесь правда немного лямбды но я не думаю что это будет проблемой ?
Вложения
Тип файла: rar ChessBoard.rar (7.9 Кб, 120 просмотров)
0
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
24.02.2012, 04:00
Цитата Сообщение от Jupiter Посмотреть сообщение
рисовать нужнно только внутри события прорисовки
А как рисовать тогда когда надо по клику шашку сдвинуть ?

Добавлено через 5 минут
агерон, Вот тока не уверен что irineyxxx сможет в нем разобраться и модифицировать под свои нужды
Кстати насчет того что покрасивше я имеел виду то что рисуется эллипс, а не квадрат ,а не имел видя изящность кода )
0
 Аватар для агерон
447 / 300 / 65
Регистрация: 12.10.2009
Сообщений: 1,162
24.02.2012, 04:05
пусть учиться , по крайне мере есть пример , а там глядишь через пол годика и закончит разбираться с лямбдой
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
24.02.2012, 04:26
Цитата Сообщение от Vitall Посмотреть сообщение
А как рисовать тогда когда надо по клику шашку сдвинуть ?
по клику мыши изменяем координаты объекта, в данном случае шашки и вызываем Invalidate

Не по теме:

Цитата Сообщение от Vitall Посмотреть сообщение
Почему то про говнокод говорят те кто своих вариантов не предлагает
я полность согласен с nio про пост номер 3, а вот пост номер 9 уже не комильфо

0
 Аватар для irineyxxx
151 / 53 / 11
Регистрация: 18.09.2011
Сообщений: 730
24.02.2012, 07:55  [ТС]
агерон, Убил полтора года изучения каких-то жалких лямбда выражений, это не реально. Это зависит от человека - на сколько он тупой или умный

Добавлено через 13 минут
Данную задачу можно и через tableLayoutPanel думаю тоже
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
24.02.2012, 07:55
Цитата Сообщение от Jupiter Посмотреть сообщение
дык это ж и есть ссобытие прорисовки, разве нет?
Я это имел ввиду
Цитата Сообщение от Vitall Посмотреть сообщение
C#
1
pictureBox1.LoadAsync("http://www.tikiwiki.ru/img/design/img165.jpg");
Я вообще не понимаю, зачем тратить ресурс программы на динамическое рисование того, что остается неизменным уже несколько тысяч лет.
На месте ТС (кстати где он?) я бы лучше заморочился, как реализовать фигуры и их перемещение.
0
 Аватар для irineyxxx
151 / 53 / 11
Регистрация: 18.09.2011
Сообщений: 730
24.02.2012, 07:56  [ТС]
nio, дык, шашки легче создать, чем гребанные шахматы )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.02.2012, 07:56
Помогаю со студенческими работами здесь

Как скорректировать шахматную доску?
никак не могу понять

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

Как в onPaint нарисовать шахматную доску?
Нужно нарисовать шахматную доску для шахмат, которая в будущем должна полностью функционировать под шахматы. Рисование шахматной доски...

Как проще и оптимальнее нарисовать шахматную доску
Всем привет! Сейчас пытаюсь написать шашки на Qt, собственно, начал с шахматной доски. После недолгого &quot;гугления&quot; выяснил, что...

Как реализовать шахматную доску произвольного размера?
У меня есть задачи о ходе коня (найти путь по которому конь может пройтись по всем клеточкам шахматной доски), но шахматная доска должна...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты 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 и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru