Задача о ходе коня – это задача о нахождении маршрута шахматного коня, проходящего через все поля доски по одному разу. Эта задача известна по крайней мере с XVIII века. Леонард Эйлер посвятил ей большую работу «Решение одного любопытного вопроса, который, кажется, не подчиняется никакому исследованию» (датируется 26 апреля 1757 года).
Задачу можно просто решать с помощью ручки и тетради, но в данном проекте вы сделаете форму, которая поможет решать задачу на компьютере. В окне программы выводится поле 8х8 клеток. Пользователь щелчком мыши выбирает клетку, при этом в нее записывается порядковый номер клетки, а сама клетка окрашивается в желтый цвет. Задача игрока – пройти все клетки.
Программа демонстрирует использование разными элементами управления одного обработчика события, использование служебного слова sender, работу с глобальными переменными и оператором +=.
Создание приложения
1. В среде Visual C# 2010 Express создайте новое приложение Windows Forms, в качестве имени проекта введите MoveOfTheKnight.
2. С помощью окна свойств установите значения свойств формы:
Text | Ход конем |
Size | 310; 330 |
3. Разместите на форме элемент Label и установите для него следующие значения свойств:
AutoSize | False |
BorderStyle | FixedSingle |
Location | 30;30 |
Size | 30; 30 |
Text | удалите значение |
TextAlign | MiddleCenter |
4. Скопируйте элемент label1 и вставьте на форму еще 63 таких же элемента, разместите их в виде матрицы 8х8.
5. Для того чтобы при нажатии на клетку, в ней отображался номер текущего шага, нам понадобится дополнительная переменная целого типа, назовем ее step. Чтобы значение переменной менялось каждый раз при нажатии на надпись, эта переменная должна быть объявлена как глобальная. Для этого добавьте объявление этой переменной в файле Form1.cs в самом начале класса, и сразу можно ей задать начальное значение равное 1:
public partial class Form1 : Form
{
int step = 1;
public Form1()
{
InitializeComponent();
}
6. Теперь напишите обработчик нажатия по метке. Для этого переключитесь в режим конструктора формы, нажмите дважды по элементу label1 и введите следующий код:
// Проверяем пустая ли клетка
if((sender as Label).Text == "")
{
// Выводим в клетке номер текущего шага
(sender as Label).Text = step.ToString();
// Увеличиваем значение переменной на 1
step += 1;
// Меняем цвет клетки
(sender as Label).BackColor = Color.Yellow;
}
7. Сейчас можно запустить программу и проверить чтобы при нажатии на метке она стала желтого цвета и в ней была написана цифра 1.
8. Чтобы назначить созданный обработчик события всем клеткам выделите все элементы Label, затем в окне свойств переключитесь на вкладку свойств, найдите событие Click и выберите значение label1_Click из выпадающего списка.
9. Сохраните проект.
10. Запустите программу на выполнение и проверьте ее работу. Сможете пройти конем все клетки?
Как вы видите в программе можно делать ход не только конем, а вообще ходить на любую клетку. Программа ведет себя так же как будто вы пытаетесь разгадывать эту задачу с помощью ручки и листа бумаги в клетку – какую цифру и куда ставить решает игрок. Однако программу можно усовершенствовать так, чтобы пользователь мог ходить только буквой «Г». Для реализации этих проверок удобно в программе использовать двумерный массив. Вы сможете переделать программу после изучения темы «Массивы».
Упражнения
1. Доработайте программу так, чтобы при заполнении всех клеток выдавалось сообщение о том, что игра закончена.