Опубликован: 23.04.2013 | Доступ: свободный | Студентов: 856 / 185 | Длительность: 12:54:00
Лекция 9:

Интерфейс и многопоточность

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >

Игра 15

Рассмотрим теперь более интересный проект, реализующий известную игру 15. Коротко об игре. Игра ведется на квадратном поле n * n. В классическом варианте n = 4. На этом поле в исходном состоянии размещается 15 квадратов, на каждом из которых написано одно из чисел - от 1 до 15. Порядок размещения квадратов случаен. Одно поле остается свободным. Цель игры в том, чтобы передвигая квадраты, используя одно свободное поле, упорядочить как можно больше квадратиков. В половине случаев удается правильно поставить все 15 квадратов. Но не для всякой начальной расстановки можно добиться этого результата. Гарантировать можно правильную расстановку лишь 13 квадратов. Математический анализ игры показал, что по начальной расстановке можно однозначно определить, достижимо ли полное упорядочение. Для этого достаточно подсчитать число нарушений порядка в исходной расстановке. Если оно нечетно, то правильно расставить можно лишь 13 квадратов.

Реализация этой игры представляет хорошее упражнение для программиста. На рис. 8.5 показан интерфейс проекта, реализующего игру 15:

Начальное состояние игры 15

увеличить изображение
Рис. 8.5. Начальное состояние игры 15

Командная кнопка "Перемешать" позволяет задать новую случайную расстановку. Меню "Файл" позволяет сохранить расстановку или задать расстановку, записанную в файле. Меню "Игра" позволяет управлять свойствами игры, можно изменять скорость игры и менять игрока (человек или компьютер). Командные кнопки "Пуск" и "Останов" позволяют запустить или приостановить игру. Ряд элементов управления в интерфейсе позволяют отображать наблюдаемые параметры игры. В списке справа запоминается начальная расстановка, и записываются ходы, сделанные компьютером. Естественно, что каждый ход отображается в игровом поле. Еще два элемента сохраняют информацию о числе уже упорядоченных квадратов. Один элемент управления представляет текстовое поле, другой (ProgressBar) эту же информацию представляет в графическом виде. Еще одно поле служит для выдачи текстовых сообщений о ходе игры.

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

Проект, реализующий эту игру, основан по схеме взаимодействия интерфейса и бизнес - логики, работающих в разных потоках, на основе взаимных ссылок. В данной ситуации это естественный вариант, поскольку игра рассчитана на вполне определенный интерфейс. При записи значений наблюдаемых параметров в соответствующие элементы интерфейса использовались методы Invoke.

Проект достаточно большой, поэтому приводить текст его не буду, но также как и все проекты, сопровождающие текст этого курса, как и сам курс, надеюсь, будет доступен на сайте Интернет университета ИТ (intuit.ru).

В завершении приведу снимок заключительного состояния игры, для случая, когда начальная расстановка позволяет правильно расставить все 15 квадратов:

< Лекция 8 || Лекция 9: 12345 || Лекция 10 >
Алексей Рыжков
Алексей Рыжков

не хватает одного параметра:

static void Main(string[] args)
        {
            x = new int[n];
            Print(Sample1,"original");
            Print(Sample1P, "paralel");
            Console.Read();
        }

Никита Белов
Никита Белов

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