> 1 <

Автор Сообщение

fumoffu

Members


Статус

1 сообщений

Где: ---
Род занятий:
Возраст:

#406   2009-06-14 20:51 GMT+3 часа(ов)      
Доброго времени суток !
Есть задача написать игру морской бой , в качестве второго игрока - разработанный микро AI на Лиспе. Нужна помощь в том как организовать отображение игровых полей и осуществить пользовательский ввод . Другими словами как создать консольное приложение под Windows. Гуру Лиспа подскажите

FreeV

Members


Статус

52 сообщений

Где: Russia astral
Род занятий:
Возраст:

#407   2009-06-15 20:58 GMT+3 часа(ов)      
Если важен интерфейс, то попробуйте библиотеку cl-ncurses, предоставляющую uffi-биндинги на юниксовую libncurses. Есть ли в винде аналоги libncurses и может ли с ними работать cl-ncurses - не знаю, но всегда можно заюзать cygwin (кстати, неплохо запускать и сам интерпретатор под cygwin'ом)

Если красявый интерфейс не важен, то можно работать в режиме диалога с интерпретатором.
Когда я начинал изучать язык, сам писал такую штуку. С помощью функции (read) считывались параметры хода, после чего отрисовывалось поле с результатом моего хода, и, если я не подорвался, дальше ходил компьютер.
Компьютер (то, что вы так громко назвали AI ) действовал по правилам, которыми руководствуется человек, играя в морской бой, и сделать это очень просто.

Удачи ;)

gihar

Moderators


Статус

249 сообщений

Где: --- да вот он я? приехал уже из Катманду
Род занятий: конкретный
Возраст: 0

#517   2009-07-17 13:35 GMT+3 часа(ов)      
ПОДКЛЮЧИ НУЖНУЮ БИБЛИОТЕКУ KERNEL32.dll

(in-package :win32)
;;;------------------------------------------------
#! (:library "Kernel32" :export t ascal "WINAPI")
BOOL WINAPI Beep(DWORD sdrfd, DWORD badkf);

BOOL WINAPI AllocConsole();
BOOL WINAPI FreeConsole();
LPTSTR WINAPI GetCommandLineA();
DWORD WINAPI lstrlenA(LPCTSTR);
BOOL WINAPI FlushConsoleInputBuffer(HANDLE hConsoleInput );
BOOL WINAPI SetConsoleMode( HANDLE hConsoleHandle, DWORD dwMode);

BOOL WINAPI ReadConsoleA(HANDLE hConsoleInput, LPVOID lpBuffer,
DWORD nNumberOfCharsToRead, LPDWORD lpNumberOfCharsRead, LPVOID lpReserved);
BOOL WINAPI WriteConsoleA(HANDLE hConsoleOutput, CONST VOID *lpBuffer,
DWORD nNumberOfCharsToWrite, LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved);

BOOL WINAPI ReadConsoleW(HANDLE hConsoleInput, LPVOID lpBuffer,
DWORD nNumberOfCharsToRead, LPDWORD lpNumberOfCharsRead, LPVOID lpReserved);

BOOL WINAPI WriteConsoleW(HANDLE hConsoleOutput, CONST VOID *lpBuffer,
DWORD nNumberOfCharsToWrite, LPDWORD lpNumberOfCharsWritten, LPVOID lpReserved);

HANDLE WINAPI GetStdHandle(DWORD nStdHandle);
;;;------------------------------------------------
#define STD_INPUT_HANDLE (/*(DWORD)-10*/ 0xfffffff6)
#define STD_OUTPUT_HANDLE (/*(DWORD)-11*/ 0xfffffff5)
#define STD_ERROR_HANDLE (/*(DWORD)-12*/ 0xfffffff4)
;;;------------------------------------------------
!#
;;;;-----------------------------------
;;;;---------- MAIN ------------------MAIN
;;;;-----------------------------------

( defun main()


( win:AllocConsole ) ;;; выделить консоль

;;;;----
( let ( (buffer (ct:malloc 1024 ))
( output-handle (win:GetStdHandle win:STD_OUTPUT_HANDLE ))
( input-handle (win:GetStdHandle win:STD_INPUT_HANDLE ))
( cnsl-num-ptr ( ct:malloc (ct:sizeof 'winWORD )) )

)
;;;;;-----------COMMAND LINE-----------GET
( setq buffer ( win:GetCommandLine ) )
( setq lispLine (ct:c-string-to-lisp-string buffer))

;;; WriteConsole - что нить записать в консоль
( win:WriteConsole output-handle (ct:lisp-string-to-c-string lispLine)( Length lispLine) cnsl-num-ptr ct:null )

;;; ReadConsole читать буффер ввода ( тут aж 1024 байтов читает )
( win:ReadConsole input-handle buffer 1024 cnsl-num-ptr ct:null )
)
;;;;---
( win:FreeConsole) ;; освободить консоль ;;;;---
( win:exitprocess 0 )
;;;;---

;;;;---
)
Это было точно последнее редактирование

gihar

Moderators


Статус

249 сообщений

Где: --- да вот он я? приехал уже из Катманду
Род занятий: конкретный
Возраст: 0

#518   2009-07-17 13:41 GMT+3 часа(ов)      
Загрузка
(load "D:/LISP/First_console.lisp")
Компиляция
(ccl:save-application "console-main" #'main sole nil :static t)

Это для Corman Lisp
Это было точно последнее редактирование
> 1 <


Онлайн :

0 пользователь(ей), 23 гость(ей) :




Реклама на сайте: