标题: [特效代码] [已解决]批处理怎样设计一个物体走动的思路? [打印本页]
作者: raymai97 时间: 2011-8-31 22:51 标题: [已解决]批处理怎样设计一个物体走动的思路?
标题不太会放~ 请版主帮忙修改下~
刚才去搜下了高手做的游戏,比如走迷宫,实在太强了,强到代码都看不懂,看来俺的技术有待加强啊~
ok,我自己想了一天,还是想不通,到底怎样才可以让一个物体走动?
是要用户按了某按键,才会动的,比如:
按下w,向上移一步
按下a,向左移一步
按下s,向下移一步
按下d,向右移一步
所谓“千里之行始于足下”,所以我先不奢望做什么迷宫了,现在就只想要知道这个要如何实现~
请高手指点啦!
作者: guaiwu 时间: 2011-8-31 23:06
要结合第三方命令行程序
参考:http://bbs.bathome.net/thread-3148-1-2.html
作者: raymai97 时间: 2011-8-31 23:17
回复 2# guaiwu
神马意思?我知道要用ckey,但是接受命令后也要物体会动啊~
作者: defanive 时间: 2011-8-31 23:21
回复 3# raymai97
很多游戏都有这段代码吧,简单一点就是把地图字符串中的空地的字符给换成人物的字符
作者: raymai97 时间: 2011-8-31 23:26 标题: 想爆头脑,终于想到一个比较可行的
还未debug,所以跑到太上、下、左、右会出问题,需要第三方软件ckey.exe
对了,还有个比较严重的问题:很闪,估计cls太多了- @echo off
- mode con cols=80 lines=25
- :now
- cls
- set line=8
- set echo=
- :now2
- set num=0
- cls
- :loop
- if "%line%"=="%num%" goto now3
- echo.
- set /a num+=1
- goto loop
- :now3
- echo.%echo%o
- ckey 38 40 37 39
- if errorlevel 4 set echo=%echo% &goto now2
- if errorlevel 3 set echo=%echo%&goto now2
- if errorlevel 2 set /a line+=1&goto now2
- if errorlevel 1 set /a line-=1&goto now2
复制代码
作者: raymai97 时间: 2011-8-31 23:30
回复 4# defanive
嗯,我会再尝试的~ 我刚刚做了一个(在5L),不过发现很闪,尤其是在下面的地方时,现在暂时用sleep来缓解这个情况~ 有什么比较好的方法么?
作者: guaiwu 时间: 2011-8-31 23:36
本帖最后由 guaiwu 于 2011-8-31 23:43 编辑
Cimt1.0、CKey2.1b文件夹里有教程。
仔细了解key.txt。
作者: guaiwu 时间: 2011-8-31 23:46
- @echo off
- title CKey Tool By Defanive
- echo 下面是CKey命令行工具的演示程序
- pause >nul
- cls
- echo 下面是更新手记:
- echo.
- echo 2.0至2.1b更新:
- echo.
- echo 一、修正了在其他窗口按键也会有效的BUG
- echo 二、修正了时间参数也会作为按键的BUG
- echo 三、修正了无效按键延迟的BUG
- echo 四、提高计时精确度
- pause>nul
- cls
- echo 下面的功能可以让用户进行键击选择:
- echo CKey t 键值1 键值2 键值3 ……
- echo 其中t为数字,计时停止的秒数,t=0则不限制
- echo 其中键值是数字,键盘上每个键都有对应的键值
- echo 详细可以参考Key.txt,也可参考ASCII码表
- echo A-Z的键值是65-90
- echo 下面将让您在A,B两个键中间选一个、
- echo CKey 0 65 66
- CKey 0 65 66
- echo 您选择的是第%errorlevel%号选项
- pause >nul
- cls
- echo 然而CKey的功能并不是如此简单
- echo 除此之外,CKey还支持特殊键
- echo 方向键、F1-F24等绝大多数键都支持
- echo 具体请查找Key.txt
- echo 下面将是方向键的演示,按Esc退出
- pause >nul
- :loop
- CKey 0 37 38 39 40 27
- cls
- if %errorlevel%==1 echo 您按下了左键
- if %errorlevel%==2 echo 您按下了上键
- if %errorlevel%==3 echo 您按下了右键
- if %errorlevel%==4 echo 您按下了下键
- if %errorlevel%==5 goto end
- goto loop
- :end
- cls
- echo 您按下了退出键
- pause >nul
- echo 演示结束,谢谢使用!
- pause >nul
复制代码
作者: raymai97 时间: 2011-8-31 23:46
回复 7# guaiwu
它附带的bat:- @echo off
- title Cimt Tool By Defanive
- echo 下面是Cimt命令行工具的演示程序
- pause>nul
- cls
- echo 下面的功能可以改变鼠标的位置:
- echo Cimt /mm X Y
- echo 将鼠标位置改变到(X,Y)
- echo.
- echo 下面将演示改变鼠标位置到(200,200)
- echo Cimt /mm 200 200
- pause>nul
- Cimt /mm 200 200
- pause>nul
- cls
- echo 下面的功能可以模拟一次鼠标单击:
- echo Cimt /mc N
- echo 其中N为数字
- echo 0为左键,1为右键,2为中键
- echo.
- echo 效果请自行查看
- pause>nul
- cls
- echo 下面的功能可以模拟一次键盘键击:
- echo Cimt /key N
- echo 其中N为数字
- echo 每个键都有对应的数值
- echo 请查看Key.txt文件
- echo.
- echo 效果请自行测试
- pause>nul
- cls
- echo 演示结束,谢谢使用!
- pause>nul
复制代码
附带的txt:键值列表:
A-Z 65-90
键盘0-9 48-57
特殊键值:
ENTER 13
SHIFT 16
CONTROL 17
MENU 18
PAUSE 19
CAPITAL 20
ESCAPE 27
SPACE 32
PRIOR 33
NEXT 34
END 35
HOME 36
LEFT 37
UP 38
RIGHT 39
DOWN 40
SELECT 41
PRINT 42
EXECUTE 43
SNAPSHOT 44
INSERT 45
DELETE 46
HELP 47
NUMPAD0 96
NUMPAD1 97
NUMPAD2 98
NUMPAD3 99
NUMPAD4 100
NUMPAD5 101
NUMPAD6 102
NUMPAD7 103
NUMPAD8 104
NUMPAD9 105
MULTIPLY 106
ADD 107
SEPARATOR 108
SUBTRACT 109
DECIMAL 110
DIVIDE 111
NUMLOCK 144
SCROLL 145
但我不懂到底有何关系?接受按钮信息?
作者: guaiwu 时间: 2011-8-31 23:51
不不不、
你参考我后发的- if %errorlevel%==1 echo 您按下了左键
- if %errorlevel%==2 echo 您按下了上键
- if %errorlevel%==3 echo 您按下了右键
- if %errorlevel%==4 echo 您按下了下键
复制代码
在if后面加上你要执行的。
作者: defanive 时间: 2011-9-1 00:02
本帖最后由 defanive 于 2011-9-1 02:29 编辑
- @echo off
- setlocal enabledelayedexpansion
- mode con: cols=40 lines=22
- for /l %%a in (1,1,400) do set "map=!map!█"
- set /a x=0,y=0
- :refresh
- set /a "p1=y*20+x","p2=p1+1"
- echo !map:~0,%p1%!●!map:~%p2%!
- ckey 37 38 39 40
- set /a "x+=(%errorlevel%%%2)*(%errorlevel%-2)","y+=((%errorlevel%-1)%%2)*(%errorlevel%-3)"
- goto refresh
复制代码
刚刚写了一段
这段是演示的传统思路,计算偏移将角色坐标处的字符替换成角色的字符
其实就算是按键返回值处理也有技巧
PS:我发现show变量根本是没用的,所以改掉了直接ECHO,速度非常快
作者: guaiwu 时间: 2011-9-1 01:09
- @echo off
- set /a zuo=0,shang=0,you=0,xia=0
- setlocal enabledelayedexpansion
- :refresh
- set /a "a=%zuo%/2"
- set /a "b=%shang%/2"
- for /l %%i in (1,1,%b%) do echo a
- for /l %%i in (1,1,%a%) do set/p=a <nul
- ckey 0 37 38 39 40
- if %errorlevel%==3 set /a zuo+=1
- if %errorlevel%==4 set /a shang+=1
- if %errorlevel%==1 set /a zuo-=1
- if %errorlevel%==2 set /a shang-=1
- cls
- goto refresh
复制代码
作者: ArdentMan 时间: 2011-9-1 18:17
楼主可参考此帖来写:
http://www.bathome.net/viewthrea ... highlight=%2Bbatman
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |