Board logo

标题: [游戏娱乐] 批处理数字拼图双人PK游戏 [打印本页]

作者: netbenton    时间: 2009-6-7 13:09     标题: 批处理数字拼图双人PK游戏

把图表拼成
123
456
78  
为赢。
可以供两人同时玩
  1. @echo off
  2. set ec3=                          批处理拼图比赛
  3. set ec4=        靓女                                              靓仔
  4. set ec5=    ┍=┯=┯=┐                                        ┍=┯=┯=┐
  5. set ec6=    │!b1!│!b2!│!b3!│                                        │!a1!│!a2!│!a3!│
  6. set ec7=    ┝=┿=┿=┥                                        ┝=┿=┿=┥
  7. set ec8=    │!b4!│!b5!│!b6!│                                        │!a4!│!a5!│!a6!│
  8. set ec9=    ┝=┿=┿=┥                                        ┝=┿=┿=┥
  9. set ec10=    │!b7!│!b8!│!b9!│                                        │!a7!│!a8!│!a9!│
  10. set ec11=    ┕=┷=┷=┙                                        ┕=┷=┷=┙
  11. set ec12=上W,下S,左A,右D                                     用方向键控制
  12. set ec13=                          按 Esc 键退出
  13. set ec14= !msg!
  14. set ec15= !msg1!
  15. set ec16= !msg2!
  16. set ec17= !msg3!
  17. set Namea=靓仔
  18. set Nameb=靓女
  19. chcp 437 >nul
  20. graftabl 936>nul
  21. (echo e 100 B8 00 00 CD 16 88 E0 B4 4C CD 21
  22. echo r cx
  23. echo b
  24. echo n in.com
  25. echo w
  26. echo q)|debug>nul
  27. set com80=if !m! gtr 1 set /a m-=1
  28. set com72=if !m! lss 3 set /a m+=1
  29. set com77=if !n! gtr 1 set /a n-=1
  30. set com75=if !n! lss 3 set /a n+=1
  31. set com31=if !x! gtr 1 set /a x-=1
  32. set com17=if !x! lss 3 set /a x+=1
  33. set com32=if !y! gtr 1 set /a y-=1
  34. set com30=if !y! lss 3 set /a y+=1
  35. for %%a in (1 2 3 4 5 6 7 8) do set a%%a=%%a
  36. set "a9= "
  37. set ai1=b 9 8 7 4 1 2 3 6
  38. set ai2=l 1 2 5 8 7 4
  39. set ai3=l 2 3 6 9 8 5
  40. set ai4=l 4 5 6 9 8 7
  41. set ai5=l 1 2 3 6 5 4
  42. set ai6=s 1 2 5 4
  43. set ai7=s 2 3 6 5
  44. set ai8=s 4 5 8 7
  45. set ai9=s 5 6 9 8
  46. set NL=6
  47. set NB=8
  48. set NS=4
  49. setlocal enabledelayedexpansion
  50. :begin
  51. set wina=
  52. set winb=
  53. set/a gg+=1
  54. set msg3=!msg2!
  55. set msg2=!msg1!
  56. set msg1=!msg!
  57. set msg=第!gg!局:
  58. cls
  59. set/a m=3,n=3,chbe=9
  60. set/a ran=!random!%%8+8
  61. set aiall=9
  62. for /l %%a in (0,1,%ran%) do (call :random)
  63. call :change aiall
  64. set/a x=m,y=n,chae=chbe
  65. for %%a in (1 2 3 4 5 6 7 8 9) do set b%%a=!a%%a!
  66. for /l %%a in (0,1,18) do (for %%b in ("!ec%%a!") do echo;     %%~b)
  67. set/a totala=0,totalb=0
  68. :loop
  69. ping -n 1 127.1 >nul
  70. call in.com
  71. set error=!errorlevel!
  72. if "!error!" equ "1" goto :quit
  73. if not defined com!error! goto :loop
  74. for %%a in (!error!) do set comm=!com%%a!
  75. if !error! gtr 40 (set man=a) else (set man=b)
  76. %comm%
  77. if !man! equ b (
  78.         set/a chto=x*3+y-3
  79.         set/a chbx=chbe
  80. ) else (
  81.         set/a chto=m*3+n-3
  82.         set/a chbx=chae
  83. )
  84. if !chto! equ !chbx! goto :loop
  85. for /f "tokens=1,2 delims=-" %%a in ("!%man%%chbx%!-!%man%%chto%!") do (set %man%!chbx!=%%b&set %man%!chto!=%%a)
  86. set ch%man%e=!chto!
  87. set/a total%man%+=1
  88. cls
  89. for /l %%a in (0,1,18) do (for %%b in ("!ec%%a!") do echo;     %%~b)
  90. set str=
  91. for /l %%a in (1,1,9) do (set str=!str!!%man%%%a!)
  92. if "!str!" equ "12345678 !win%man%!" echo !Name%man%!赢了,用了!total%man%!步。&set win%man%=#&set msg=!msg!  !Name%man%!用了!total%man%!步&pause&if defined wina (if defined winb goto :begin)
  93. goto :loop
  94. :quit
  95. echo 谢谢使用,再见!
  96. ping -n 2 127.1 >nul
  97. goto :eof
  98. :change
  99. set ver=!%1:~,1!
  100. for %%a in (!%1:~1!) do (
  101.         for /f "tokens=1,2 delims=-" %%b in ("a!ver!-!a%%a!") do (
  102.                 set a%%a=!%%b!
  103.                 set %%b=%%c
  104.         )
  105.         set ver=%%a
  106. )
  107. set/a chbe=ver
  108. set/a ver-=1,"m=ver/3+1",n=ver%%3+1
  109. goto :eof
  110. :random
  111. set v=0
  112. for /l %%a in (1,1,9) do (
  113.         if "!ai%%a:%chbe%=!" neq "!ai%%a!" (
  114.                 set /a v+=1
  115.                 set r!v!=!ai%%a!
  116.         )
  117. )
  118. set/a ran=!random!%%v+1
  119. set/a r=N!r%ran%:~,1!
  120. set str=!r%ran%:~1!
  121. set str=!str:*%chbe%=!%str%
  122. set/a ran=!random!%%r*2+4
  123. set str=!str:~,%ran%!
  124. set aiall=!aiall!!str!
  125. set chbe=!str:~-2!
  126. goto :eof
复制代码

作者: xxx    时间: 2009-6-7 18:27

牛~汇编个choice出来.

不过还是那个硬伤...界面.
作者: keen    时间: 2009-6-11 16:23

愣是看不懂代码!
那个ESC退出,就挺牛逼的,一般的批处理都是输入相应命令后,才退出,这个直接按ESC健,就可以退出。
强,就一个字!
作者: Batcher    时间: 2009-6-11 20:54     标题: 回复 3楼 的帖子

用debug命令动态生成一个in.com来接收用户输入
如果对这方面的知识感兴趣可以趁机多向楼主请教
作者: keen    时间: 2009-6-11 21:16

楼主,能否详细讲解一下整个代码,或者注释一下,尤其是in.com,感兴趣!
作者: netbenton    时间: 2009-6-11 22:11

(echo e 100 B8 00 00 CD 16 88 E0 B4 4C CD 21
echo r cx
echo b
echo n in.com
echo w
echo q)|debug>nul

就是靠这段代码生成的。
你打开一个cmd窗口,运行debug,会出现提示符:
-
然后依次输入上面echo 后面的字符串,回车:
- e 100 B8 00 00 CD 16 88 E0 B4 4C CD 21
- r cx
- b
- n in.com
- w
- q
又会回到dos 提示符,这时就得到一个in.com了。
你要是想进一步了解
B8 00 00 CD 16 88 E0 B4 4C CD 21
是怎么回事可以这样,在cmd提示符下输入:
debug in.com
-u
会看到以下内容:
0B44:0100 B80000        MOV        AX,0000                            
0B44:0103 CD16          INT        16                                 
0B44:0105 88E0          MOV        AL,AH                             
0B44:0107 B44C          MOV        AH,4C                              
0B44:0109 CD21          INT        21                                 
0B44:010B 2E            CS:                                          
0B44:010C C7065D910000  MOV        WORD PTR [915D],0000               
0B44:0112 2E            CS:                                          
0B44:0113 C7064E910000  MOV        WORD PTR [914E],0000               
0B44:0119 2E            CS:                                          
0B44:011A C7061A925B5D  MOV        WORD PTR [921A],5D5B

红色部分即为in.com的所有指令。“0B44:”有可能会不同
用q命令退出。
-q

其实也没有什么,这可以说是最简单的一个com程序了。
想学习的话,可以到这里下载个手册来看看
http://www.cn-dos.net/forum/viewthread.php?tid=19267&fpage=3

[ 本帖最后由 netbenton 于 2009-6-11 22:21 编辑 ]
作者: zljzsmzzx    时间: 2009-6-12 18:18

真不可思议。好好学一下。谢谢楼主发这么好的帖。
作者: HKBXOIC    时间: 2014-4-5 16:40

我把你的代码  弄成批处理之后  怎么无法运行   你看 我这种情况  是由于什么原因呢
能不能给发个  那个批处理 弄成附件  给我   谢谢!
作者: CrLf    时间: 2014-4-7 00:49

回复 8# HKBXOIC


    你不会是64位系统吧?




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