中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 中国象棋-趣味东 QQ:309254515 制作
« [1] [2] [3] »
作者:
标题: 中国象棋-趣味东 QQ:309254515 制作 取消高亮 | 上一主题 | 下一主题
qwd
初级用户





积分 161
发帖 56
注册 2007-10-1
状态 离线
『楼 主』:  中国象棋-趣味东 QQ:309254515 制作


@echo off&title.中国象棋-趣味东 QQ:309254515 制作 请尊重本人劳动成果!
setlocal enabledelayedexpansion&color 3b&mode con: cols=100 lines=500&echo.
:hom
set hf=▲
set bf=▼
set hz=车马相仕帅炮兵
set bz=车马象士将炮卒
set qz=j m x s k p z
set dz=前后进退平
set ml=q h j t p
set zw= 一二三四五六七八九十
set  p1=┏━━┯━━┯━━┯━━┯━━┯━━┯━━┯━━┓
set  p2=┃  │  │  │\ │ /│  │  │  ┃
set  p3=┃  │  │  │ \│/ │  │  │  ┃
set  p4=┠──┼──┼──┼──﹡──┼──┼──┼──┨
set  p5=┃  │  │  │ /│\ │  │  │  ┃
set  p6=┃  │  │  │/ │ \│  │  │  ┃
set  p7=┠──╬──┼──┼──┼──┼──┼──╬──┨
set  p8=┃  │  │  │  │  │  │  │  ┃
set  p9=┃  │  │  │  │  │  │  │  ┃
set p10=╠──┼──╬──┼──╬──┼──╬──┼──╣
set p11=┃  │  │  │  │  │  │  │  ┃
set p12=┃  │  │  │  │  │  │  │  ┃
set p13=┠──┴──┴──┴──┴──┴──┴──┴──┨
set p14=┃   楚    河              ┃
set p15=┃              汉    界   ┃
set p16=┠──┬──┬──┬──┬──┬──┬──┬──┨
set p17=┃  │  │  │  │  │  │  │  ┃
set p18=┃  │  │  │  │  │  │  │  ┃
set p19=╠──┼──╬──┼──╬──┼──╬──┼──╣
set p20=┃  │  │  │  │  │  │  │  ┃
set p21=┃  │  │  │  │  │  │  │  ┃
set p22=┠──╬──┼──┼──┼──┼──┼──╬──┨
set p23=┃  │  │  │\ │ /│  │  │  ┃
set p24=┃  │  │  │ \│/ │  │  │  ┃
set p25=┠──┼──┼──┼──※──┼──┼──┼──┨
set p26=┃  │  │  │ /│\ │  │  │  ┃
set p27=┃  │  │  │/ │ \│  │  │  ┃
set p28=┗━━┷━━┷━━┷━━┷━━┷━━┷━━┷━━┛
set  q1=车━━马━━象━━士━━将━━士━━象━━马━━车
set  q2=▼  ▼  ▼  ▼\ ▼ /▼  ▼  ▼  ▼
set  q7=┠──炮──┼──┼──┼──┼──┼──炮──┨
set  q8=┃  ▼  │  │  │  │  │  ▼  ┃
set q10=卒──┼──卒──┼──卒──┼──卒──┼──卒
set q11=▼  │  ▼  │  ▼  │  ▼  │  ▼
set q18=▲  │  ▲  │  ▲  │  ▲  │  ▲
set q19=兵──┼──兵──┼──兵──┼──兵──┼──兵
set q21=┃  ▲  │  │  │  │  │  ▲  ┃
set q22=┠──炮──┼──┼──┼──┼──┼──炮──┨
set q27=▲  ▲  ▲  ▲/ ▲ \▲  ▲  ▲  ▲
set q28=车━━马━━相━━仕━━帅━━仕━━相━━马━━车
set kp=0
set zdy=0
set xs=!hf!
cd.>棋谱.txt&set bs=0
echo. 红方: !hf!  ┃ 红子: !hz!  │                    │开盘:kp
echo. 白方: !bf!  ┃ 白子: !bz!  │  动作: !dz!  │自动读棋谱:dp
echo.           ┃ 代码: !qz!   │  代码: !ml!   │自定:zdy&echo.
:sx
set/p=           <nul
for /l %%h in (1,1,25) do (set lh= %%h&set/p=!lh:~-2!<nul)
echo.&echo.&set/p=            <nul&
for /l %%h in (1,1,9) do (set/p=%%h     <nul)
echo.&echo.
for /l %%h in (1,1,28) do (set hh=0%%h&set/p=  !hh:~-2!      <nul
set/a hx=%%h-1,yh=hx%%3,hx=hx/3,hw=10-hx
if !yh!==0 (set/p=!hx! <nul)else (set/p=  <nul)
if !kp!==0 (if not "!q%%h!"=="" (set qp%%h=!q%%h!)else (set qp%%h=!p%%h!))
if !zdy!==1 (set qp%%h=!p%%h!)
set/p=!qp%%h!<nul&if !yh!==0 (call set/p=  %%zw:~!hw!,1%%<nul)
echo.)
echo.&set/p=            <nul
for /l %%h in (9,-1,1) do (set zwh=%%h
call set/p=%%zw:~!zwh!,1%%    <nul)
echo.&echo.
rem.----------开始对弈--------------
:输入步数
:next
set bq=
if !rp!==1 goto xp
call echo.%%bt!xs!%%!xs!输入步数!xs!&set/p bq=
:yp
set kp=1
if !bq!==dp goto dp
if !bq!==kp (set kp=0&set zdy=0)&goto sx
if !bq!==zdy (set zdy=1)&goto sx
if "!bq!"=="" echo 未输入&goto next
if "!bq:~3,1!"=="" goto next
:拆字
for /l %%z in (1,1,4) do (
set/a zi=%%z-1
call set z%%z=%%bq:~!zi!,1%%)
set z0=0
echo !z2!|findstr "^[0-9]*$">nul||(
set z0=!z1!
set z1=!z2!
set z2=0)
:转换
set js=0&for %%m in (!qz!) do (
if !xs!==!hf! (set xz=!hz!)else (set xz=!bz!)
if !z1!==%%m call set z1=%%xz:~!js!,1%%
set/a js+=1
if !z0!==q set z0=前
if !z0!==h set z0=后
if !z3!==j set z3=进
if !z3!==t set z3=退
if !z3!==p set z3=平)
:步数提示
set z5=!z2!
set z6=!z4!
if !xs!==!hf! (
if not !z2!==0 (call set z5=%%zw:~!z2!,1%%)
call set z6=%%zw:~!z4!,1%%)
if !z2!==0 (call set bt!xs!=!z0!!z1!!z3!!z6!)else (
call set bt!xs!=!z1!!z5!!z3!!z6!)
set/a bs+=1
call echo %%bt!xs!%%
if "!xs!"=="!hf!" (
if not !z2!==0 set/a z2=10-!z2!
if "!z0!"=="前" set "z0=1"
if "!z0!"=="后" set "z0=2"
if "!z3!"=="进" set "z3=-"
if "!z3!"=="退" set "z3=+")
if "!z0!"=="前" set "z0=2"
if "!z0!"=="后" set "z0=1"
if "!z3!"=="进" set "z3=+"
if "!z3!"=="退" set "z3=-"
echo.
:查找定位
if !z0!==0 (set/a l=!z2!*3-3)else (set l=0)
:cl
set jm=
set fm=
for /l %%s in (1,1,28) do (
call set cm=%%qp%%s:~!l!,1%%
:查名
if !z1!==!cm! (
if "!xs!"=="!bf!" (set/a fh=%%s+1)
if "!xs!"=="!hf!" (set/a fh=%%s-1)
if %%s==1 (set/a fh=%%s+1)
if %%s==28 (set/a fh=%%s-1)
call set "fm=%%qp!fh!:~!l!,1%%"
if %%s==1 if not !fm!==!bf! set fm=!hf!
if %%s==28 if not !fm!==!hf! set fm=!bf!
:查方
if !xs!==!fm! (
set/a jm+=1
set !z1!!jm!=%%s)))

:一般
set h=
if !z0!==0 (if !jm!==2 (
echo.&echo.前1 后2&set/p z0=
if !xs!==!bf! set/a z0=3-!z0!)else (
call set h=%%!z1!1%%
set !z1!1=
if "!h!"=="" echo.z0未找到!&goto next))
:同列
echo.
if not !z0!==0 (if not !jm!==2 (set/a l+=3
if !l! LEQ 25 (goto cl)else (echo.not.z0 !z0!未找到!&goto next))
call set h=%%!z1!!z0!%%
set !z1!!z0!=)
if "!h!"=="" (echo.找不到!确认输入正确?&goto next)
echo.--------原位: !xs!!z1! !h!行 !l!+1列 ---------
:动作
for %%j in (车 将 帅 炮 卒 兵) do (if !z1!==%%j (
if !z3!==平 (set xh=!h!
if !xs!==!hf! set/a z4=10-!z4!
set/a xl=!z4!*3-3
set/a lc=!xl!-!l!
set/a ll=!lc!*!lc!
if not !z1!==车 if not !z1!==炮 if not !ll!==9 goto next
if !z1!==兵 if !xh! GTR 13 goto next
if !z1!==卒 if !xh! LSS 16 goto next
)else (
:进退
set/a xh=!h!!z3!!z4!*3,xl=!l!
if not !z1!==车 if not !z1!==炮 if not !z4!==1 goto next

if !z1!==兵 (if !xh! GTR 19 goto next
if !xh! GTR !h! goto next)
if !z1!==卒 (if !xh! LSS 10 goto next
if !xh! LSS !h! goto next) ) ))

for %%m in (马 象 相 仕 士)do (if !z1!==%%m (
if !xs!==!hf! set/a z4=10-!z4!
set/a z4=!z4!*3-3
set/a c=!l!-!z4!
if !c! lss 0 set/a c=!z4!-!l!
if !c!==0 goto next
if !c! GEQ 9 goto next
if !z1!==马 set/a c=9-!c!

set/a xh=!h!!z3!!c!,xl=!z4!

if !z1!==马 (
if !c!==3 (set/a tx=!h!,ty=!xl!+!l!,ty=ty/2)
if !c!==6 (set/a tx=!xh!+!h!,tx=tx/2,ty=!l!)
call :cp&set mtp=!tz!
call :cqp&set mtq=!tz!
if not !mtp!==!mtq! echo 绊马腿&goto next)

echo 士仕|findstr "!z1!">nul &&(if not !c!==3 goto next)
echo 象相|findstr "!z1!">nul &&(if not !c!==6 goto next
set/a tx=!h!!z3!3,ty=!xl!+!l!,ty=ty/2
call :cp&set xyp=!tz!
call :cqp &set xyq=!tz!
if not !xyp!==!xyq! echo 别!z1!眼&goto next)
if !z1!==象 (if !xh! GTR 13 goto next)
if !z1!==相 (if !xh! LSS 16 goto next)
))
echo.--------新位: !xs!!z1! !xh!行 !xl!+1列---------
if !xh! LSS  0 goto next
if !xl! LSS  0 goto next
if !xh! GTR 28 goto next
if !xl! GTR 25 goto next

:删除
set/a tx=!h!-1
:sc
set ty=!l!
call :cp&call :xg
set/a tx+=1
set/a c=!tx!-!h!
if !c! LEQ 1 goto sc
:添加
set tx=!xh!
set ty=!xl!
set tz=!z1!
call set kw=%%qp!tx!:~!xl!,1%%
if !kw!==帅 (call :color
echo.&echo   黑  胜 !
echo.&echo.  重新开始!
pause>nul&goto hom)
if !kw!==将 (call :color
echo.&echo   红  胜 !
echo.&echo.  重新开始!
pause>nul&goto hom)
call :xg
if !xs!==!bf! (set "f1=+"&set "f2=-")else (
set "f1=-"&set "f2=+")
set/a tx=!tx!!f1!1&set tz=!xs!&call :xg
set/a tx=!tx!!f2!2&call :cp&call :xg
:写棋谱
call set/p=%%bt!xs!%%  <nul>>棋谱.txt
if !bs!==6 echo.>>棋谱.txt&set bs=0
:换方
if !xs!==!hf! (set xs=!bf!)else (set xs=!hf!)
echo.&goto sx
------------------------------------------------
:读棋谱
:dp
set rp=1
IF EXIST 棋谱.txt (echo.开始读取执行&set fn=棋谱.txt)else (set/p fn=拖放棋谱到此!&echo.)
set ph=0
:ph
set/a ph+=1
set/a pl=0
:pl
set/a pl+=1
(echo.防止首行不被读取!)>num
echo.over>over
for /f "skip=%ph% tokens=%pl%" %%r in ('type num^&type %fn%^&type over') do (
del num,over
if "%%r"=="over" set rp=0&goto next
set bq=%%r
for /l %%d in (1,1,10) do (set n=%%d
call set su=%%zw:~!n!,1%%
set z1=!bq:~0,1!
set z2=!bq:~1,1!
set z3=!bq:~2,1!
set z4=!bq:~3,1!
if !z2!==!su! set z2=!n!
if !z4!==!su! set z4=!n!
set bq=!z1!!z2!!z3!!z4!)
echo !xs!%%r!xs!
ping /n 5 127.1.1>nul
:pause
cls
goto yp
----------
:xp
goto pl
)
goto ph
------------------------------------------------
:color
for /l %%i in (0,1,30) do (set w=!RANDOM:~-1!
color !w!d
ping /n 1 127.1.1>nul)
color 3b&goto end
-----------------------------------------------

call:cqp set jf1=!tz!
call:cp set jf2=!tz!

------------------------------------------------
:cp
call set tz=%%p!tx!:~!ty!,1%%&goto end
:cqp
call set tz=%%qp!tx!:~!ty!,1%%&goto :eof
------------------------------------------------
:xg
set/a w=!ty!+1
call set qp!tx!=%%qp!tx!:~0,!ty!%%!tz!%%qp!tx!:~!w!%%
set w=
:end
[ Last edited by qwd on 2008-4-26 at 02:30 AM ]

   此帖被 +28 点积分       点击查看详情   
评分人:【 junchen2 分数: +4  时间:2008-3-31 23:32
评分人:【 jmz573515 分数: +7  时间:2008-4-2 21:30
评分人:【 zh159 分数: +12  时间:2008-4-2 23:53
评分人:【 cooray 分数: +2  时间:2008-4-3 14:00
评分人:【 qwertl 分数: +3  时间:2008-9-14 20:35


2008-3-31 19:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qwd
初级用户





积分 161
发帖 56
注册 2007-10-1
状态 离线
『第 2 楼』:  

经这几天努力终于写成  中国象棋游戏 不能人机对弈!

还不完善,诚肯高手指点!代码复杂,跃子操作等还待完善!

心得: 太多for钳套会使速度大减!也经努力完成一个空棋盘要18秒多!只好改为多行set .

2008-3-31 19:59
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 3 楼』:  运行不了:

LZ确实强,写了这么多代码,但结果却不怎么如意,运行不了啊!



批处理之家新域名:www.bathome.net
2008-3-31 21:09
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
qwd
初级用户





积分 161
发帖 56
注册 2007-10-1
状态 离线
『第 4 楼』:  

怎么可能运行不了呢?输入代码或字符都行啊!

2008-3-31 21:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 5 楼』:  不好意思:

不好意思,是我机器上的cmd乱了,我才发现的,对不起,我收回我所说的话。



批处理之家新域名:www.bathome.net
2008-3-31 21:19
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
qwd
初级用户





积分 161
发帖 56
注册 2007-10-1
状态 离线
『第 6 楼』:  

你搞清楚啊!
我辛苦了几天才做成的!怎么可能运行不了呢!
这你这么一句话对我是多大的打击啊!

首先你看过棋谱没!

  │  │  ┃
  │  ▲  ┃
──┼──炮──┨  三
  │  │  ┃
  │  │  ┃
──┼──┼──┨  二
  │  │  ┃
  ▲  ▲  ▲
━━相━━马━━车  一

    三    二    一

先对输入字说明下!
同棋谱一样的每一步要输入四个字符
第一字代表棋的名子 或同列同名时分前后      马     车
第二字代表棋字所在的列位,棋谱里叫路          2      1
第三字代表移动方向                                  进     进
第四字代表移动量或所到的列位                    3      1

重要提示:分清那方! 这里是自动轮流下棋的

▲输入步数▲  代表红方输入
▼输入步数▼  代表白方输入


红方: ▲  ┃ 红子: 车马相士帅炮兵  │                    
白方: ▼  ┃ 白子: 车马象仕将炮卒  │  动作: 前后进退平  
             ┃ 代码: j m x s k p z       │  代码: q h j t p   

在这里第一三字可以用代码也可用中文字的!
如:
马2进3 等同 m2j3

重要提示:分清那方输入!


  │  │  ┃
  ▲  ▲  ┃
──马──炮──┨  三
  │  │  ┃
  │  │  ┃
──┼──┼──┨  二
  │  │  ┃
  ▲  │  ▲
━━相━━┷━━车  一

    三    二    一

[ Last edited by qwd on 2008-3-31 at 10:49 PM ]

2008-3-31 21:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qwd
初级用户





积分 161
发帖 56
注册 2007-10-1
状态 离线
『第 7 楼』:  顺炮横车破直车弃马着法

炮二平五 炮8平5 马二进三 马8进7 车一进一 车9平8
车一平六 车8进6 车六进七 马2进1 车九进一 炮2进7
炮八进五 马7退8 炮五进四 仕6进5 车九平六 将5平6
车六进一 仕5退4 车六平四 炮5平6 车四进六 将6平5
炮八平五

2008-3-31 21:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 8 楼』:  

这么长的代码怎么不用code把代码扩起来。?

[ Last edited by 26933062 on 2008-3-31 at 09:43 PM ]



致精致简!
2008-3-31 21:40
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qwd
初级用户





积分 161
发帖 56
注册 2007-10-1
状态 离线
『第 9 楼』:  确实有不完善的地方!但不影响正常运行!

不足之处:
跃子操作! 绊马腿和 别相眼都未做限制!
老将出城是也未做限制!

代码太多诚肯高手简化!

2008-3-31 21:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qwd
初级用户





积分 161
发帖 56
注册 2007-10-1
状态 离线
『第 10 楼』:  看棋那个是写代码时太多的中间提示我加了那个!

只要正确输入步骤:
首先要看哪方 所在路位是否有棋子!
然后输入四字动作语句!
如:
马2进3    同   m2j3
回车就看到棋子的移动位置了!
重要提示:接下来该对方走了
有时还以为在本方
看清输入提示输入那的三角方向要和棋盘中的棋子对应
切记: 轮流下的!看清哪方!

重要提示双方轮流下的分清那方:
▲输入步数▲  代表红方输入
▼输入步数▼  代表白方输入

2008-3-31 21:56
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 11 楼』:  

测试:五六炮对屏风马

炮二平五 马8进7
马二进三 马2进3
车一平二 车9平8
兵七进一 卒7进1
马八进七 士4进5
马七进六 炮8进4
炮八平六 炮8平5
炮五进四 马3进5
车二进九 马5进4
车二退五 炮5退3
帅五进一 卒7进1
车二平三 马4进6
帅五平六 炮2平4
炮六平五 车1平2
仕六进五 象3进5
仕五进四 马6退4
炮五平六 车2进7
帅六退一 马4进5
黑胜

2008-3-31 23:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
niao22
新手上路





积分 14
发帖 7
注册 2008-3-31
状态 离线
『第 12 楼』:  

楼主精神可嘉,我不会下象棋

2008-3-31 23:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qwd
初级用户





积分 161
发帖 56
注册 2007-10-1
状态 离线
『第 13 楼』:  增加了自动读棋谱功能!原文已更改过!

以下测试小节!加入原文己成功实现自动运行棋谱!

@echo off
setlocal enabledelayedexpansion&echo.
set fn="C:\Documents and Settings\Administrator\桌面\五六炮对屏风马.txt"
set/p fn=拖放棋谱到此!&echo.
set h=0
:h
set/a h+=1
set/a l=0
:l
set/a l+=1
(echo.防止首行不被读取!)>num
echo.over>over
for /f "skip=%h% tokens=%l%" %%r in ('type num^&type %fn%^&type over') do (
del num,over
if "%%r"=="over" goto end
set/p=%%r  <nul
ping /n 1 127.1.1>nul
goto l
)
echo.
goto h
:end
echo.&pause

[ Last edited by qwd on 2008-4-1 at 04:41 PM ]

2008-4-1 16:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qwd
初级用户





积分 161
发帖 56
注册 2007-10-1
状态 离线
『第 14 楼』:  红仕白士搞反了!

修正原文变量就可

2008-4-1 16:13
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
qwd
初级用户





积分 161
发帖 56
注册 2007-10-1
状态 离线
『第 15 楼』:  经修正现在可正式运行 HAT的棋谱了!

红仕白士现已修正!变量和图中的字符都修正了!

2008-4-1 16:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: