![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 10.05.2013
Сообщений: 5
|
![]()
Эта задача скорее чисто образовательного характера, хотя я и пишу игру. Хотелось бы найти самый оптимальный и изящный алгоритм определения победителя, если победитель есть, и его местоположение. Тоесть верхний ряд по горизонтали, второй ряд по горизонтали итд.. Можно сделать это просто полным перебором, ведь у нас всего 8 выигрышных вариантов, так что перебрать не так уж и сложно:
Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Саша, перебором однозначно.
И победитель определяется и выигрышная линия находится. Просто задумайтесь, если (вдруг) в следующей вашей программе понадобится определить линию длиной более 3-х и на поле размером более, чем 3X3 (см. игру Gomoku, например Turbo-Gomoku), то что Вы будете делать?! Переборные алгоритмы хороши тем, что хорошо записываются в виде циклов и, следовательно, легко адаптируются под изменяющиеся условия. p.s. Конкретно для вашего случая вполне можно и 8 переменных задействовать и 8 выражений логических написать (по аналогии с тем, что Вы привели). Хотя я бы не рекомендовал этот способ, но, тем не менее, его вполне можно использовать на практике. Последний раз редактировалось Serge_Bliznykov; 02.10.2013 в 14:25. |
![]() |
![]() |
![]() |
#3 |
Высокая репутация
СуперМодератор
Регистрация: 27.07.2008
Сообщений: 15,591
|
![]()
Можно минимаксом, но я как-то делал крестики-нолики 3*3 простым алгоритмом, так очень простая беспроигрышная стратегия.
E-Mail: arigato.freelance@gmail.com
|
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 10.05.2013
Сообщений: 5
|
![]()
Правильно поняли.
Чтобы потом отобразить на игровом поле. Как обычно перечёркивают выигравший ряд. Теперь буду разбираться с минимаксом. Кажется, что это нечто слишком уж глобальное. Можете подсказать как это можно применить для крестиков и ноликов? Последний раз редактировалось Саша85; 02.10.2013 в 16:49. |
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
![]()
Неограниченные крести-нолики пять в ряд интереснее. Да и стратегию покруче нужно закладывать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
![]() |
![]() |
![]() |
#7 |
Регистрация: 10.05.2013
Сообщений: 5
|
![]() |
![]() |
![]() |
![]() |
#8 | |
Форумчанин
Регистрация: 09.07.2013
Сообщений: 249
|
![]() Цитата:
одна функция с четырьмя режимами работы - по горизонтали, по вертикали и два - по диагонали. Победитель получится при двойном выходе за край таблицы(найдены оба конца линии образованной ноликами или крестиками и они упираются в край матрицы, а не лежат гдето по середине). Для реализации етого подкину кода magic_wand.h. К сожалению я его практически не комментировал, основное токашо описал. Код:
do not use your brain
|
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
![]()
Довольно банальный вариант:
Код:
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
крестики нолики | spydark91 | Общие вопросы Delphi | 2 | 08.07.2011 19:19 |
крестики нолики | neformalblack | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 3 | 18.04.2010 19:04 |
Крестики-нолики | Linker88 | Фриланс | 10 | 20.05.2009 07:24 |
крестики-нолики | {PatRioT} | Паскаль, Turbo Pascal, PascalABC.NET | 4 | 14.05.2009 13:24 |
Крестики-нолики | mish@ | Общие вопросы Delphi | 6 | 07.05.2009 11:01 |