Board logo

标题: [特效代码] [已解决]批处理怎样设计一个物体走动的思路? [打印本页]

作者: 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太多了
  1. @echo off
  2. mode con cols=80 lines=25
  3. :now
  4. cls
  5. set line=8
  6. set echo=      
  7. :now2
  8. set num=0
  9. cls
  10. :loop
  11. if "%line%"=="%num%" goto now3
  12. echo.
  13. set /a num+=1
  14. goto loop
  15. :now3
  16. echo.%echo%o
  17. ckey 38 40 37 39
  18. if errorlevel 4 set echo=%echo% &goto now2
  19. if errorlevel 3 set echo=%echo%&goto now2
  20. if errorlevel 2 set /a line+=1&goto now2
  21. 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

  1. @echo off
  2. title CKey Tool By Defanive
  3. echo 下面是CKey命令行工具的演示程序
  4. pause >nul
  5. cls
  6. echo 下面是更新手记:
  7. echo.
  8. echo 2.0至2.1b更新:
  9. echo.
  10. echo 一、修正了在其他窗口按键也会有效的BUG
  11. echo 二、修正了时间参数也会作为按键的BUG
  12. echo 三、修正了无效按键延迟的BUG
  13. echo 四、提高计时精确度
  14. pause>nul
  15. cls
  16. echo 下面的功能可以让用户进行键击选择:
  17. echo CKey t 键值1 键值2 键值3 ……
  18. echo 其中t为数字,计时停止的秒数,t=0则不限制
  19. echo 其中键值是数字,键盘上每个键都有对应的键值
  20. echo 详细可以参考Key.txt,也可参考ASCII码表
  21. echo A-Z的键值是65-90
  22. echo 下面将让您在A,B两个键中间选一个、
  23. echo CKey 0 65 66
  24. CKey 0 65 66
  25. echo 您选择的是第%errorlevel%号选项
  26. pause >nul
  27. cls
  28. echo 然而CKey的功能并不是如此简单
  29. echo 除此之外,CKey还支持特殊键
  30. echo 方向键、F1-F24等绝大多数键都支持
  31. echo 具体请查找Key.txt
  32. echo 下面将是方向键的演示,按Esc退出
  33. pause >nul
  34. :loop
  35. CKey 0 37 38 39 40 27
  36. cls
  37. if %errorlevel%==1 echo 您按下了左键
  38. if %errorlevel%==2 echo 您按下了上键
  39. if %errorlevel%==3 echo 您按下了右键
  40. if %errorlevel%==4 echo 您按下了下键
  41. if %errorlevel%==5 goto end
  42. goto loop
  43. :end
  44. cls
  45. echo 您按下了退出键
  46. pause >nul
  47. echo 演示结束,谢谢使用!
  48. pause >nul
复制代码

作者: raymai97    时间: 2011-8-31 23:46

回复 7# guaiwu


    它附带的bat:
  1. @echo off
  2. title Cimt Tool By Defanive
  3. echo 下面是Cimt命令行工具的演示程序
  4. pause>nul
  5. cls
  6. echo 下面的功能可以改变鼠标的位置:
  7. echo Cimt /mm X Y
  8. echo 将鼠标位置改变到(X,Y)
  9. echo.
  10. echo 下面将演示改变鼠标位置到(200,200)
  11. echo Cimt /mm 200 200
  12. pause>nul
  13. Cimt /mm 200 200
  14. pause>nul
  15. cls
  16. echo 下面的功能可以模拟一次鼠标单击:
  17. echo Cimt /mc N
  18. echo 其中N为数字
  19. echo 0为左键,1为右键,2为中键
  20. echo.
  21. echo 效果请自行查看
  22. pause>nul
  23. cls
  24. echo 下面的功能可以模拟一次键盘键击:
  25. echo Cimt /key N
  26. echo 其中N为数字
  27. echo 每个键都有对应的数值
  28. echo 请查看Key.txt文件
  29. echo.
  30. echo 效果请自行测试
  31. pause>nul
  32. cls
  33. echo 演示结束,谢谢使用!
  34. 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

不不不、
你参考我后发的
  1. if %errorlevel%==1 echo 您按下了左键
  2. if %errorlevel%==2 echo 您按下了上键
  3. if %errorlevel%==3 echo 您按下了右键
  4. if %errorlevel%==4 echo 您按下了下键
复制代码
在if后面加上你要执行的。
作者: defanive    时间: 2011-9-1 00:02

本帖最后由 defanive 于 2011-9-1 02:29 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. mode con: cols=40 lines=22
  4. for /l %%a in (1,1,400) do set "map=!map!█"
  5. set /a x=0,y=0
  6. :refresh
  7. set /a "p1=y*20+x","p2=p1+1"
  8. echo !map:~0,%p1%!●!map:~%p2%!
  9. ckey 37 38 39 40
  10. set /a "x+=(%errorlevel%%%2)*(%errorlevel%-2)","y+=((%errorlevel%-1)%%2)*(%errorlevel%-3)"
  11. goto refresh
复制代码
刚刚写了一段
这段是演示的传统思路,计算偏移将角色坐标处的字符替换成角色的字符
其实就算是按键返回值处理也有技巧

PS:我发现show变量根本是没用的,所以改掉了直接ECHO,速度非常快
作者: guaiwu    时间: 2011-9-1 01:09

  1. @echo off
  2. set /a zuo=0,shang=0,you=0,xia=0
  3. setlocal enabledelayedexpansion
  4. :refresh
  5. set /a "a=%zuo%/2"
  6. set /a "b=%shang%/2"
  7. for /l %%i in (1,1,%b%) do echo a
  8. for /l %%i in (1,1,%a%) do set/p=a <nul
  9. ckey 0 37 38 39 40
  10. if %errorlevel%==3 set /a zuo+=1
  11. if %errorlevel%==4 set /a shang+=1
  12. if %errorlevel%==1 set /a zuo-=1
  13. if %errorlevel%==2 set /a shang-=1
  14. cls
  15. goto refresh
复制代码

作者: ArdentMan    时间: 2011-9-1 18:17

楼主可参考此帖来写:
http://www.bathome.net/viewthrea ... highlight=%2Bbatman




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2