Как сделать крестики нолики на delphi

Обновлено: 02.07.2024

3. ШАГ 2. ДОБАВЛЕНИЕ КНОПКИ И НАДПИСИ НА ФОРМУ

4. ШАГ 3. ДОБАВЛЕНИЕ СТРОКИ МЕНЮ НА ФОРМУ

5. ШАГ 3. ДОБАВЛЕНИЕ СТРОКИ МЕНЮ НА ФОРМУ

1. В пункте меню Файл создаем команду
Выход.
2. Для
команды
Выход
прописуем
программный код аналогичный как и в
предыдущем приложении.

6. ШАГ 3. ДОБАВЛЕНИЕ СТРОКИ МЕНЮ НА ФОРМУ

1. В пункте меню Игра создаем команду
Новая игра.
2. Для команды Новая игра пропишем
программный код в дальнейшем через
несколько шагов.

7. ШАГ 3. ДОБАВЛЕНИЕ СТРОКИ МЕНЮ НА ФОРМУ

1. В пункте меню Справка создаем команду
О программе.
2. Для команды О программе создаем новую
форму и прописуем программный код
аналогичный как и в предыдущем
приложении.

8. ШАГ 4. ДОБАВЛЕНИЕ ОБЪЕКТОВ PICTUREBOX НА ФОРМУ

1. Перетянув на форму объект PictureBox
изменяем ее размер на 100х100.
2. Задаем прозрачный фон.
3. Располагаем PictureBox как показано на
рисунке над первой клеткой поля игры.

9. ШАГ 4. ДОБАВЛЕНИЕ ОБЪЕКТОВ PICTUREBOX НА ФОРМУ

1
2
3
4
5
6
7
8
9
1. Над остальными ячейками располагаем
объекты PictureBox, копии первого
объекта, согласно нумерации указанной на
изображения.

10. ШАГ 5. ДОБАВЛЕНИЕ ПРОГРАМНОГО КОДА ДЛЯ ОЪЕКТОВ PICTUREBOX

1. Перед тем как написать программный код
необходимо в папку
\Visual Studio
2010\Projects\Крестики нолики \ крестики
нолики\bin\Debug\ необходимо перебросить
файлы x.jpg, 0.jpg, none.jpg из папки Images.
2. Кликаем два раза левой мыши по первому
PictureBox.

11. ШАГ 5. ДОБАВЛЕНИЕ ПРОГРАМНОГО КОДА ДЛЯ ОЪЕКТОВ PICTUREBOX

12. ШАГ 5. ДОБАВЛЕНИЕ ПРОГРАМНОГО КОДА ДЛЯ ОЪЕКТОВ PICTUREBOX

13. ШАГ 5. ДОБАВЛЕНИЕ ПРОГРАМНОГО КОДА ДЛЯ ОЪЕКТОВ PICTUREBOX

1
2
3
4
5
6
7
8
9
[0,0]
[0,1]
[0,2]
[1,0] [1,1] [1,2]
[2,0] [2,1]
[2,2]
Для остальных клеток поля добавляем код
аналогично как и в первой лишь изменяя
номер объекта PictureBox и адрес ячейки
массива.
ПРИМЕР для второй ячейки:

14. ШАГ 6. ДОБАВЛЕНИЕ ПРОГРАМНОГО КОДА ДЛЯ КНОПКИ ХОДИТЬ

15. ШАГ 6. ДОБАВЛЕНИЕ ПРОГРАМНОГО КОДА ДЛЯ КНОПКИ ХОДИТЬ

Для отображения ноликов на
игровом
поле
необходимо
добавить программный код в тело
цикла проверки ячеек на пустоту.
С помощью вложенного оператора
ветвления
будет
происходить
анализ адреса ячейки массива для
вывода нолика в правильном
PictureBox.
Также добавляем оператор break
для преждевременного окончания
цикла при нахождении пустой
ячейки.

16. ШАГ 6. ДОБАВЛЕНИЕ ПРОГРАМНОГО КОДА ДЛЯ КНОПКИ ХОДИТЬ

17. ШАГ 7. ДОБАВЛЕНИЕ ПРОГРАМНОГО КОДА ДЛЯ ПУНКТА МЕНЮ НОВАЯ ИГРА

18. ШАГ 8. ВЫВОД РЕЗУЛЬТАТА ИГРЫ

Для проверки результатов ходов
необходимо
анализировать
содержимое строк, столбцов и
диагоналей. Если все три элемента
равны 1 то это победа игрока, а
если три -1 то это поражение
игрока.
Проверку победы необходимо
проводить
перед
ходом
компьютера,
а
проверку
поражения после.
Последней командой процедуры
станет вывод на экран результатов
хода.

19. ШАГ 8. ВЫВОД РЕЗУЛЬТАТА ИГРЫ

Игрок управляет длинным, тонким существом, напоминающим змею, которое ползает по плоскости (как правило, ограниченной стенками), собирая еду (или другие предметы), избегая столкновения с собственным хвостом и краями игрового поля.

Используемые библиотеки: Не требуются

Комментарии (0) 496 скачиваний

snake.zip (52106 байт)

Всем знакомая игра "Змейка"

Комментарии (2) 4347 скачиваний

tanks.zip (100095 байт)

Подобие игры на дэнди Battle Tank (конечно же глючная и тормознутая)

Комментарии (0) 2889 скачиваний

tipalife.zip (443748 байт)

Игра программ. Вирусы.

На поле(квадратное, размер от 20х20)
случайно кидается от 2х до 10 экземпляров вирусов каждого класса(от 2х до 6 классов).
Каждый экземпляр вируса случайно получает управление.

Поучив управление, вирус может
либо ПОЙТИ* в любом из 8 направлений,
либо ПОМОЧЬ* в любом из 8 направлений.
.

Шаг 217.
VBA в MSExcel. Практические приемы программирования на VBA. Тема: игра в крестики и нолики. Практика

На этом шаге мы рассмотрим основные моменты создания указанного приложения .

В редакторе форм создадим диалоговое окно Крестики — нолики (рисунок 1).


Рис.1. Диалоговое окно Крестики — нолики в редакторе форм

Поле игры будут образовывать девять элементов управления Caption ( Надпись ) . Для видимости границ элементов управления Caption установите свойство BorderStyle равным fmBorderStyleSingle .

В данной игре запрограммируем только более сложную для компьютера ситуацию, когда первым ходит игрок. В этой ситуации компьютеру надо умело обороняться, создавая ситуации для внезапных атак. Играющему первым игроку достаточно все время атаковать, поэтому его стратегия для программирования более легкая. Общий случай, когда в параметрах игры устанавливается, кто ходит первым компьютер или человек, будет оставлен в качестве хорошего самостоятельного задания.

Итак, в нашей игре первый ход за пользователем. Ход осуществляется двойным щелчком по игровому полю. Если игровое поле пусто, то в нем отображается крестик. Компьютер мгновенно отвечает на ход игрока, постановкой нолика в другое игровое поле и т. д. О результате игры компьютер информирует пользователя. При желании сыграть еще одну игру с компьютером, нажмите кнопку Переиграть , которая очистит игровые поля. На рисунке 2 приведен вид партии в Крестики — нолики после второго шага игры.


Рис.2. Пример партии игры в Крестики — нолики после второго шага игры

Крестик и нолик, которые выводятся на игровом поле, содержатся в файлах cross.bmp и ou.bmp , а их образы можно создать при помощи любого графического редактора.

В связи с небольшим числом возможных стратегий в этой игре, составляя программу можно пойти по пути наименьшего сопротивления: а именно, применить подход простого перебора вариантов возможных действий. Если бы в игре было большое число стратегий, то этот подход был бы неприменим, т.к. программа не смогла бы играть в режиме реального времени.

  • Если в игре сложилась ситуация, когда на очередном ходе он может проставить в ряд три нолика, компьютер ставит их и выигрывает.
  • Если игрок на очередном ходе угрожает поставить подряд три крестика, а у компьютера есть возможность помешать этому, поставив нолик, он это делает.
  • Первый и второй ход игры являются основными и здесь компьютер должен действовать осторожно. Поэтому некоторые особые ситуации в них программируются отдельно.
  • После каждого хода как игрока, так и компьютера необходимо производить проверку на возможный результат игры.
  1. Активизирует диалоговое окно.
  2. Очищает все надписи от рисунков и текста, обнуляет все переменные.

Нажатие кнопки Переиграть запускает на выполнение процедуру CommandButtonl_Click Очищает все надписи от рисунков и текста, обнуляет все переменные.

Нажатие кнопки Выход запускает на выполнение процедуру CommandButton2_Click Закрывает диалоговое окно.

Strategy_1 и Strategy Генерируют первый и последующие ходы соответственно.

Проверка Проверяет, нет ли в игре победителей.

НачальноеСостояние Очищает все надписи от рисунков и текста, обнуляет все переменные.

Состояние В массиве Статус отмечаются расставленные значения в ячейках игрового поля: занятые крестиком — 1, ноликом — 10, а пусто — 0. Процедура Состояние находит суммы элементов массива на диагоналях, в строках и столбцах.

Диагональ1 Определяет в зависимости от Состояние , надо ли компьютеру ходить по главной диагонали и, если надо, то в какую ячейку.

Диагональ2 Определяет в зависимости от Состояние , надо ли компьютеру ходить по второй диагонали и, если надо, то в какую ячейку.

Бок, Верх Определяет в зависимости от Состояние , надо ли компьютеру ходить и, если надо, то в какую ячейку.

Я ещё нуб в делфи, я хочу создать ИИ (искусственный интеллект) для игры крестики-нолики, что бы ИИ мог запоминать тактику противника и в следующий раз смог сыграть вничью или даже победить противника!


В случае крестиков-ноликов на поле 3х3 принципиально разные варианты игры перебираются вручную :-) И оптимальный алгоритм можно построить в легкую. Учтите, что примерно половина вариаций - симметрично отраженные. А вот 5x5 и бОльшие поля - тут, да, нужно думать.

4 ответа 4

самый простой ИИ глубиной 2 хода (сгодится для любой подобной игры): сперва пишем функцию, которая проверяет, есть ли выигрышная ситуация на доске (3 подряд крестика или нолика)

делаем неполный перебор, глубиной в 2 хода:

  1. цикл по всем возможным ходам (проверяем - если выигрышная ситуация - делаем этот ход и выходим из цикла - ура, мы выиграли!).
  2. вложенный цикл по всем возможным ходам противника (если в результате хода противника у него получается выигрышная ситуация, то отмечаем этот ход как плохой и сразу переходим к следующей итерации цикла 1.)

в результате работы этого алгоритма получится массив из возможных текущих ходов, среди которых надо будет выбрать один и сделать ход. можно всегда выбирать тот, который не приводит к проигрышной ситуации.

можно доработать алгоритм и еще проверять ваш ход на то, сколько перспективных вариаций он порождает.

в случае игры крестики-нолики (3х3) сколько порождает линий с 2 крестиками. для эого просто написать еще функцию.

Насколько помню игру крестики-нолики, единственный серьезный вариант выиграть - сделать "вилку". Это такой ход, когда получается 2 линии с 2 крестиками, причем противник не может перекрыть их одним ноликом.

Проверить, получилась ли "вилка", никаких проблем нет.

у меня одноклассник писал игру - "футбол" на клеточном поле. Если кто не знает, что это такое: берется лист бумаги в клеточку, рисуется футбольное поле и нужно делать ходы. можно ходить по ребрам и диагонально, можно "отталкиваться" он уже нарисованной точки.

Полный перебор он естественно не делал. А был придуман такой алгоритм, как я описал выше. А алгоритм поиска наиболее удачного хода был такой: во-первых, никогда не делать ход, вследствие которого противник может сделать выигрышный ход. во-вторых, делать самый длинный ход.

Читайте также: