|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
||
Предпросчет возможных ходов в игре Nine Men's Morris (Мельница)23.12.2019, 08:46. Показов 3634. Ответов 33
Метки нет (Все метки)
Идея так себе, но неполный поиск в ширину даже на два хода тоже не сильно доставляет. Да и точность у него хромает. Пока склоняюсь к мысли просчета начальной стадии - выставления фишек. Дальше придется все же писать обход.
0
|
||
| 23.12.2019, 08:46 | |
|
Ответы с готовыми решениями:
33
Программа для вывода возможных ходов коня по клику на клетку шахматной доски Генерация ходов в настольной игре |
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
||||||||
| 26.12.2019, 10:42 [ТС] | ||||||||
|
Sun Serega,
Добавлено через 2 минуты Добавлено через 4 минуты И как можно красиво хранить значение из 5 байт информации? Ссылочные типы здесь не проходят.
0
|
||||||||
|
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
|||||||
| 27.12.2019, 01:04 | |||||||
|
И, что важнее, из за того что статичный массив это класс - BlockFileOf<T> сохранит в файл ссылку на этот массив, вместо содержимого (это из за алгоритма сохранения в файл, без него - будет так же медленно как и у file of T).Ну, а окошко которое вам выскакивает - это просто защита от дурака, чтоб классы и указатели и не пытались сохранить в типизированный файл, ничего хорошего из этого получиться не может.
Подробнее про отступы и [StructLayout(LayoutKind.Sequential)]:Процессору удобно читать память из оперативки - "словами". Для 32-битного процессора - слово это 32 бита, а для 64-битного - 64 бита. При чём, читать им удобно не из любой рандомной точки. Вся оперативная память разбита на эти слова, если читать int64 из pointer(80) - читает байты #80-#87 (всего 8 байт) как 1 слово. Но если читать из pointer(81) - процессору приходится читать байты #80-#87 и ещё #88-#85, потому что мимо слов нельзя. Ну и потом побитовыми сдвигами и т.п. резать эти слова чтоб получить отдельно те 8 байт из 16 прочитанных. (это всё пример, офигеть какой упрощённый. К примеру байты в районе pointer(80) вообще зарезервированы системой) Если читать число, размером меньше слова - читает всё равно 1 слово и потом режет, но это не проблема. Но если в записи находится 1 поле типа byte, а затем 1 поле типа int64 - получается int64 будет хранится мимо слова. Вот чтоб такого не было - обычно JIT компилятор смотрит на битность процессора на котором запустили .exe и вставляет нужный отступ между byte и int64. То есть 3 или 7 байт, которые вообще ничем никогда не заполняются и служат только чтоб процессору было удобнее читать. Но, кстати, в типизированный файл - эти пустые байты отступа тоже запишет, потому что BlockFileOf<T> копирует память целиком, 1 блоком, как она хранилась в оперативной памяти (отсюда название).Вообще, раз объём памяти в этом случае проблема - тот атрибут, убирающий отступы можно вставить во все записи. Но это, разумеется, ударит по производительности работы с этими данными.
2
|
|||||||
|
Alvin Seville
|
|||
| 27.12.2019, 13:26 | |||
0
|
|||
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
|
| 29.12.2019, 17:18 [ТС] | |
|
Есть пока сырющая версия с неполным обходом дерева решений (минимакс). Интерфейс, возможно, буду дорабатывать, также в коде много "строительных лесов" и заготовок для создания базы знаний.
По управлению, буде кто заинтересуется: Ход вводится в формате <откуда двигаем фишку?> <куда двигаем?> <кого в процессе едим?> Так, ввод "2 3 6" - ход из 2 в 3, съедается ячейка 6. Значения по умолчанию: -1 ("-1 2 -1" - ставим фишку на 2) Система управления позволяет жульничать, но всю ответственность за корректную работу в данной версии вы берете на себя. Замечания по коду (преимущественно тому, что сейчас задействован в работе) приветствуются. Во многом за этим и скидываю сюда: https://cloud.mail.ru/public/4ny2/4MbijA9MQ
0
|
|
|
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
||||||||||||||||
| 29.12.2019, 17:36 | ||||||||||||||||
|
Код лучше заливать куда то типа github-а. Он для этого и сделан. А ещё если залить файлы поверх того что есть - он показывает что именно изменилось (и это 1 из простейших фишек, вообще он много что умеет).
Добавлено через 13 минут По коду - из того что сразу видно: 1. Я уже говорил, статичные массивы реализованы как костыль, использующий динамичные. К примеру в GameFieldInfo.pas на строчке 8:
1) при первой же попытке запуска - вы увидите где индекс был 2. 2) можно делать как то так:
integer(team_red), то есть преобразование из boolean в integer - ничем не отличается от преобразования byte в integer, которое у вас было раньше.То есть внутреннее представление не меняется (true и byte(1) выглядят одинаково в памяти, и так же false и byte(0) ). Но размер значения увеличивается (и у byte и у boolean - размер 1 байт, а у integer - 4). Если принимать параметр как boolean - передать неправильное значение будет вообще невозможно. 2. Экономить память на стеке нет смысла, потому что размер стека задаётся при старте программы (или потока, если вы создаёте свои). Поэтому нет разницы, принимаете вы byte или integer параметром. Зато арифметика над числами меньше integer будет медленнее, потому что для операций вроде +-*/ и т.п. - числа меньше integer переводит в integer (или longword), а после операции - переводит назад. Содержимое массивов, других классов и статичных полей - хранится в куче. Но и ту память экономить - не к чему. При том что даже у самых убогих компов есть хотя бы 1 гигабайт оперативки - то что тип элементов elements из п.1. это byte - будет вообще незаметно. Зато операции -= и += на них будут медленнее.
1
|
||||||||||||||||
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
|
| 29.12.2019, 17:42 [ТС] | |
|
Sun Serega, какой-то путь вышел длинный, но попробую разобраться. Первый раз через консоль. Idea отучила совсем.
https://github.com/Ksardas178/... 1%86%D0%B0
0
|
|
|
Alvin Seville
|
||||||
| 29.12.2019, 17:49 | ||||||
|
Ksardas_178, Вы можете использовать директивы
1
|
||||||
|
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
||||||||||||||||||||||
| 29.12.2019, 18:58 | ||||||||||||||||||||||
Добавлено через 31 минуту В остальном просмотрел - код в целом неплохой. И явно лучше чем я ожидал, всё красиво разложено по полочкам и модулям. Некоторые вещи применены не к месту, но чтоб это понять - нужен только опыт (и желание разобраться как правильно использовать на себя принципы ООП). Из мелочей: 1. В некоторых местах (как GameBorders.pas) у вас модификаторы доступа только у половины имён. Не хорошо так. 2. GameMill.pas - если уже используете список, задавайте ему в конструкторе размер 3. А вообще раз размер не меняется - лучше использовать массив. 3. В основном файле у вас есть:
Ну а ещё, из древних потерянных техник комментирования:
А если сделать так:
(*) - раскомментирует области 1 и 3 и одновременно закомментирует область 2.
1
|
||||||||||||||||||||||
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
||||||
| 29.12.2019, 19:24 [ТС] | ||||||
|
Не совсем понял, как пользоваться регионами. После добавления
0
|
||||||
|
Alvin Seville
|
|
| 29.12.2019, 19:55 | |
|
Ksardas_178, должна. Сбоку слева появляется кнопка для сворачивания и разворачивания региона.
0
|
|
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
||
| 29.12.2019, 20:31 [ТС] | ||
|
0
|
||
|
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
||
| 30.12.2019, 13:40 | ||
1
|
||
|
58 / 42 / 21
Регистрация: 01.01.2018
Сообщений: 273
|
||
| 30.12.2019, 14:17 [ТС] | ||
|
Добавлено через 10 минут Все, разобрался, цикл не нужен
0
|
||
|
2355 / 1458 / 526
Регистрация: 07.04.2017
Сообщений: 4,798
|
|
| 30.12.2019, 15:32 | |
|
Да, цикл не нужен потому что 1 shl N это то же самое что Power(2, N), только для integer.
Ну а 256 это уже 2**8, то есть 256**(bytes-1) = (2**8)**(bytes-1) = 2 ** (8*(bytes-1)) = 1 shl (8*bytes-8). Добавлено через 24 минуты Но вообще стоит ещё упомянуть что у integer всего 32 бита, а значит формула 1 shl (8*bytes-8) будет работать только для bytes=1..4Если надо больше (1..8) - пишите int64(1) shl (8*bytes-8). Ну и ответ будет в виде int64.
0
|
|
| 30.12.2019, 15:32 | |
|
Помогаю со студенческими работами здесь
34
Как сделать систему ходов в карточной игре? Алгоритм для просчета допустимых ходов в игре нарды. Найти объем информации после 11 сделанных ходов в игре
Алгоритм получения всех вариантов ходов бота в карточной игре 101 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|