|
2 / 2 / 0
Регистрация: 16.01.2014
Сообщений: 24
|
||||||
Как продумать логику игры компьютера в крестики-нолики16.01.2014, 18:33. Показов 6810. Ответов 22
Метки нет (Все метки)
Есть такая заготовка под крестики-нолики.... В общем, синтаксис и основы знаю, но не понимаю, что, куда, зачем и как.... Создал массив кнопок, теперь вот как все это привязать к действиям? как самому установить значение, как организовать, чтобы комп сам делал ход....
0
|
||||||
| 16.01.2014, 18:33 | |
|
Ответы с готовыми решениями:
22
Крестики-Нолики: как запрограммировать логику игры Крестики нолики - как организовать интерфейс и логику игры? Сохранение и открытие игры крестики - нолики |
|
154 / 153 / 29
Регистрация: 21.05.2010
Сообщений: 338
|
|
| 16.01.2014, 18:44 | |
|
kabernet1971, google подскажет даже самые извращённые примеры реализации игры "крестики нолики" на C#...
1
|
|
|
Си-решеточник
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
|
|
| 16.01.2014, 18:50 | |
|
Автор, зачем всё делать с нуля? Создай в Visual Studio заготовку под Windows-приложение и размещай там свои кнопки в графическом режиме сколько влезет (по крайней мере, для 9 кнопок это не проблема). И с событиями удобнее работать, чем писать всё вручную.
А вообще - прочитай любой учебник по C# для чайников и все подобные вопросы отпадут.
1
|
|
|
2 / 2 / 0
Регистрация: 16.01.2014
Сообщений: 24
|
|
| 16.01.2014, 19:13 [ТС] | |
|
Да я понял, что можно и так и сяк.... я ни как не вкурю, как конкретно реализовать например такой ход - чтобы в моем событии, которое отзывается на нажатие на любую кнопку в массиве, что то происходило, кроме ShowMessage... т.е. как в это самое событие, по нажатию на кнопку, впихать нужн ое мне действо?? просто... но ни черта не могу понять...
Добавлено через 26 секунд Блин... это ж форум для начинающих... Добавлено через 15 секунд я ж не просто так спрашиваю
0
|
|
|
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
|
||||||
| 16.01.2014, 19:44 | ||||||
|
Зачем тебе массив если он локальный и лямбд не видно?
Чтобы много не переписывать, вот простой пример как сохранить данные в кнопке (координаты), как прочесть значение Крестик/Нолик, как получить кнопку при нажатии на нее: Кликните здесь для просмотра всего текста
1
|
||||||
|
2 / 2 / 0
Регистрация: 16.01.2014
Сообщений: 24
|
||||||
| 17.01.2014, 15:07 [ТС] | ||||||
|
Попробую разобраться, что к чему... Спасибо большое....
Добавлено через 3 часа 36 минут Вот эту строку не понял
я почему-то думал, что надо слепить массив из кнопок (неважно, программно, или прям на форме), а потом второй массив, такой же, как кнопки, только целыми числами, и потом уже реализовывать перебор и прочее, при нажатии на "новая" (в смысле "новая игра"), массив заполняется нулями, а один игрок делает 1, а второй -1. А потом все это привязывать к нажатию кнопок. А в этом вот случае, получается надо будет перебирать "х" и "о"... не совсем догоняю, как это делать... в случае с цифрами можно как-то сумму к числу 3 свести, вот и выигрыш, а с "иксами" что делать? они же не складываются? или я опять что-то не понимаю... Извиняюсь заранее, понимаю, что тема может быть уже разжевана миллион раз, но "Гугл в помощь" ни катит... Я не смог найти подробностей, кроме как здесь.... думал, что смогу сам разобраться, но к счастью не смог ![]() Добавлено через 1 час 23 минуты Еще не понял, как можно получить координаты из Point ?
0
|
||||||
|
Си-решеточник
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
|
|||||||||
| 17.01.2014, 17:08 | |||||||||
[/CSHARP]
1
|
|||||||||
|
2 / 2 / 0
Регистрация: 16.01.2014
Сообщений: 24
|
|
| 17.01.2014, 17:52 [ТС] | |
|
тут у меня нагромождение из 100 кнопок, так что все ряды просматривать будет наверное затруднительно... но об этом я пока еще не думал... у меня проблема, что при выполнении моей программы, крестики ставлю, где хочу, а нули рисует строго по порядку, от верхнего угла... я так понимаю, что массив просматривается по порядку, так и заполняет, где находит пустую кнопку, а вот как сделать, чтобы комп лепил свою ерудну по-умному....
0
|
|
|
Си-решеточник
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
|
||
| 17.01.2014, 18:35 | ||
|
2
|
||
|
2 / 2 / 0
Регистрация: 16.01.2014
Сообщений: 24
|
|
| 17.01.2014, 18:39 [ТС] | |
|
Спасибо, буду разбираться....
0
|
|
|
Си-решеточник
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
|
|||
| 17.01.2014, 18:40 | |||
|
Как-то я не обратил внимания, что у тебя крестики-нолики не 3х3... Хотя бы маленькие для начала сделал.
0
|
|||
|
2 / 2 / 0
Регистрация: 16.01.2014
Сообщений: 24
|
|
| 18.01.2014, 16:05 [ТС] | |
|
А что такое АИ ? ))
0
|
|
|
Си-решеточник
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
|
||
| 18.01.2014, 17:18 | ||
0
|
||
|
2 / 2 / 0
Регистрация: 16.01.2014
Сообщений: 24
|
|
| 19.01.2014, 11:54 [ТС] | |
|
вот я разобрался в твоей вещи, но понял, что в ней комп ходит случайным образом, т.е. при помощи функции random, а я думаю, как сделать перебор более продуманным... не врублюсь, по какому принципу перебирать кнопки? случайным образом, тогда неинтересно играть.... а вот по другому... в общем, с синтаксисом я разберусь, но вот принцип не могу вкурить...
0
|
|
|
Си-решеточник
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
|
|
| 19.01.2014, 13:51 | |
|
kabernet1971, проблема в том, что ты слишком высоко замахнулся. В этом случае надо использовать теорию принятия решений и на основе какого-то с критериев выбора создавать интеллектуальную систему, которая и будет подыскивать оптимальные ходы для компьютера. Лично у меня подобная программа преподавалась на предпоследнем и последнем курсах университета и я сомневаюсь, что ты сможешь во всем так вот нахрапом разобраться.
Вот статья, думаю она будет тебе полезной.
0
|
|
|
2 / 2 / 0
Регистрация: 16.01.2014
Сообщений: 24
|
|
| 19.01.2014, 14:44 [ТС] | |
|
Да уж, а я то думал, что все будет проще... ))) не хотел же ведь так глубоко... просто циклами, что-то вроде, если сумма больше 2, то тогда -1, чтобы уменьшить, или что то подобное... Т.е. ветвления, которые основаны на простых математических действиях, а не там, где комп должен воплощать "зло" ))) ладно, пойду дальше "курить"... может что проясниться ))))
0
|
|
|
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
|
|
| 19.01.2014, 19:26 | |
|
kabernet1971, попробуй стандартные 3*3 написать, там вроде не сложно, а реализации интересные можно придумать.
0
|
|
|
2 / 2 / 0
Регистрация: 16.01.2014
Сообщений: 24
|
||||||
| 24.01.2014, 08:48 [ТС] | ||||||
|
С самого начала была такая задумка, размер массива меняется только изменением цифр при загрузке приложения.... Я не пойму, как перейти к ходу компа... мне подсказали код, где в foreach в массиве кнопок ставится "0" в первом же батоне, где b.text пустой, а мне непонятно, как перейти к перебору именно кнопок не по тексту, а по расположению... блин, даже объяснить не могу )))
я так понимаю, что мне не обязательно пытаться перебирать кнопки в foreach, а можно сразу же обозначать какую-нибудь кнопку нулем, одновременно с нажатием кнопки пользователем... т.е. если какой-то баттон нажали мышкой, одновременно с этим ставить рядом ход компа, но вот тут и возникает проблема, как поставить "ход компа" в кнопку рядом?? или тут вообще проблема в другом...
0
|
||||||
|
Си-решеточник
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
|
|||||||
| 24.01.2014, 15:04 | |||||||
|
Итак... Допустим, что ты походил на клетку с координатами playerX и playerY. Массив кнопок - btnArray[,]. Соответственно, кнопки, которые находятся рядом с той, на которую походил игрок, это:
Добавлено через 52 минуты Однако, если присвоить обработку события MouseClick массиву кнопок, просто по аргументу sender довольно сложно определить координаты нажатой кнопки. По этому, как для определения координат нажатой кнопки, Tag всё таки годится.
1
|
|||||||
|
Си-решеточник
141 / 135 / 60
Регистрация: 07.02.2011
Сообщений: 669
|
|
| 24.01.2014, 15:39 | |
|
От нечего делать, тоже решил набросать такие крестики-нолики. В прикрепленном файле компьютер ходит на случайную соседнюю клетку от той, на которую походил игрок. Если таковой нет, то компьютер ходит на абсолютно случайную клетку. Проверки на победу пока не делал, также не делал проверки на полную заполненность поля.
Если хочешь - посмотри. Код не комментировал, но по названиям переменных и функций можно понять, что, где и как.
0
|
|
| 24.01.2014, 15:39 | |
|
Помогаю со студенческими работами здесь
20
Дописать Крестики-нолики для игры с ботом
Крестики-нолики, общие принципы реализации игры Проверка подключения к Интернету - продумать логику поведения программы Как реализовать крестики-нолики 3х3 на button-ах Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога
Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|