Шахматное поле
Рассмотрим как с помощью цикла нарисовать шахматное поле. Шахматное поле представляет собой сетку из черных и белых квадратиков 8 на 8.

Создадим шаблон статической отрисовки
Напишем конструктор
public Form1()
{
InitializeComponent();
Paint += Form1_Paint;
ClientSize = new Size(CellSize * 8, CellSize * 8);
}
int CellSize = 50; // размер ячейки нашего поля (в пикселях)
Для того чтобы нарисовать двухмерное шахматное поле воспользуемся вложенным циклом. Первый цикл будет пробегаться по столбцам, второй по строкам. Каждый цикл будет выполнять по 8 итераций. Цвет текущего квадрата может быть либо черный либо белый, при переходе к каждой следующей клетке в строке он меняется на противоположный. При переходе на новую строку, он также меняется на противоположный. Введем специальную bool переменную , которая будет хранить текущий выводимый цвет ячейки.
private void Form1_Paint(object? sender, PaintEventArgs e)
{
e.Graphics.Clear(Color.White);
bool isBlack = false; // флаг текущего цвета
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
isBlack = !isBlack; // переключаем цвет каждую ячейку
e.Graphics.FillRectangle(
isBlack ? Brushes.Black : Brushes.White, // цвет текущей клетки
i * CellSize, // X левого края клетки
j * CellSize, // Y верхнего края клетки
CellSize, CellSize // ширина и высота клетки
);
}
isBlack = !isBlack; // переключаем цвет при переходе на новую строку
}
}Вставив и запустив данный пример мы увидим следующую картинку:

Данный пример наглядно показывает что для раборты с 2х мерными сетками удобно использовать два цикла (один вложен в другой). Тем самым индексаторы пробегаются по каждому элементы 2х мерной структуры данных, в данном случае шахматному полю. В дальнейшем эта техника пригодится нам для обработки двухмерных массивов.
Исходный код данного примера вы можете найти здесь
Упражнения
- Удалить и не использовать переменную isBlack. Переделать вычисление цвета текущей ячейки используя только счетчтчики i и j (вам пригодится оператор остаток от деления)
- Замените два цикла на один цикл. Подумайте как получать индекс строки и столбца (вам пригодится оператор остаток от деления) исходя из одного общего счетчика нового цикла, который будет пробегаться по числам от 0 до 63.