其实就是CLGO语言内置了CAPI.DLL,只有19KB,但比批处理功能强很多。运行速度是批处理的5倍,适合做控制台游戏开发。总之CAPI能做到,CAPIS脚本解释器都能做,并且CAPIS不需要cmd也能运行,支持直接拖拽运行脚本。由于之前已经开源了CLGO解释的代码,就不再重复贴码了,只是内嵌了一个capi而已。 | 控制台C版API调用解释器,支持IF~ELIF、WHILE、FOR等条件循环语句,可用的内建命令 | | 有"CAPI", "LINK", "STOP", "EXIT", "WAIT", "PAUSE", "PRINT", "LETS", "CLEAN", "CLS"。 | | | | 可以实现跟CAPI完全一样的API调用效果,但比CAPI的批处理速度快5倍。非常接近原生C语言的速度,且支持浮点数,表达式类传参。COPY |
下载:http://bcn.bathome.net/s/tool/index.html?key=CAPIS
简单的应用,弹出对话框: | FUN MAIN | | LINK L"USER32" L"KERNEL32" | | CAPI =MessageBoxW 0 L"你好" L"message" 1COPY |
控制台图显: | FUN DRAW :HICON :HCMD :HDC | | LINK L"USER32" L"KERNEL32" | | CAPI :HICON=LoadImageW 0 L"1.ico" 1 0 0 16 | | CAPI :HCMD =GetConsoleWindow | | CAPI :HDC =GetDC :HCMD | | FOR ::A 1 1000 | | [ | | CAPI =DrawIconEx :HDC ::A*2 0 :HICON 128 128 0 0 3 | | CAPI =Sleep 20 | | CLEAN | | CLS | | ] | | | | FUN MAIN | | DRAW 0 0 0 | | PAUSECOPY |
当然非常推荐使用开源的tincs,它才是能在批处理中原生书写C代码的解释器http://www.bathome.net/thread-42497-1-2.html
类似功能的还有ICMD,一个还在完善的项目,http://www.bathome.net/thread-43259-1-1.html
ICMD脚本,挖地道 | ::***************************************************************************** | | @IF [%1]==[] ("%~DP0ICMD.EXE" /C "%~F0" 1&EXIT)&@REM ICMD SCRIPT 2017~2019 | | ::***************************************************************************** | | | | @echo off | | | | set/f=LinkDllW L"USER32" L"KERNEL32" L"MSVCRT" | | | | set/f hIcon0=LoadImageW 0 L"graphcs\_p0.ico" 1 0 0 16 | | set/f hIcon1=LoadImageW 0 L"graphcs\_p1.ico" 1 0 0 16 | | set/f hIcon2=LoadImageW 0 L"graphcs\_p2.ico" 1 0 0 16 | | set/f hIcon3=LoadImageW 0 L"graphcs\_p3.ico" 1 0 0 16 | | set/f wIcon =LoadImageW 0 L"graphcs\_b.ico" 1 0 0 16 | | set/f bIcon =LoadImageW 0 L"graphcs\_w.ico" 1 0 0 16 | | | | set/f hCMD =GetConsoleWindow | | set/f hDC =GetDC %hCMD% | | | | REM 绘制背景地图 | | for /l %%i in (0,32,800) do ( | | for /l %%j in (0,32,600) do ( | | set/f =DrawIconEx %hDC% %%i %%j %bIcon% 32 32 0 0 3 | | ) | | ) | | | | REM 绘制起点人物 | | set/a "X=0,Y=0, hIcon=hIcon3" | | set/f =DrawIconEx %hDC% %X% %Y% %hIcon% 32 32 0 0 3 | | | | REM 循环读取按键 | | :LOOP | | SET/A "PREX=X, PREY=Y" | | set/f key=_getch | | if %key% geq 97 (set/a key-=32) | | if %key% equ 87 (set/a Y-=32,hIcon=hIcon1) | | if %key% equ 83 (set/a Y+=32,hIcon=hIcon3) | | if %key% equ 65 (set/a X-=32,hIcon=hIcon0) | | if %key% equ 68 (set/a X+=32,hIcon=hIcon2) | | set/f =DrawIconEx %hDC% %PREX% %PREY% %wIcon% 32 32 0 0 3 | | set/f =DrawIconEx %hDC% %X% %Y% %hIcon% 32 32 0 0 3 | | goto LOOPCOPY |
|