本帖最后由 cjiabing 于 2011-6-27 01:28 编辑
初次整合,初见雏形 使用方法,进入游戏,输入代号出牌。比如,想出 三个6带一个K ,则输入“1116 1216 1416 1323”并回车。
代号可在游戏规则里查,暂时这样。
先把代码放这里,过段时间有空再处理。
现在的问题是,!pkvar!不懂出什么问题了,竟然不对了!~找不到原因!~可恶!~
下一步:确定两个电脑玩家如何自动出牌,利用!pkvar!作为接口~
-
- @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=)
- rem echo %%a : !pk1! !pk2! !pk3! !pk4! !pk5!$$ pkvar=!pkvar! ##!nb0!=!nb1!##&pause
- 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=)
- )
- rem if !zs! gtr 7 (
- 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 :eof
复制代码
|