|
0 / 0 / 0
Регистрация: 05.03.2023
Сообщений: 1
|
||||||
Оцените и посоветуйте как можно улучшить код Крестики-нолики05.03.2023, 19:56. Показов 17895. Ответов 284
Метки нет (Все метки)
Я учусь в 10 классе и для индивидуального проекта мне нужно чтобы вы оценили и как-то посоветовали улучшить код программы крестики нолики на C++. Вот сам код:
0
|
||||||
| 05.03.2023, 19:56 | |
|
Ответы с готовыми решениями:
284
Крестики-нолики, улучшить программу Как оптимизировать данный код игры крестики нолики? Оцените игру крестики нолики (Player vs Bot easy) |
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|
| 08.03.2023, 13:18 | |
|
SmallEvil, вообще это GUI всегда контролирует, чтобы движки не шалили и не делали ходов не по правилам. Он же контролирует время и выделяет нужное количество памяти для движка. Как понимаю, XLAT не собирается делать GUI. В таком случае, этот консольный "арбитр" должен всем этим заняться.
Идеальный вариант, конечно, это создание GUI для игры и матча движка + описание протокола движка, скажем, в документе pdf. Дальше каждый ознакомливается с протоколом и после создает свой движок. Есть ещё вариант, найти в инете GUI под renju/gomoku. В таком случае, останется только написать движок, соблюдая протокол. Например, Yixin Board (https://github.com/accreator/Yixin-Board) - GUI для движка Yixin, но разработчик выложил и описание протокола, так что к оболочке можно прикрутить свой движок. Только не проверял, поддерживает ли данная оболочка турнир движков.
1
|
|
|
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
|
|
| 08.03.2023, 13:41 | |
|
1
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 08.03.2023, 14:00 | ||
|
На этом его функция и полномочия должны заканчиваться. Если это вдруг не так, значит херовый получился GUI. GUI - он Graphical User Interface ?
0
|
||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|
| 08.03.2023, 14:17 | |
|
SmallEvil, GUI не только рисует, по крайней мере, так было в шахматных оболочках, которые я встречал (яркий пример это GUI Arena). Более того, представь, что хочешь играть без движка сам с собой или с другом, то кто тогда проверяет на корректность? Конечно же, GUI. Но и движок должен проверять, дабы иметь возможность играть в консоли без GUI.
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 08.03.2023, 14:29 | |
|
Royal_X, тогда эта проверка уже не часть GUI, не должна ею быть, но может использоваться интерфейсом.
То есть ее нужно выделить отдельно. Ну да ладно. Это уже оффтоп. Если есть возможность проверять какую-то корректность без движка, ну что ж, повезло.
0
|
|
|
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,326
|
||
| 08.03.2023, 15:12 | ||
|
0
|
||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|
| 08.03.2023, 15:30 | |
|
alexu_007, GUI не только для вывода доски. Любое взаимодействие пользователя с движком должно реализоваться через GUI. Например, шахматный GUI кроме отображения доски, должен проверять корректность позиции, уметь расставлять и двигать фигуры, записывать ходы, работать с дебютной книгой и эндшпильными базами (особенно с базами на метрике DTM, т.к. DTZ больше для движка, а не для оболочки), отображать шахматные часы и контролировать время, подключать и отключать движки, настраивать движок через удобный UI, давать пользователю возможность выбрать количество процессоров и количество памяти для движка, останавливать и повторно запускать движок и т.д. Перечислять можно бесконечно...
Только придираться не стоит, я использую "GUI" в широком смысле = оболочка, а не как чисто графическая библиотека.
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 08.03.2023, 15:41 | ||
|
Но по вашему широкому смыслу, весь проект использующий GUI - является GUI. И нет никакого разделения на логику, модели и так далее ? Не нужно так сильно размывать довольно четкие концепции. Если у программы логика и GUI сильно связанны и зависимы - это только проблемы индейца.
0
|
||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
||
| 08.03.2023, 16:00 | ||
Я тебя понимаю. В программировании "gui" это совсем другое. Но в мире программ настольных игр уже есть устоявшаяся практика, что этой аббревиатурой называют всю оболочку.
0
|
||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 08.03.2023, 16:03 | |
|
Royal_X, ну так, коса, коса и коса - три разные косы. Но мы то тут все пограммисты
![]() Royal_X, уже пишешь бота ? )
0
|
|
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|
| 08.03.2023, 16:23 | |
|
SmallEvil, может когда будет настроение и когда будет известен точный протокол, что-то попробую написать. Не обещаю ничего и не обещаю сильного бота, но Randовичу конкуренцию точно составит
![]() Когда-то я хотел написать шахматный движок, который поддерживает UCI протокол, чтобы пустить его официально на турниры движков CCRL, TCEC, CEGT. Но потом понял, что для меня это сложновато будет. Самый сильнейший шахматный движок в мире это Stockfish и его код открыт. Но в его коде я не всё понимаю, поэтому думаю, что я не дорос до того, чтобы писать движки.
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 08.03.2023, 16:31 | |||
|
Скорее всего. Хотя простенький и тупенький могет и с готовой "доской" работать. Но да, нужен ее интерфейс. Добавлено через 53 секунды Думаю достаточно перегрузить оператор (x,y) и (plot). Добавлено через 1 минуту
0
|
|||
|
Нарушитель
6318 / 3043 / 1054
Регистрация: 01.06.2021
Сообщений: 11,601
|
|
| 08.03.2023, 16:54 | |
|
SmallEvil, тут реально всё зависит от настроения и времени, а иначе не хватит терпения на создание хорошего алгоритма минимакса для альфа-бета-отсечения и поиска основных отклонений (PVS). В этих крестиками-ноликах узлы на больших досках будут увеличиваться как ещё те черти и нужно будет правильно их сокращать. Кроме того, наверное, нужно хардкодить базу популярных структур.
0
|
|
|
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,326
|
|
| 08.03.2023, 18:47 | |
|
Вообще GUI это графический интерфейс, его задача рисовать на экране игровое поле, и обеспечивать ввод/вывод информации от юзера. Можно без него обойтись? Да легко! Консолька выдаёт координаты следующего хода - юзер двигает фигуру на шахматной доске. Ну или рисует очередной нолик на бумажке.
В крестиках и ноликах ( если это больше, чем 3х3) алгоритм может быть такой: если на поле стоит четыре крестика в ряд, нужно безальтернативно ставить туда нолик, или проиграл. Если стоит три крестика в ряд - нужно безальтернативно ставить нолик в любой край, иначе следующим ходом будет четыре. Если стоит два или один крестик - можно прилепиться к ним или прилепиться к своим или сделать случайный ход. Дальше - ИИ.
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 08.03.2023, 18:54 | ||
![]() Добавлено через 1 минуту Называть алгоритм ИИ - неуместно, пока оно не будет хотя бы как то обучаться. Иначе это просто алгоритм. И битва тут будет именно алгоритмов. Добавлено через 2 минуты Во, я понял, что бы появилось желание написать что-то хитрое. Начну ка я с написания бота Рандовича. Будет первым этапом проверки
0
|
||
|
Just Do It!
|
|||||||||||||||
| 09.03.2023, 09:50 | |||||||||||||||
|
информировать противника о последнем ходу. вижу проблему: возможность чапаевской порчи. всю копию передавать тоже не есть хорошо. лучший вариант: у ИИ своё поле в памяти куда добавляется инфа о ходах игры. я тут на выдохе наковырял демку, чтобы просто работало, но как обычно много нечего будет не хватать, например, - режимы турнира - неотображаемый(т.е. ) быстрый - отображаемый с автопаузами - отображаемый управляемый. - больше разной инфы на экран - о ходе игры - больше статистики. - писать логи в файлы с последующим их проигрыванием. да по поводу статистики, пока так:
но опять же не хватает столбца с ФЕЙЛАМИ - зависания юзерского ИИ ну и тп.. и за фейлы рейтиг минусовать с дискваликом. а писать ваш ИИ нужно сюда: Файл "ai.h"
я хз, мош от непреднамеренной порчи нужно часть кода спрятать в статиклибу? но щас рано об этом. Код арбитра уже не влез в один пост > 25000 символов. поэтому пост смотрим ниже... возможно уже пора эту портянку порезать на хедерфайлы? и положить на гитхаб. я компилил(MSYS2) в 32 разрядной версии, но могу и эти приложить бинарники. но хз возможно сразу договориться что все бинари в 64. а пока скриншоты: для статистики шоп покороче взял два игрока(длл - просто клоны) про фейловый(там тестится зависание ИИ) длл отдельная песня...
0
|
|||||||||||||||
|
Just Do It!
|
||||||
| 09.03.2023, 09:50 | ||||||
|
ну и текущий код арбитра:
0
|
||||||
|
Just Do It!
|
|||||||
| 09.03.2023, 10:00 | |||||||
|
main.cpp
0
|
|||||||
|
Just Do It!
|
|
| 09.03.2023, 12:03 | |
|
1
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 09.03.2023, 13:41 | |
|
XLAT, тут еще все "вкурить" нужно...
Доска уже часть Бота ? Или все же интерфейс ? Если интерфейс, тогда почему он с методами и не в заголовке ? Для экспортных функций нужно поставить развернутые комментарии. (мне то понятно, но это вопрос приличия ) Еще один технический момент. Классы в dll разве не зависимы от компиляторов ? Добавлено через 46 минут Так о чем я, об общих интерфейсах клиента (ИИ) и доски. Разве это не могут быть абстрактные классы с конкретным интерфейсом, от которого для ИИ создается производный без ограничений. Так же и для поля. Для ИИ нужен будет только заголовок интерфейса, а что там будет за поле какого колена уже для ИИ неважно. Это возможно в dll в рамках одной аппаратной архитектуры ? А то получается что в ИИ вообще ничего нельзя добавить... Добавлено через 2 минуты Способ который я предлагал ранее, обязать каждый ИИ самому заботится о хранении ходов/доски и так далее. Тогда проблемы вообще нет никакой. Обычный обмен данными через функции со встроенными типами .
1
|
|
| 09.03.2023, 13:41 | |
|
Посоветуйте как улучшить код Посоветуйте, как улучшить код?
Подскажите какую игру можно написать в Делфи, не сильно сложную, не такую, как змейка, крестики-нолики, пинг-понг и т.д? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|