Kallisto

Ответы в темах

Просмотр 15 сообщений - с 481 по 495 (из 728 всего)
  • Автор
    Сообщения
  • в ответ на: Потокол DamExchange #366240
    Kallisto
    Участник

    Может нам кто-нибудь поможет перевести комментарии?


    // DamExchange

    // DamExchange protocol versie 1, DLL implementatie versie 1.15

    // dxpccall.h -- API interface voor DXP.DLL versie 1.15 (Windows 98/Me/2000/XP)
    // Laatste update: 07-Jan-2004
    // Copyright (c) 1997-2004 F.G.A. Mesander


    //
    // Gebruik deze include file DXPCCALL.H in de C sources die onderstaande functies aanroepen
    // Link het damprogramma aan DXP.LIB
    // Op deze wijze gebruikt het programma de functies uit DXP.DLL
    // Deze include file behoeft (dient) niet aangepast te worden
    // DXP.DLL en MSVCRT.DLL moeten in dezelfde directory als de EXE file staan, of in WINDOWSSYSTEM


    //
    // Ontwikkeld en getest met Microsoft Visual C++ 6.0, Service Pack 5
    //



    #ifdef __cplusplus
    extern "C" {
    #endif

    #ifdef DXP_DLL_COMPILE
    #define DXPAPI __declspec(dllexport)
    #else
    #define DXPAPI __declspec(dllimport)
    #endif


    // DXP.DLL implementeert 6 functies waarmee damprogramma's via DamExchange kunnen communiceren

    // Functies voor het maken van een verbinding
    // dxp_oldremote_connect (oud REMOTE protocol, niet gebruiken voor nieuwe implementaties)
    // dxp_socket_connect (maak verbinding voor laag 1 SOCKET protocol)
    // dxp_nulmodem_connect (maak verbinding voor laag 1 NULMODEM protocol)

    // Functie voor het verbreken van een verbinding
    // dxp_disconnect (verbreek de verbinding ongeacht het laag 1 protocol)

    // Functies voor het verzenden en ontvangen van een DamExchange bericht
    // Het verzenden en ontvangen vindt asynchroon plaats
    // dxp_send_message (zend een DamExchange bericht ongeacht de soort verbinding)
    // dxp_receive_message (ontvang een DamExchange bericht ongeacht de soort verbinding)


    // Voordat een DamExchange bericht verzonden of ontvangen kan worden moet eerst een verbinding
    // gemaakt worden met een van de 'connect' functies. De 'connect' functies moeten zolang zij
    // de return waarde -1 teruggeven herhaald (in een loop) aangeroepen worden. Dit is o.a.
    // bedoeld om in het damprogramma een Cancel dialoog box te kunnen implementeren.
    // Een return waarde kleiner dan -1 geeft aan dat er een fout is opgetreden.
    // De return code is 0 indien de verbinding succesvol tot stand gebracht is.

    // Bij de 'connect' functies moet als eerste parameter een connection id meegegeven worden. De connection
    // id geeft aan welke 'logische' verbinding opgezet moet worden. Connection id kan 0, 1 of 2 zijn
    // omdat deze DLL ondersteuning biedt voor 3 gelijktijdige DamExchange verbindingen.
    // Het is de taak van het aanroepende damprogramma om dxp_disconnect() aan te roepen met
    // dezelfde connection id als waarmee de verbinding tot stand gebracht is.

    // Bij de 'connect' functies wordt in twee parameters meegegeven welke user notify-message (parameter
    // dxpusrmsg) naar welk window (parameter hwnd) gestuurd moet worden bij ontvangst van een
    // DamExchange bericht of bij het wegvallen van de verbinding.
    // Op deze manier hoeft het damprogramma niet in een loop te testen of een nieuw
    // DamExchange bericht ontvangen is. Bij ontvangst van de notify-message in het damprogramma
    // bevat wParam het type DamExchange bericht (DXP_GAMEREQ..DXP_CONNECTIONLOST) en lParam de
    // connection id.




    // Connect via commpoort, voor oude REMOTE interface, niet meer gebruiken voor nieuwe programma's
    // Parameters:
    // connection_id nummer van de logische verbinding, 0, 1 of 2
    // commport nummer van de comm poort op de PC
    // hwnd handle van het window dat de notify-messages moet ontvangen
    // dxpusrmsg notify-message, normaal gesproken WM_USER + n
    DXPAPI int dxp_oldremote_connect(int connection_id, int commport, HWND hwnd, UINT dxpusrmsg);

    // Connect of listen via TCP/IP, voor DamExchange/SOCKET protocol
    // Parameters:
    // connection_id nummer van de logische verbinding, 0, 1 of 2
    // ip ip adres waarnaar geconnect moet worden, bijvoorbeeld "192.140.78.6";
    // gebruik "127.0.0.1" als geconnect moet worden naar een damprogramma
    // op dezelfde computer;
    // door als parameter 0, NULL of een lege string te geven, wordt gewacht op
    // een connect door het andere damprogramma (listen functie)
    // hwnd handle van het window dat de notify-messages moet ontvangen
    // dxpusrmsg notify-message, normaal gesproken WM_USER + n
    DXPAPI int dxp_socket_connect(int connection_id, char *ip, HWND hwnd, UINT dxpusrmsg);

    // Connect via commpoort, voor DamExchange/NULMODEM protocol
    // Parameters:
    // connection_id nummer van de logische verbinding, 0, 1 of 2
    // commport nummer van de comm poort op de PC
    // hwnd handle van het window dat de notify-messages moet ontvangen
    // dxpusrmsg notify-message, normaal gesproken WM_USER + n
    DXPAPI int dxp_nulmodem_connect(int connection_id, int commport, HWND hwnd, UINT dxpusrmsg);



    // Functie voor het verbreken van de verbinding met connection_id
    // Het maakt niet uit met welke van de drie 'connect' functies de verbinding tot stand was gebracht als
    // maar wel dezelfde connection id wordt gebruikt.
    // Parameters:
    // connection_id nummer van de logische verbinding, 0, 1 of 2
    DXPAPI void dxp_disconnect(int connection_id);



    // Bij ontvangst van de notify-message in het damprogramma bevat wParam het type DamExchange
    // bericht (DXP_GAMEREQ..DXP_CONNECTIONLOST) en lParam de connection id.
    // Op ontvangst van de notify-message moet in het damprogramma met de functie dxp_receive_message()
    // de inhoud van het DamExchange bericht geplaatst worden in een variabele van type DXP_MESSAGE.
    // Dit geldt niet als wParam bij de notify-message DXP_CONNECTIONLOST is. In dat geval is de verbinding
    // met de connection id (in lParam) verbroken.


    // Define's om het DamExchange bericht-type te identificeren.
    // Tevens de waarde van wParam bij de user notify-message
    #define DXP_GAMEREQ 1
    #define DXP_GAMEACC 2
    #define DXP_MOVE 3
    #define DXP_GAMEEND 4
    #define DXP_CHAT 5
    #define DXP_BACKREQ 6
    #define DXP_BACKACC 7
    #define DXP_OLDREMOTE 99
    #define DXP_CONNECTIONLOST 100 // geen DamExchange bericht-type

    // Maximale lengte van de naam van een damprogramma (exclusief terminating '').
    #define MAX_DXP_PROGRAMMA_NAAM_LEN 32

    // Maximale lengte van een CHAT regel (exclusief terminating '').
    #define MAX_DXP_CHAT_REGEL_LEN 126


    #pragma pack(1)

    typedef
    struct tagDXP_MESSAGE
    {
    int dxp_message_type; // DXP_GAMEREQ .. DXP_BACKACC, DXP_OLDREMOTE
    union
    {
    struct // DXP_GAMEREQ
    {
    short int versie; // versie van DamExchange, huidige versie is 1
    char naam_initiator[MAX_DXP_PROGRAMMA_NAAM_LEN + 1]; // ASCIIZ string
    char kleur_volger; // 'W' of 'Z' voor wit resp. zwart
    short int denktijd; // in minuten voor de hele partij
    short int aantal_zetten; // voor de hele partij
    char kleur_aan_zet; // 'W' of 'Z' voor wit resp. zwart
    char beginstand[50]; // 'e', 'w', 'z', 'W', 'Z'
    } dxp_gamereq;

    struct // DXP_GAMEACC
    {
    char naam_volger[MAX_DXP_PROGRAMMA_NAAM_LEN + 1]; // ASCIIZ string
    short int acceptatie_code; // 0, 1, 2 of 3
    } dxp_gameacc;

    struct // DXP_MOVE
    {
    short int tijd; // in seconden
    short int begin_veld; // 1..50
    short int eind_veld; // 1..50
    short int aantal_geslagen; // 0..20
    short int geslagen_stukken[20]; // elk 1..50
    } dxp_move;

    struct // DXP_GAMEEND
    {
    short int reden; // 0, 1 of 2
    short int stop_code; // 0 of 1
    } dxp_gameend;

    struct // DXP_CHAT
    {
    char chat_regel[MAX_DXP_CHAT_REGEL_LEN + 1];
    } dxp_chat;

    struct // DXP_BACKREQ
    {
    short int zet_nummer; // 1..999
    char kleur_aan_zet; // 'W' of 'Z' voor wit resp. zwart
    } dxp_backreq;

    struct // DXP_BACKACC
    {
    short int acceptatie_code; // 0, 1 of 2
    } dxp_backacc;

    struct // DXP_OLDREMOTE
    {
    short int begin_veld; // 1..50
    short int eind_veld; // 1..50
    short int aantal_geslagen; // 0..20
    short int geslagen_stukken[20]; // elk 1..50
    } dxp_oldremote;

    };
    } DXP_MESSAGE;

    #pragma pack()



    // Bij ontvangst van de notify message moet de volgende functie aangeroepen worden.
    // Test echter eerst op de waarde van wParam op gelijkheid met DXP_CONNECTIONLOST, in dat
    // geval moet deze functie niet aangeroepen worden.
    // Als de functie wordt aangeroepen terwijl er geen DamExchange bericht binnengekomen is,
    // is p_dxp_message->dxp_message_type na aanroep van de functie gelijk aan 0.
    // De functie mag aangeroepen worden met als tweede parameter NULL om het binnengekomen
    // DamExchange bericht op te halen maar verder te negeren.
    // Deze functie returnt onmiddellijk, ongeacht of wel of geen DamExchange bericht binnen is.
    // Parameters:
    // connection_id nummer van de logische verbinding (0, 1 of 2), dus aanroepen met de
    // waarde van lParam bij ontvangst van de notify message
    // p_dxp_message de struct is na aanroep van de functie gevuld met de complete
    // informatie van het ontvangen DamExchange bericht of met
    // p_dxp_message->dxp_message_type gelijk aan 0
    // de struct hoeft niet geinitialiseerd te worden voor aanroep van de functie
    DXPAPI void dxp_receive_message(int connection_id, DXP_MESSAGE *p_dxp_message);



    // Het verzenden van een DamExchange bericht.
    // Deze functie returnt onmiddellijk, het DamExchange bericht wordt asynchroon verzonden.
    // Parameters:
    // connection_id nummer van de logische verbinding, 0, 1 of 2
    // p_dxp_message de struct moet voor aanroep van de functie gevuld worden met de complete
    // informatie van een DamExchange bericht, de inhoud van de struct wordt
    // door deze aanroep niet gewijzigd
    DXPAPI void dxp_send_message(int connection_id, DXP_MESSAGE *p_dxp_message);


    #ifdef __cplusplus
    }
    #endif

    Возможно есть что-то важное в комментариях. А может и нет :)
    Но все равно лучше это прочитать перед тем как делать.

    в ответ на: Бразильская Каллисто #366223
    Kallisto
    Участник

    Каллисто — это в первую очередь игровая программа. И оценка нужна всего лишь для того, чтобы выбрать ход. Но все равно не очень понятно о чем идет речь. Покажите конкретную позицию. И чем не устраивает оценка.

    Нотации не будет. Главный вариант возможно добавлю когда-нибудь.

    в ответ на: Турнир среди шашечных программ #361852
    Kallisto
    Участник

    Можно следить за скоростью движка. Если она значительно падает, то значит не хватает памяти.

    в ответ на: Открылся сайт Каллисто #364169
    Kallisto
    Участник

    Игорь, при разыгрывании матча Каллисто2.01.02-Каллисто2.01.02 с временем 10+10 и ЭБ6 в первом же дебюте на первом ходу опять выскочила ошибка moves not found!
    Первый дебют был . a7e5
    Приходится нажимать ок, потом игра продолжается потом опять moves not found, опять ok и т.д.

    Напишите мне об этом в письме. У меня сыграно уже более 500 партий и все нормально.

    в ответ на: Потокол DamExchange #366239
    Kallisto
    Участник

    Загрузил архив dxp.zip с dll и проч. Выяснилось, что самое то, что нужно (описание в dxpccall.h) опять на голландском :) Игорь, может и это Вы где-нибудь на английском встречали?

    Нет. Может быть стоит завести отдельный топик по протоколу DamExchange и там обсуждать все технические вопросы?

    в ответ на: Открылся сайт Каллисто #364166
    Kallisto
    Участник

    1. Может именно отсутствие шашек на d e поможет?

    Вряд ли такой упрощенный вариант поможет.
    Но можно попробовать.

    в ответ на: Открылся сайт Каллисто #364164
    Kallisto
    Участник

    В fly.dat — все начальные позиции из летающих шашек (те что были в xls на этом сайте). Может быть я парочку явно перекошенных удалил. Уже не помню.

    в ответ на: Открылся сайт Каллисто #364163
    Kallisto
    Участник

    Подумать над этой позицией явно стоит. На первый взгляд кажется идея о потере связи между флангами может оказаться полезной. Как бы ее формализовать получше?

    Матч Каллисто2.01.02-Каллисто_2_log делать не надо, т.к. это все одна и та же версия Каллисто 2. Только с включенным логом + исправлена ошибка с пондерингом.

    в ответ на: Открылся сайт Каллисто #364160
    Kallisto
    Участник

    Мне кажется, немного надо ограничить Каллисто от рискованных ходов.
    Хотя, возможно, турнирная версия Каллисто будет свободна от этого недостатка. 😉
    Игорь, размер последнего движка поражает воображение. Вы уверены, что ничего там не усекли, не убрали ничего лишнего/нужного?
    116 kb, совсем ничего не осталось … 😯

    Рискованный ход — это человеческая оценка. Программа рассуждает совсем иначе. Размер зависит только от компилятора, и он мог быть в несколько раз меньше.

    в ответ на: Открылся сайт Каллисто #364159
    Kallisto
    Участник


    Это видимо та редкая позиция, когда стратегия окружения не проходит. Как это объяснить программе?

    в ответ на: Турнир среди шашечных программ #361849
    Kallisto
    Участник

    Лучше с 5-кой, но без свопинга :)

    в ответ на: Открылся сайт Каллисто #364157
    Kallisto
    Участник

    Если сбой случается во время турнира, то оператор восстанавливает работоспособность программы (ее часы в это время идут) и продолжает с проблемной позиции.

    На угаданные ходы Каллисто вовсе не отвечает мгновенно.

    Выслал исправленную версию. Ошибка была из-за того, что во время угадывания возможного продолжения Каллисто дошла до позы, где у Дамиры нет шашек и не смогла корректно вернуться.

    в ответ на: Турнир среди шашечных программ #361847
    Kallisto
    Участник

    А что был свопинг? Это нехорошо.

    в ответ на: Открылся сайт Каллисто #364155
    Kallisto
    Участник

    В режиме партии удалось воспроизвести проблему :)
    Проблема в пондеринге. Когда-то я ее уже исправлял. Попробую исправить еще раз :)

    в ответ на: Открылся сайт Каллисто #364154
    Kallisto
    Участник

    Посмотрел в режиме анализа все хорошою. Видимо опять пондеринг :(
    Послал версию с логами. Если будут еще проблемы присылайте логи.

    Если сдаетесь или ничья, то просто начинайте новую партию. Автобой будет не очень удобно.

Просмотр 15 сообщений - с 481 по 495 (из 728 всего)