| |
| @echo off&setlocal enabledelayedexpansion |
| ::mode con cols=86 lines=45 |
| title 批处理版斗地主扑克牌游戏 |
| ::本程序尝试整合发牌、叫地主、出牌、吃牌等功能。 |
| ::需要进一步优化各个子函数代码。 |
| ::优化接口:set var=path,!pkvar! |
| ::优化标签。 |
| ::!pkvar!有误!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| |
| ::---------------------------★代码分割线:主菜单和总台★--------------------------- |
| :ZongTai |
| ::总台 |
| cls |
| echo; |
| echo; 批处理版斗地主-单机试验版 |
| echo; |
| echo; |
| echo; 1、开始游戏 |
| echo; 2、游戏规则展示 |
| echo; 3、退出 |
| echo; |
| echo; |
| echo; |
| set input= |
| set /p input= 请选择: |
| if "%input%"=="" goto ZongTai |
| if %input%==1 goto Play |
| if %input%==2 call :YSStart |
| if %input%==3 exit |
| goto ZongTai |
| :Play |
| cls |
| ::开始游戏 |
| call :Fapai |
| ::呼叫发牌 |
| call :排序 |
| ::呼叫排序 |
| |
| :Playing |
| ::开始出牌。打牌的过程。 |
| :Play1 |
| echo; |
| echo,--------------------------地主:%DiZhu%----------------------------- |
| echo; |
| set "MyPoker=%~dp0DDZTemp\%DiZhu%" |
| set "PerPoker=%~dp0DDZTemp\%DiZhu%" |
| call :Pkhuase "%MyPoker%" |
| call :自家牌分析 %PerPoker% |
| call :Chupai %MyPoker% |
| :Play2 |
| echo; |
| echo,--------------------------农民:%NongM1%----------------------------- |
| echo; |
| set "MyPoker=%~dp0DDZTemp\%NongM1%" |
| set "PerPoker=%~dp0DDZTemp\%NongM1%" |
| call :Pkhuase "%MyPoker%" |
| call :自家牌分析 %PerPoker% |
| call :Chupai %MyPoker% |
| :Play3 |
| echo; |
| echo,--------------------------农民:%NongM2%----------------------------- |
| echo; |
| set "MyPoker=%~dp0DDZTemp\%NongM2%" |
| set "PerPoker=%~dp0DDZTemp\%NongM2%" |
| call :Pkhuase "%MyPoker%" |
| call :自家牌分析 %PerPoker% |
| call :Chupai %MyPoker% |
| goto Playing |
| pause |
| exit |
| |
| ::建立一个循环,假设玩家A\B\C,循环于三者,直至有一个玩家先出完牌。 |
| ::这个循环包括:地主出牌——下家分析桌面牌(上家牌)——分析自家牌(是否有可打的牌)——出牌——下家分析桌面牌…… |
| ::三家出牌,最大的区别是,玩家是通过输入控制过程,而电脑自动出牌。 |
| ::---------------------------★代码分割线:出牌机制★--------------------------- |
| ::改造该段代码,使之能通用,优化代码,减少临时文件。 |
| |
| :Chupai |
| ::出牌机制,首先对自家牌进行分析,找出有规律的牌。 |
| echo; |
| echo; 轮到 【%1】 出牌。 |
| echo; 返回【Q】排序【P】不出【N】 |
| echo; 输入要出的牌的序号,回车出牌。多个牌用空格隔开。 |
| echo; |
| set input= |
| set /p input= 输入出牌: |
| if "%input%"=="" goto Chupai |
| if /i "%input%"=="Q" goto ZongTai |
| if /i "%input%"=="N" goto :eof |
| if /i "%input%"=="P" ( |
| call :Pkhuase "%1" |
| goto Chupai |
| ) |
| |
| cd.>"%~dp0DDZTemp\DDZPlay0" |
| cd.>"%1ed" |
| cd.>"%1tmp" |
| set a=0 |
| set b=0 |
| set c= |
| ::判断输入的是否为自己手中的牌 |
| for %%i in (!input!) do ( |
| set /a a+=1 |
| for /f "usebackq tokens=*" %%a in ("%1") do ( |
| if "%%a"=="" (echo;&echo Game over&echo;&pause&goto :eof) |
| if %%i==%%a ( |
| echo;%%i>>"%1ed" |
| set /a b+=1 |
| ) |
| )&&set c=1 |
| ) |
| if "%c%"=="" (echo;&echo 游戏结束&echo;&pause&goto ZongTai) |
| if not !a!==!b! (echo !a!=/=!b!,数据有误,重新输入!&goto Chupai) else (echo; !a!==!b!,数据重合,输入正确!) |
| call :比较结果 |
| echo;上家的牌:!PkShangJia! |
| ::上家的牌 |
| ::剩下的牌 |
| findstr /v /g:"%1ed" "%1">>"%1tmp" |
| cd.>"%1" |
| type "%1tmp">>"%1" |
| echo; |
| echo; 【%1】打出的牌: |
| ::type "%1ed">>"%~dp0DDZTemp\DDZPlay0" |
| |
| set PerPoker="%1ed" |
| call :牌型分析 %PerPoker%&call :牌型分析结果 |
| echo; |
| echo; 【%1】剩下的牌: |
| call :Pkhuase "%1" |
| echo; |
| goto :eof |
| ::---------------------------★代码分割线:机器出牌★--------------------------- |
| ::试图将处理地主的模式转换为电脑自动处理。只是在调用文件上和出牌上有所区别。 |
| :机器出牌 |
| |
| goto :eof |
| ::---------------------------★代码分割线:发牌机制★--------------------------- |
| ::发牌后,得到发到三个玩家手中的牌,并确定谁是地主、谁是农民。 |
| |
| :Fapai |
| ::准备工作 |
| echo; |
| echo 正在发牌,请稍候…… |
| echo; |
| if exist "%~dp0\DDZTemp" (del /q "%~dp0DDZTemp\*.*") else (md "%~dp0\DDZTemp") |
| ::将54张扑克牌分成54行,每行一个数据输入到一个文本中,然后对该文本进行随机排序,并将牌按照顺序发到三个玩家手中。 |
| :Fapai1 |
| ::产生一副扑克牌 |
| echo 2899>"%~dp0DDZTemp\DDZFapai" |
| for %%m in (2999 2130 2230 2330 2430) do echo;%%m>>"%~dp0DDZTemp\DDZFapai" |
| for /l %%a in (3,1,14) do ( |
| set pkp=%%a |
| set /a Pkfp=%%a+1110 |
| set /a Pkmh=%%a+1210 |
| set /a Pkhx=%%a+1310 |
| set /a Pkht=%%a+1410 |
| echo;!Pkfp!&echo;!Pkmh!&echo;!Pkhx!&echo;!Pkht! |
| )>>"%~dp0DDZTemp\DDZFapai" |
| call :Suijpx |
| ::随机排序,"%~dp0DDZTemp\DDZFpsj"为随机牌。 |
| |
| :Fapai2 |
| ::将牌发到三个玩家手中 |
| cd.>"%~dp0DDZTemp\DDZPlay1"&cd.>"%~dp0DDZTemp\DDZPlay2"&cd.>"%~dp0DDZTemp\DDZPlay3" |
| set Pkfp=0 |
| for /f "usebackq tokens=*" %%a in ("%~dp0DDZTemp\DDZFpsj") do ( |
| set /a Pkfp+=1 |
| for /l %%i in (0,3,50) do ( |
| set /a Pkff=!Pkfp!-%%i |
| if !Pkff!==1 echo;%%a>>"%~dp0DDZTemp\DDZPlay1" |
| if !Pkff!==2 echo;%%a>>"%~dp0DDZTemp\DDZPlay2" |
| if !Pkff!==3 echo;%%a>>"%~dp0DDZTemp\DDZPlay3" |
| if !Pkfp!==52 set pkdp1=%%a |
| if !Pkfp!==53 set pkdp2=%%a |
| if !Pkfp!==54 set pkdp3=%%a |
| ) |
| ) |
| :Fapai3 |
| ::发到每个玩家手中的牌 |
| ::此处进行重新排序。[`sort /+3 "%~dp0DDZTemp\DDZchupai"`] |
| for /l %%i in (1,1,3) do ( |
| echo, |
| echo, 玩家 %%i 的牌: |
| set pkp= |
| echo, |
| call :Pkhuase "%~dp0DDZTemp\DDZPlay%%i" |
| ) |
| echo, |
| :JiaoDiZhu |
| ::此处增加叫地主与积分翻倍计算。 |
| ::采用随机地主形式。玩家DDZPlay1为操作者,其余两个为电脑。 |
| ::但在后面的操作中,玩家为随机的一个,剩下的两个为电脑。 |
| set tm= |
| set DiZhu= |
| set "tm=%time:~10,1%" |
| if %tm% geq 0 if %tm% leq 3 set DiZhu=DDZPlay1&set NongM1=DDZPlay2&set NongM2=DDZPlay3 |
| if %tm% geq 4 if %tm% leq 6 set DiZhu=DDZPlay2&set NongM1=DDZPlay1&set NongM2=DDZPlay3 |
| if %tm% geq 7 if %tm% leq 9 set DiZhu=DDZPlay3&set NongM1=DDZPlay1&set NongM2=DDZPlay2 |
| :Fapai4 |
| ::底牌 |
| echo;!pkdp1!>>"%~dp0DDZTemp\%DiZhu%" |
| echo;!pkdp2!>>"%~dp0DDZTemp\%DiZhu%" |
| echo;!pkdp3!>>"%~dp0DDZTemp\%DiZhu%" |
| echo, |
| echo, %DiZhu% 是地主 |
| echo, |
| if /i not %DiZhu% == DDZPlay1 echo, DDZPlay1 是农民 |
| if /i not %DiZhu% == DDZPlay2 echo, DDZPlay2 是农民 |
| if /i not %DiZhu% == DDZPlay3 echo, DDZPlay3 是农民 |
| echo, |
| echo 底牌是: |
| echo, |
| for /l %%i in (1,1,3) do ( |
| set pkp=!pkdp%%i! |
| call :HuaSe |
| if "!pkp:~2,1!"=="0" (echo !Pkp1! !Pkp2! !pkp:~3,1! !pkdp%%i!) else (echo !Pkp1! !Pkp2! !pkp:~2,2! !pkdp%%i!) |
| ) |
| echo, |
| ::处理临时文件 |
| cd.>"%~dp0DDZTemp\DDZFpsjx"&cd.>"%~dp0DDZTemp\DDZFpsj"&cd.>"%~dp0DDZTemp\DDZFapai" |
| goto :eof |
| |
| ::---------------------------★代码分割线:排序★--------------------------- |
| :排序 |
| ::已设定为三个玩家排序,直接调用即可。 |
| ::对三个玩家的牌进行排序,排序是必须的。 |
| for /l %%i in (1,1,3) do ( |
| cd.>"%~dp0DDZTemp\DDZPx" |
| sort /+3 "%~dp0DDZTemp\DDZPlay%%i">>"%~dp0DDZTemp\DDZPx" |
| cd.>"%~dp0DDZTemp\DDZPlay%%i" |
| type "%~dp0DDZTemp\DDZPx">>"%~dp0DDZTemp\DDZPlay%%i" |
| ) |
| cd.>"%~dp0DDZTemp\DDZPx" |
| echo, |
| goto :eof |
| :Suijpx |
| ::随机排序——或许要减少临时文件、提高速度,可优化以下项目: |
| ::set ddd=for——去掉一个临时文件 |
| ::call :Suijipx——去掉外部处理 |
| ::优化为调用模式。 |
| set sjpx= |
| cd.>"%~dp0DDZTemp\DDZFpsjx"&cd.>"%~dp0DDZTemp\DDZFpsj" |
| for /f "tokens=1,* delims=:" %%a in ('findstr /n .* "%~dp0DDZTemp\DDZFapai"') do ( |
| if not "%%a"=="" set sjxh=%%a |
| call :Suijipx |
| echo;!sjpx!:%%b>>"%~dp0DDZTemp\DDZFpsjx" |
| )>nul 2>nul |
| for /f "tokens=1,* delims=:" %%a in ('sort "%~dp0DDZTemp\DDZFpsjx"') do echo;%%b>>"%~dp0DDZTemp\DDZFpsj" |
| goto :eof |
| :Suijipx |
| set /a sjpx=!sjxh!+%random:~-2,2% |
| goto :eof |
| ::---------------------------★代码分割线:自家牌分析★--------------------------- |
| ::分析自己的牌,看自己有什么牌 |
| ::牌的关系只有两种,要么相等——等差等于0,要么相差——等差等于1。 |
| ::调用:call :自家牌分析 "%~dp0DDZTemp\%DiZhu%" |
| ::获得分析结果:!pkvar! |
| :自家牌分析 |
| echo; |
| echo 【%MyPoker%】自家牌分析 |
| echo; |
| set pkvar= |
| set pkvar1= |
| set pkvar0= |
| set pkvar2= |
| set pkvar3= |
| set pk1= |
| set pk2= |
| set pk3= |
| set pk4= |
| set pk5= |
| set dc=0 |
| set nb=0 |
| set nb1=0 |
| set nb0=0 |
| for /f "usebackq" %%a in (%1) do if not "%%a"=="" ( |
| set pk1=%%a |
| set /a dc=!pk1:~2,2!-!pk2:~2,2! |
| if !dc!==0 ( |
| set /a nb0+=1 |
| set pkvar0=!pk2! !pk1! |
| set pkvar2=!pk3! !pk2! !pk1! |
| set pkvar3=!pk4! !pk3! !pk2! !pk1! |
| if !nb0! == 1 if not "!pk2!"=="" set pkvar=!pk1:~2,2!一对子2&echo !pkvar! 一对 pkvar0=!pkvar0! |
| if !nb0! == 2 if not "!pk3!"=="" set pkvar=!pk1:~2,2!三张牌3&echo !pkvar! 三个 pkvar2=!pkvar2! |
| if !nb0! == 3 if not "!pk4!"=="" set pkvar=!pk1:~2,2!小炸弹4&echo !pkvar! 炸弹 pkvar3=!pkvar3! |
| ) |
| if !dc!==1 ( |
| set /a nb1+=1 |
| set nb0=0 |
| set pkvar1=!pk1! !pkvar1! |
| if !nb1! geq 5 set pkvar=!pk1:~2,2!长顺子!nb1!&echo !pkvar! 顺子 pkvar1=!pkvar1! |
| ) |
| if not !dc!==0 if not !dc!==1 (set nb1=0&set nb0=0&set pkvar1=&set pkvar0=) |
| |
| set pk5=!pk4! |
| set pk4=!pk3! |
| set pk3=!pk2! |
| set pk2=!pk1! |
| ) |
| goto :eof |
| |
| ::---------------------------★代码分割线:牌面转换★--------------------------- |
| ::调用方法 set HuaSe="%~dp0DDZTemp\%DiZhu%"&call :Pkhuase |
| ::`sort /+3 %HuaSe%` |
| :Pkhuase |
| for /f "usebackq tokens=*" %%a in (%1) do ( |
| set pkp=%%a |
| call :HuaSe |
| if "!pkp:~2,1!"=="0" (echo !Pkp1! !Pkp2! !pkp:~3,1! %%a) else (echo !Pkp1! !Pkp2! !pkp:~2,2! %%a) |
| ) |
| ::牌面转换。将代码转换为牌面花色,可以在处理完所有数据后再转换。 |
| goto :eof |
| :HuaSe |
| set Pkp2= |
| set Pkp1= |
| if "!pkp:~0,1!"=="1" set Pkp1=副牌 |
| if "!pkp:~0,1!"=="2" set Pkp1=主牌 |
| if "!pkp:~1,1!"=="1" set Pkp2=方片 |
| if "!pkp:~1,1!"=="2" set Pkp2=草花 |
| if "!pkp:~1,1!"=="3" set Pkp2=红桃 |
| if "!pkp:~1,1!"=="4" set Pkp2=黑桃 |
| if not "!pkp:~0,2!"=="28" ( |
| if not "!pkp:~0,2!"=="29" (set /a pkp=!pkp!-10) else (set pkp=大王大王) |
| ) else (set pkp=小王小王) |
| if "!pkp:~2,2!"=="11" set pkp=JJJ |
| if "!pkp:~2,2!"=="12" set pkp=QQQ |
| if "!pkp:~2,2!"=="13" set pkp=KKK |
| if "!pkp:~2,2!"=="14" set pkp=AAA |
| if "!pkp:~2,2!"=="20" set pkp=222 |
| goto :eof |
| ::---------------------------★代码分割线:桌面牌分析★--------------------------- |
| ::分析上家打出的牌,分析自己打出的牌,看看两者哪个大,下家出牌是否合乎规则。稍微复杂了点,需要改进。 |
| ::可喜的是,最后找到了各种牌对比的接口“!pkvar!”。 |
| ::与自家牌分析有所差距,自家牌分析不受牌的张数影响,而桌面牌分析则考虑牌的张数。 |
| ::普通调用示例: |
| :: set PerPoker="%~dp0DDZTemp\%DiZhu%ed" |
| :: call :牌型分析&call :牌型分析结果 |
| |
| :牌型分析 |
| ::用于分析桌面上的牌(包括自家和对家的)的牌型,需要确定牌的张数和顺序,区别于自家牌分析。 |
| set pk1= |
| set pk2= |
| set pk3= |
| set pk4= |
| set pk5= |
| set zs=0 |
| set dc= |
| set dc1= |
| set dc2= |
| set dc3= |
| set dc4= |
| set nb=0 |
| set nb0=0 |
| set nb1=0 |
| set tj=0 |
| set tj1=0 |
| set tj2=0 |
| set pkstr= |
| set pkvar= |
| for /f "usebackq" %%a in (%1) do if not "%%a"=="" set /a zs+=1 |
| if !zs!==1 for /f "usebackq" %%a in (%1) do set pkvar=%%a单张牌1&set pkvar=!pkvar:~2,8!&goto :eof |
| if "!zs!" gtr "1" for /f "usebackq" %%a in (%1) do if not "%%a"=="" ( |
| set pk1=%%a |
| if not "!pk2!"=="" if not "!pk1!"=="" set /a dc=!pk1:~2,2!-!pk2:~2,2! |
| if not "!pk3!"=="" if not "!pk2!"=="" set /a dc1=!pk2:~2,2!-!pk3:~2,2! |
| if not "!pk4!"=="" if not "!pk3!"=="" set /a dc2=!pk3:~2,2!-!pk4:~2,2! |
| if not "!pk5!"=="" if not "!pk4!"=="" set /a dc3=!pk4:~2,2!-!pk5:~2,2! |
| if not "!pk1!"=="" if not "!pk5!"=="" set /a dc4=!pk1:~2,2!-!pk5:~2,2! |
| set pk5=!pk4! |
| set pk4=!pk3! |
| set pk3=!pk2! |
| set pk2=!pk1! |
| if "!dc!"=="0" if "!zs!"=="2" (if "!pk1:~2,2!"=="99" (set pkvar=99王炸弹2) else (set pkvar=!pk1:~2,2!一对子2)&goto :eof) else (set tj1=!pk1:~2,2!) |
| if "!dc!"=="0" if "!dc1!"=="0" (if "!zs!"=="3" (set pkvar=!pk1:~2,2!三张牌!zs!&goto :eof) else (set /a tj+=1&set tj2=!pk1:~2,2!)) |
| if "!zs!"=="4" if "!dc!"=="0" if "!dc1!"=="0" if "!dc2!"=="0" set pkvar=!pk1:~2,2!小炸弹4 |
| if "!zs!"=="4" if "!dc!"=="0" if "!dc1!"=="0" if not "!dc2!"=="0" set pkvar=!pk2:~2,2!三带一4 |
| if "!zs!"=="4" if not "!dc!"=="0" if "!dc1!"=="0" if "!dc2!"=="0" set pkvar=!pk2:~2,2!三带一4 |
| if "!zs!"=="5" if "!dc!"=="0" if not "!dc1!"=="0" if "!dc2!"=="0" if "!dc3!"=="0" set pkvar=!pk4:~2,2!三带对5 |
| if "!zs!"=="5" if "!dc!"=="0" if "!dc1!"=="0" if not "!dc2!"=="0" if "!dc3!"=="0" set pkvar=!pk4:~2,2!三带对5 |
| if "!zs!"=="5" if "!dc!"=="0" if not "!dc1!"=="0" if "!dc2!"=="0" if !dc3!==0 if not !dc4!==0 set pkvar=!pk4:~2,2!四带一5 |
| if "!zs!"=="5" if "!dc!"=="0" if "!dc1!"=="0" if "!dc2!"=="0" if not !dc3!==0 if not !dc4!==0 set pkvar=!pk4:~2,2!四带一5 |
| if "!zs!"=="6" if "!dc!"=="0" if not "!dc1!"=="0" if "!dc2!"=="0" if !dc3!==0 if not !dc4!==0 set pkvar=!pk4:~2,2!四带对6 |
| if "!zs!"=="6" if "!dc!"=="0" if "!dc1!"=="0" if "!dc2!"=="0" if not !dc3!==0 if not !dc4!==0 set pkvar=!pk4:~2,2!四带对6 |
| if !zs! gtr 7 if !dc!==0 if !dc1!==0 if !dc2!==1 if !dc3!==0 if !dc4!==1 set pkvar=!pk1:~2,2!飞机带!zs! |
| if !zs! gtr 7 if !dc!==0 if !dc1!==1 if !dc2!==0 if !dc3!==0 if !dc4!==1 set pkvar=!pk1:~2,2!飞机带!zs! |
| if !zs! geq 5 if !dc!==1 if !dc1!==1 if !dc2!==1 if !dc3!==1 if !dc4!==4 set pkvar=!pk1:~2,2!长顺子!zs! |
| if !zs! gtr 5 if "!dc!"=="0" if "!dc1!"=="1" if "!dc2!"=="0" if "!dc3!"=="1" if !dc4!==2 set pkvar=!pk1:~2,2!连对顺!zs! |
| if not "!dc!"=="" if not !dc!==0 if not !dc!==1 set /a nb+=1 |
| if not "!dc!"=="" if !dc!==1 set /a nb1+=1 |
| if not "!dc!"=="" if !dc!==0 set /a nb0+=1 |
| ) |
| )>nul 2>nul |
| echo, |
| if "!pkvar!"=="长顺子" if !nb1! == 11 if !nb! == 0 (if !nb0! == 0 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=) |
| if "!pkvar!"=="连对顺" ( |
| set /a jd=!nb0!*2 |
| if !jd!==!zs! (if !nb! == 0 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=) |
| ) |
| set dd= |
| ::此处有冲突,会覆盖上面的结果。 |
| if !tj! gtr 0 for /l %%a in (2,1,20) do if !tj!==%%a ( |
| set /a dd=%%a*3 |
| if !dd!==!zs! set pkvar=!pk2:~2,2!三顺子!zs! |
| ) |
| if "!pkvar!"=="四带一" ( |
| if !nb0! == 4 (set pkvar=!pkvar!!zs!) else (set pkvar=) |
| ) |
| if "!pkvar!"=="四带对" ( |
| if !nb0! == 5 (set pkvar=!pkvar!!zs!) else (set pkvar=) |
| ) |
| |
| if "!zs!"=="8" if !tj!==2 (if !nb0! equ 2 (if !nb1! equ 1 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=)) |
| if "!zs!"=="10" if !tj!==2 (if !nb0! geq 4 (if !nb1! geq 1 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=)) |
| if "!zs!"=="12" if !tj!==3 (if !nb0! geq 3 (if !nb1! geq 2 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=)) |
| if "!zs!"=="15" if !tj!==3 (if !nb0! geq 9 (if !nb1! geq 2 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=)) |
| if "!zs!"=="16" if !tj!==4 (if !nb0! geq 4 (if !nb1! geq 3 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=)) |
| if "!zs!"=="20" if !tj!==4 (if !nb0! geq 12 (if !nb1! geq 3 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=)) |
| ) |
| goto :eof |
| :牌型分析结果 |
| ::将对家出的牌转换为一个简单的数字——!pkvar!。最大的牌+牌的类型+牌的张数 |
| ::set PkShangJia= |
| for /f "usebackq" %%a in (%PerPoker%) do set /p pkstr=%%a <nul |
| if not "!pkvar!"=="" (echo ——分析结果:【!pkvar:~2,3!】&set PkShangJia=!pkvar!) else (echo ——分析结果:【不符合规则的牌!】&goto Chupai) |
| echo pkvar:!pkvar!:!pkstr! zs:!zs! = nb:!nb! + nb0:!nb0! + nb1:!nb1! |
| echo, |
| goto :eof |
| |
| :比较结果 |
| ::出牌与吃牌分析结果 |
| ::分析上家的牌型和自家的牌型,然后比较两者是否相同牌型,自家是否比上家牌大。 |
| echo, |
| echo, (最后比较结果:【!PkShangJia!】 == 【!pkvar!】 【"!PkShangJia:~0,2!" lss "!pkvar:~0,2!"】) |
| echo, |
| if "!PkShangJia:~0,2!" lss "!pkvar:~0,2!" (if "!PkShangJia:~2,3!"=="!pkvar:~2,3!" if "!PkShangJia:~5,2!" == "!pkvar:~5,2!" echo 你的牌大过对家) else (echo 你出的牌不符合规则&goto Chupai) |
| echo, |
| goto :eof |
| ::---------------------------★代码分割线:规则演示★--------------------------- |
| :YSStart |
| ::总台 |
| cls |
| call :Fupai |
| call :Zhupai |
| call :Wangpai |
| pause |
| cls |
| call :Paixing |
| pause |
| goto :eof |
| :Fupai |
| ::展示副牌大小顺序 |
| ::副牌从3到10,用11代替J,12代替Q,13代替K,14代替A,列出大小顺序。 |
| ::加四位数1110、1210、1310、1410等转换为四位代号。四位代号更具编辑性。 |
| echo, |
| echo, 一、展示副牌大小顺序 |
| echo, |
| echo 方片(代号) 梅花(代号) 红心(代号) 黑桃(代号) |
| echo;================================================================ |
| for /l %%a in (3,1,14) do ( |
| set Pks=%%a |
| if %%a==11 set Pks=J |
| if %%a==12 set Pks=Q |
| if %%a==13 set Pks=K |
| if %%a==14 set Pks=A |
| set /a Pkfp=%%a+1110 |
| set /a Pkmh=%%a+1210 |
| set /a Pkhx=%%a+1310 |
| set /a Pkht=%%a+1410 |
| echo !Pks!(!Pkfp!) !Pks!(!Pkmh!) !Pks!(!Pkhx!) !Pks!(!Pkht!) |
| ) |
| echo;================================================================ |
| goto :eof |
| :Zhupai |
| ::展示主牌大小顺序 |
| echo, |
| echo, 二、展示主牌大小顺序 |
| echo, |
| echo 方片(代号) 梅花(代号) 红心(代号) 黑桃(代号) |
| echo;================================================================ |
| echo 2 2130 2 2230 2 2330 2 2430 |
| goto :eof |
| :Wangpai |
| ::展示王牌大小顺序 |
| echo, |
| echo, 三、展示王牌大小顺序 |
| echo, |
| echo;================================================================ |
| echo 小王 2899 大王 2999 |
| echo;================================================================ |
| echo, |
| goto :eof |
| :Paixing |
| ::牌型 |
| echo, |
| echo, 四、展示牌型和大小规则 |
| echo, |
| echo;================================================================ |
| echo (1) 单张:大小顺序从3(最小)到大王(最大); |
| echo (2) 一对:两张大小相同的牌,从3(最小)到2(最大); |
| echo (3) 三张:三张大小相同的牌,例如9-9-9; |
| echo (4) 三带一:根据三张的大小来比较,例如9-9-9-3盖过8-8-8-A; |
| echo (5) 三带对:根据三张的大小来比较,例如Q-Q-Q-6-6盖过10-10-10-K-K; |
| echo (6) 顺子:至少5张连续大小的牌,例如8-9-10-J-Q; |
| echo (7) 连对:至少3个连续大小的对子,例如10-10-J-J-Q-Q-K-K; |
| echo (8) 飞机:至少2个连续大小的三张,例如4-4-4-5-5-5; |
| echo (9) 飞机带翅膀:例如7-7-7-8-8-8-3-6,例如8-8-8-9-9-9-4-4-J-J; |
| echo (10) 四带二:例如6-6-6-6-8-9,例如J-J-J-J-9-9-Q-Q。 |
| echo (11) 炸弹:四张大小相同的牌,比王炸小,比其他牌大;A-A-A-A; |
| echo (12) 王炸:一对王,这是最大的组合,能够盖过包括炸弹在内的任何牌型; |
| echo (13) 除三带一、四带一外,王牌不能和副牌混用。2不能和副牌组成顺子和连对。 |
| echo (14) 什么类型的牌用什么类型的牌打,但炸弹能够打任何牌。 |
| echo;================================================================ |
| goto :eofCOPY |