标题: 中国象棋-趣味东 QQ:309254515 制作
[打印本页]
作者: qwd
时间: 2008-3-31 19:50
标题: 中国象棋-趣味东 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 ]
作者: qwd
时间: 2008-3-31 19:59
经这几天努力终于写成 中国象棋游戏 不能人机对弈!
还不完善,诚肯高手指点!代码复杂,跃子操作等还待完善!
心得: 太多for钳套会使速度大减!也经努力完成一个空棋盘要18秒多!只好改为多行set .
作者: bat-zw
时间: 2008-3-31 21:09
标题: 运行不了:
LZ确实强,写了这么多代码,但结果却不怎么如意,运行不了啊!
作者: qwd
时间: 2008-3-31 21:11
怎么可能运行不了呢?输入代码或字符都行啊!
作者: bat-zw
时间: 2008-3-31 21:19
标题: 不好意思:
不好意思,是我机器上的cmd乱了,我才发现的,对不起,我收回我所说的话。
作者: qwd
时间: 2008-3-31 21:34
你搞清楚啊!
我辛苦了几天才做成的!怎么可能运行不了呢!
这你这么一句话对我是多大的打击啊!
首先你看过棋谱没!
│ │ ┃
│ ▲ ┃
──┼──炮──┨ 三
│ │ ┃
│ │ ┃
──┼──┼──┨ 二
│ │ ┃
▲ ▲ ▲
━━相━━马━━车 一
三 二 一
先对输入字说明下!
同棋谱一样的每一步要输入四个字符
第一字代表棋的名子 或同列同名时分前后 马 车
第二字代表棋字所在的列位,棋谱里叫路 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 ]
作者: qwd
时间: 2008-3-31 21:37
标题: 顺炮横车破直车弃马着法
炮二平五 炮8平5 马二进三 马8进7 车一进一 车9平8
车一平六 车8进6 车六进七 马2进1 车九进一 炮2进7
炮八进五 马7退8 炮五进四 仕6进5 车九平六 将5平6
车六进一 仕5退4 车六平四 炮5平6 车四进六 将6平5
炮八平五
作者: 26933062
时间: 2008-3-31 21:40
这么长的代码怎么不用code把代码扩起来。?
[
Last edited by 26933062 on 2008-3-31 at 09:43 PM ]
作者: qwd
时间: 2008-3-31 21:42
标题: 确实有不完善的地方!但不影响正常运行!
不足之处:
跃子操作! 绊马腿和 别相眼都未做限制!
老将出城是也未做限制!
代码太多诚肯高手简化!
作者: qwd
时间: 2008-3-31 21:56
标题: 看棋那个是写代码时太多的中间提示我加了那个!
只要正确输入步骤:
首先要看哪方 所在路位是否有棋子!
然后输入四字动作语句!
如:
马2进3 同 m2j3
回车就看到棋子的移动位置了!
重要提示:接下来该对方走了
有时还以为在本方
看清输入提示输入那的三角方向要和棋盘中的棋子对应
切记: 轮流下的!看清哪方!
重要提示双方轮流下的分清那方:
▲输入步数▲ 代表红方输入
▼输入步数▼ 代表白方输入
作者: HAT
时间: 2008-3-31 23:21
测试:五六炮对屏风马
炮二平五 马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
黑胜
作者: niao22
时间: 2008-3-31 23:32
楼主精神可嘉,我不会下象棋
作者: qwd
时间: 2008-4-1 16:01
标题: 增加了自动读棋谱功能!原文已更改过!
以下测试小节!加入原文己成功实现自动运行棋谱!
@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 ]
作者: qwd
时间: 2008-4-1 16:13
标题: 红仕白士搞反了!
修正原文变量就可
作者: qwd
时间: 2008-4-1 16:32
标题: 经修正现在可正式运行 HAT的棋谱了!
红仕白士现已修正!变量和图中的字符都修正了!
作者: plp626
时间: 2008-4-1 16:40
很厉害的批处理代码,楼主何方人也?
只是
看不懂,
楼主这个象棋怎么玩
还有用的是什么算法
作者: qwd
时间: 2008-4-1 16:44
标题: 怎么玩可看我在第6楼的回复内容!
我象棋技术不行啊!只是爱好批的!
怎么玩可看我在第6楼的回复内容!
作者: plp626
时间: 2008-4-1 16:50
我真好奇这个是怎么实现下象棋的?
要不楼主QQ游戏里咱俩对弈几局,加我QQ:275928264
作者: z640919a
时间: 2008-4-1 20:39
不错,中国象棋我可是有相当的水平.
作者: xmi
时间: 2008-4-1 21:01
很厉害的批处理代码
没想过可以这样下棋..
如何以把黑红方也变色就好了, 因现在的colour有点难看 (我指难在screen上看)....
作者: jmz573515
时间: 2008-4-2 21:30
挺好玩儿
作者: qwd
时间: 2008-4-2 23:48
标题: 中国象棋还在不断更新中!
昨天加上了读棋谱功能! 应英雄所求加上判断胜负代码!
虽然有不足之处,还在不断完善中!
望广大爱好者多提意见和建议!
主要规则也还要完善!
那个变色功能也要有!这个开始有过设想但没着手去做!
以后逐步完善中!静等期待!
作者: 344611734
时间: 2008-4-12 15:34
呵呵,有意思。好贴子啊!
作者: chishingchan
时间: 2008-4-12 17:33
我也试玩一玩!
作者: chishingchan
时间: 2008-4-12 17:37
只是一个趋形,还需要完善啊。
建议在棋盘旁提示一下操作方法。
作者: aliang10520
时间: 2008-4-12 19:14
先看看
作者: 414893029
时间: 2008-4-12 19:30
厉害啊...我不得不回
作者: lotus516
时间: 2008-4-12 21:09
太厉害了,我就想一个可以按棋谱下棋的软件,可是没想到P居然实现了!
作者: lotus516
时间: 2008-4-12 21:17
可不可以把自动化的连再一起,再用CODE括起来!
作者: lotus516
时间: 2008-4-12 21:24
运行到车就会出问题!
作者: qwd
时间: 2008-4-14 05:44
标题: 修正了查方出错问题!
这几天忙没空搞!
作者: clian76
时间: 2008-9-14 15:45
一定要回 LX强大
作者: banalo
时间: 2008-9-14 17:25
牛人啊 。。。。。
作者: banalo
时间: 2008-9-14 17:25
弄来看看
作者: lllvvvfff
时间: 2008-9-18 09:19
这个能将死么?没有将死的提示吧