Автор |
Сообщение |
gluk |
|
Тема сообщения:
Отправлено: Янв 20, 2018 - 12:33 PM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
|
|
|
gluk |
|
Тема сообщения:
Отправлено: Мар 23, 2017 - 08:07 AM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
|
|
|
gluk |
|
Тема сообщения:
Отправлено: Мар 22, 2017 - 09:18 AM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
|
|
|
gluk |
|
Тема сообщения:
Отправлено: Мар 05, 2017 - 04:37 PM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
|
|
|
gluk |
|
Тема сообщения:
Отправлено: Мар 02, 2017 - 10:55 AM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
|
|
|
gluk |
|
Тема сообщения:
Отправлено: Фев 20, 2017 - 09:00 AM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
|
|
|
gluk |
|
Тема сообщения:
Отправлено: Фев 19, 2017 - 03:37 PM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
|
|
|
gluk |
|
Тема сообщения:
Отправлено: Фев 19, 2017 - 03:35 PM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
Я о том, что зачем преобразовывать позицию в 32-битное либо 64-битное число. Её можно просто скопировать в 32-байтный массив, а преобразование в индекс уже делать в оболочке. |
|
|
|
|
|
gluk |
|
Тема сообщения:
Отправлено: Фев 16, 2017 - 01:50 PM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
Ничего не понял. Позицию нужно просто скопировать в нужный формат. Причем предоставляются два формата на выбор.
Размерность базы возвращает Load(). Или ты о чем-то другом? |
|
|
|
|
|
gluk |
|
Тема сообщения:
Отправлено: Янв 21, 2017 - 12:37 PM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
А зачем такие сложности?
Не проще ли дать просто ссылку на Таблицу "board"?
У меня, на делфях миллион копирований в другой формат представления доски занимает 50 мс.
20 миллионов копирований в секунду.
А авторам движков намного проще - просто скопировал доску в нужный формат, вызвал функцию с сылкой на таблицу в этом формате, и получил значение.
И дополнительно нужна вторая функция возвращающая размерность ЭБ.
То есть прямого доступа к ЭБ нет, есть только две функция - первая возвращает оценку, вторая размерность ЭБ. |
|
|
|
|
|
gluk |
|
Тема сообщения:
Отправлено: Янв 13, 2017 - 01:09 PM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
В этой ветке предлагаю программистам обсуждать интерфейс для доступа к ЭБ. Так чтобы после согласования любой движок мог без всяких проблем использовать общую ЭБ, предоставляемую оболочкой.
Вот первый вариант интерфейса.
Код:
#define DB_DRAW 10000
#define DB_WIN 10001
#define DB_LOSE 10002
#define DB_UNKNOWN 10003
#define DB_NOT_FOUND 555555
// флаги для доступа к базе
#define DB_IN_MEMORY 1
// коды для обозначений шашек
#define EMPTY 1
#define WHITE 2
#define BLACK 4
#define KING 8
// т.е. код белой дамки - 10
struct EdBoard1
{
// все поля идут по порядку a8, c8, и т.д. до g1
unsigned char board[32];
};
struct EdBoard2
{
unsigned char *wman;
unsigned wman_cnt;
unsigned char *wkings;
unsigned wkings_cnt;
unsigned char *bman;
unsigned bman_cnt;
unsigned char *bkings;
unsigned bkings_cnt;
};
// интерфейсный класс для доступа к базам
struct EdAccess
{
// загрузить базы
unsigned Load() = 0;
// получить тип базы
char *GetBaseType() = 0;
// оценка позиции (всегда ход белых)
int GetResult(EdBoard1 *board, unsigned flags) = 0;
int GetResult(EdBoard2 *board, unsigned flags) = 0;
// получить указатель на таблицу по материалу
unsigned GetTable(unsigned wm, unsigned wk, unsigned bm, unsigned bk) = 0;
// получить указатель на таблицу по материалу и по наиболее продвинутой шашке
unsigned GetTable(unsigned wm, unsigned wk, unsigned bm, unsigned bk, unsigned rank) = 0;
// проверка загруженности таблицы целиком в память
unsigned IsTableInMemory(unsigned table);
// получить индекс в таблице
unsigned __int32 GetIndex(EdBoard1 *board) = 0;
unsigned __int32 GetIndex(EdBoard2 *board) = 0;
// получить оценку по указателю на таблицу и индексу
int GetResult(unsigned table, unsigned __int32 index, unsigned flags) = 0;
};
// функция интерфейса экспортируемая из dll
__declspec(dllexport) void __stdcall EI_EGDB(EdAccess *eda)
{
// здесь должен быть код
// сохраняющий указатель на интерфейс во внутренние переменные движка
// вызывающий загрузку базу?
}
Здесь я сомневаюсь по одному моменту. Хватит ли 32-х бит для индексирования больших таблиц?
Если нет, то стоит ли все базы индексировать 64-мя битами или для младших баз все-таки оставить 32 бита? |
|
|
|
|
|
SB |
|
Тема сообщения:
Отправлено: Янв 13, 2017 - 11:46 AM
|
|
Зарегистрирован: Дек 18, 2007
Сообщений: 2528
|
|
|
|
|
gluk |
|
Тема сообщения:
Отправлено: Янв 13, 2017 - 10:13 AM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
|
|
|
gluk |
|
Тема сообщения:
Отправлено: Янв 13, 2017 - 10:10 AM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
|
|
|
gluk |
|
Тема сообщения:
Отправлено: Янв 12, 2017 - 02:09 PM
|
|
Зарегистрирован: Июнь 08, 2005
Сообщений: 2337
|
|
|
|
|
|