标题: [游戏娱乐] 批处理数字拼图双人PK游戏 [打印本页]
作者: netbenton 时间: 2009-6-7 13:09 标题: 批处理数字拼图双人PK游戏
把图表拼成
123
456
78
为赢。
可以供两人同时玩-
- @echo off
- set ec3= 批处理拼图比赛
- set ec4= 靓女 靓仔
- set ec5= ┍=┯=┯=┐ ┍=┯=┯=┐
- set ec6= │!b1!│!b2!│!b3!│ │!a1!│!a2!│!a3!│
- set ec7= ┝=┿=┿=┥ ┝=┿=┿=┥
- set ec8= │!b4!│!b5!│!b6!│ │!a4!│!a5!│!a6!│
- set ec9= ┝=┿=┿=┥ ┝=┿=┿=┥
- set ec10= │!b7!│!b8!│!b9!│ │!a7!│!a8!│!a9!│
- set ec11= ┕=┷=┷=┙ ┕=┷=┷=┙
- set ec12=上W,下S,左A,右D 用方向键控制
- set ec13= 按 Esc 键退出
- set ec14= !msg!
- set ec15= !msg1!
- set ec16= !msg2!
- set ec17= !msg3!
- set Namea=靓仔
- set Nameb=靓女
- chcp 437 >nul
- graftabl 936>nul
- (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
- set com80=if !m! gtr 1 set /a m-=1
- set com72=if !m! lss 3 set /a m+=1
- set com77=if !n! gtr 1 set /a n-=1
- set com75=if !n! lss 3 set /a n+=1
- set com31=if !x! gtr 1 set /a x-=1
- set com17=if !x! lss 3 set /a x+=1
- set com32=if !y! gtr 1 set /a y-=1
- set com30=if !y! lss 3 set /a y+=1
- for %%a in (1 2 3 4 5 6 7 8) do set a%%a=%%a
- set "a9= "
- set ai1=b 9 8 7 4 1 2 3 6
- set ai2=l 1 2 5 8 7 4
- set ai3=l 2 3 6 9 8 5
- set ai4=l 4 5 6 9 8 7
- set ai5=l 1 2 3 6 5 4
- set ai6=s 1 2 5 4
- set ai7=s 2 3 6 5
- set ai8=s 4 5 8 7
- set ai9=s 5 6 9 8
- set NL=6
- set NB=8
- set NS=4
- setlocal enabledelayedexpansion
- :begin
- set wina=
- set winb=
- set/a gg+=1
- set msg3=!msg2!
- set msg2=!msg1!
- set msg1=!msg!
- set msg=第!gg!局:
- cls
- set/a m=3,n=3,chbe=9
- set/a ran=!random!%%8+8
- set aiall=9
- for /l %%a in (0,1,%ran%) do (call :random)
- call :change aiall
- set/a x=m,y=n,chae=chbe
- for %%a in (1 2 3 4 5 6 7 8 9) do set b%%a=!a%%a!
- for /l %%a in (0,1,18) do (for %%b in ("!ec%%a!") do echo; %%~b)
- set/a totala=0,totalb=0
- :loop
- ping -n 1 127.1 >nul
- call in.com
- set error=!errorlevel!
- if "!error!" equ "1" goto :quit
- if not defined com!error! goto :loop
- for %%a in (!error!) do set comm=!com%%a!
- if !error! gtr 40 (set man=a) else (set man=b)
- %comm%
- if !man! equ b (
- set/a chto=x*3+y-3
- set/a chbx=chbe
- ) else (
- set/a chto=m*3+n-3
- set/a chbx=chae
- )
- if !chto! equ !chbx! goto :loop
- for /f "tokens=1,2 delims=-" %%a in ("!%man%%chbx%!-!%man%%chto%!") do (set %man%!chbx!=%%b&set %man%!chto!=%%a)
- set ch%man%e=!chto!
- set/a total%man%+=1
- cls
- for /l %%a in (0,1,18) do (for %%b in ("!ec%%a!") do echo; %%~b)
- set str=
- for /l %%a in (1,1,9) do (set str=!str!!%man%%%a!)
- 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)
- goto :loop
- :quit
- echo 谢谢使用,再见!
- ping -n 2 127.1 >nul
- goto :eof
- :change
- set ver=!%1:~,1!
- for %%a in (!%1:~1!) do (
- for /f "tokens=1,2 delims=-" %%b in ("a!ver!-!a%%a!") do (
- set a%%a=!%%b!
- set %%b=%%c
- )
- set ver=%%a
- )
- set/a chbe=ver
- set/a ver-=1,"m=ver/3+1",n=ver%%3+1
- goto :eof
- :random
- set v=0
- for /l %%a in (1,1,9) do (
- if "!ai%%a:%chbe%=!" neq "!ai%%a!" (
- set /a v+=1
- set r!v!=!ai%%a!
- )
- )
- set/a ran=!random!%%v+1
- set/a r=N!r%ran%:~,1!
- set str=!r%ran%:~1!
- set str=!str:*%chbe%=!%str%
- set/a ran=!random!%%r*2+4
- set str=!str:~,%ran%!
- set aiall=!aiall!!str!
- set chbe=!str:~-2!
- 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 |