[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
我觉得应该使用第三方命令来美化界面
ConsExt就很不错!!

TOP

为什么批处理里面不能用鼠标点呢?
真是郁闷 1!

TOP

那些是unicode字符集里面的符号

TOP

回头找了一下,原来发过帖的,结果的第一个就是红心

批处理乱码——猜猜我的QQ密码:http://www.bathome.net/viewthread.php?tid=5558

êμó?1¤???áo?ê1ó?£?ò?±?í?ê±×??ˉ?ˉDí?à???tμ?±êU

用Ctrl+字母的方式也能调出一些来!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

楼上是说曾经有代码出错的时候显示出扑克符号?我是真想知道如何在ANSI里显示这些符号啊

TOP

牌型分析与两幅牌比较大小
安静了好些天,今天来看看,做了一个比较上家牌和自家牌的程序。
将牌转换为可以对接的数据,使用一个数据接口!pkvar!。
以下可以分析两副牌的牌型、张数、最大的牌,可以用来比较两副牌的大小。
当然,问题还是有的,关键是把代码搞出来了——我的一贯作风,实用主义。
使用我的发牌方法,你可以用发牌机制来实现。下一步继续实现分析牌,先做单机的吧。
  1. @echo off&setlocal enabledelayedexpansion
  2. mode con cols=86 lines=45
  3. title 批处理版斗地主游戏
  4. :桌面牌分析
  5. ::分析过程使用最笨的方法:计算各个数据之间的数学关系。计算相邻五个数据的数学关系,得知对子的差值为0,顺子的差值为1。
  6. ::可根据牌子的张数推断牌型,结合它们的数学关系推断纯粹的连对牌和顺子牌。
  7. ::计算较多,变量也较多,但过程很简单。
  8. ::似乎比原计划的要复杂多了,但为了更多可操作性,目前仅能如此了。
  9. ::可惜的是,最后找到了各种牌对比的接口“!pkvar!”。
  10. :比较牌大小
  11. ::shangjia为对家牌3.txt,后处理为自家牌4.txt。
  12. set chupai=3.txt
  13. call :牌型分析
  14. echo,----------------------------------------------------------------------
  15. echo     上家的牌:
  16. call :牌型分析结果
  17. set pkshangjia=!pkvar!
  18. set chupai=4.txt
  19. call :牌型分析
  20. echo,----------------------------------------------------------------------
  21. echo     自家的牌:
  22. call :牌型分析结果
  23. echo,----------------------------------------------------------------------
  24. echo,     
  25. echo,    最后比较结果:
  26. echo,
  27. echo,
  28. 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  你出的牌不符合规则)
  29. echo,
  30. echo,
  31. echo,----------------------------------------------------------------------
  32. pause
  33. exit
  34. :牌型分析结果
  35. ::将对家出的牌转换为一个简单的数字。最大的牌+牌的类型+牌的张数
  36. echo,
  37. for /f %%a in (%chupai%) do set /p pkstr=%%a <nul
  38. if not "!pkvar!"=="" (echo ——分析结果:!pkvar!) else (echo ——分析结果:不符合规则的牌!)
  39. echo pkvar:!pkvar!:!pkstr!  zs:!zs!  =  nb:!nb!  +  nb0:!nb0!  +  nb1:!nb1!
  40. echo,
  41. goto :eof
  42. :牌型分析
  43. set pk1=
  44. set pk2=
  45. set pk3=
  46. set pk4=
  47. set pk5=
  48. set zs=0
  49. set dc=
  50. set dc1=
  51. set dc2=
  52. set dc3=
  53. set dc4=
  54. set nb=0
  55. set nb0=0
  56. set nb1=0
  57. set tj=0
  58. set tj1=0
  59. set tj2=0
  60. set pkstr=
  61. set pkvar=
  62. for /f %%a in (%chupai%) do if not "%%a"=="" set /a zs+=1
  63. if !zs!==1 for /f %%a in (%chupai%) do set pkvar=%%a单张牌1&set pkvar=!pkvar:~2,8!&goto :eof
  64. if "!zs!" gtr "1" for /f %%a in (%chupai%) do if not "%%a"=="" (
  65.     set pk1=%%a
  66.     if not "!pk2!"=="" if not "!pk1!"=="" set /a dc=!pk1:~2,2!-!pk2:~2,2!
  67.     if not "!pk3!"=="" if not "!pk2!"=="" set /a dc1=!pk2:~2,2!-!pk3:~2,2!
  68.     if not "!pk4!"=="" if not "!pk3!"=="" set /a dc2=!pk3:~2,2!-!pk4:~2,2!
  69.     if not "!pk5!"=="" if not "!pk4!"=="" set /a dc3=!pk4:~2,2!-!pk5:~2,2!
  70.     if not "!pk1!"=="" if not "!pk5!"=="" set /a dc4=!pk1:~2,2!-!pk5:~2,2!
  71.     set pk5=!pk4!
  72.     set pk4=!pk3!
  73.     set pk3=!pk2!
  74.     set pk2=!pk1!
  75.     if "!dc!"=="0" if "!zs!"=="2" (if "!pk1:~2,2!"=="99" (set pkvar=99王炸弹2) else (set pkvar=%%a一对子2)&goto :eof) else (set tj1=!pk1:~2,2!)
  76.     if "!dc!"=="0" if "!dc1!"=="0" (if "!zs!"=="3" (set pkvar=三个&goto :eof) else (set /a tj+=1&set tj2=!pk1:~2,2!))
  77.     if "!zs!"=="4" if "!dc!"=="0" if "!dc1!"=="0" if "!dc2!"=="0" set pkvar=!pk1:~2,2!小炸弹4
  78.     if "!zs!"=="4" if "!dc!"=="0" if "!dc1!"=="0" if not "!dc2!"=="0" set pkvar=!pk2:~2,2!三带一4
  79.     if "!zs!"=="4" if not "!dc!"=="0" if "!dc1!"=="0" if "!dc2!"=="0" set pkvar=!pk2:~2,2!三带一4
  80.     if "!zs!"=="5" if "!dc!"=="0" if not "!dc1!"=="0" if "!dc2!"=="0" if "!dc3!"=="0" set pkvar=!pk4:~2,2!三带对5
  81.     if "!zs!"=="5" if "!dc!"=="0" if "!dc1!"=="0" if not "!dc2!"=="0" if "!dc3!"=="0" set pkvar=!pk4:~2,2!三带对5
  82.     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
  83.     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
  84.     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
  85.     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
  86.     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!
  87.     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!
  88.     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!
  89.     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!
  90.     if not "!dc!"=="" if not !dc!==0 if not !dc!==1 set /a nb+=1
  91.     if not "!dc!"=="" if !dc!==1 set /a nb1+=1
  92.     if not "!dc!"=="" if !dc!==0 set /a nb0+=1
  93. )
  94. )>nul 2>nul
  95. echo,
  96. if "!pkvar!"=="长顺子" if !nb1! == 11 if !nb! == 0 (if !nb0! == 0 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=)
  97. if "!pkvar!"=="连对顺" (
  98.     set /a jd=!nb0!*2
  99.     if !jd!==!zs! (if !nb! == 0 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=)
  100. )
  101. set dd=
  102. ::此处有冲突,会覆盖上面的结果。
  103. if !tj! gtr 0 for /l %%a in (2,1,20) do if !tj!==%%a (
  104.     set /a dd=%%a*3
  105.     if !dd!==!zs! set pkvar=三顺子!zs!
  106. )
  107. if "!pkvar!"=="四带一" (
  108.     if !nb0! == 4 (set pkvar=!pkvar!!zs!) else (set pkvar=)
  109. )
  110. if "!pkvar!"=="四带对" (
  111.     if !nb0! == 5 (set pkvar=!pkvar!!zs!) else (set pkvar=)
  112. )
  113. rem if !zs! gtr 7  (
  114.     if "!zs!"=="8"  if !tj!==2 (if !nb0! equ 2 (if !nb1! equ 1 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=))
  115.     if "!zs!"=="10" if !tj!==2 (if !nb0! geq 4 (if !nb1! geq 1 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=))
  116.     if "!zs!"=="12" if !tj!==3 (if !nb0! geq 3 (if !nb1! geq 2 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=))
  117.     if "!zs!"=="15" if !tj!==3 (if !nb0! geq 9 (if !nb1! geq 2 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=))
  118.     if "!zs!"=="16" if !tj!==4 (if !nb0! geq 4 (if !nb1! geq 3 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=))
  119.     if "!zs!"=="20" if !tj!==4 (if !nb0! geq 12 (if !nb1! geq 3 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=))
  120. )
  121. goto :eof
  122. ::if "!pkvar!"=="三顺" if !nb0! == 4 (if !nb1! == 1 (set pkvar=!pkvar!!zs!) else (set pkvar=)) else (set pkvar=)
  123. 1116
  124. 1216
  125. 1316
  126. 1317
  127. 1318
  128. 1119
  129. 1320
  130. if "!dc!"=="0" if "!dc1!"=="0" if not "!dc2!"=="0" if "!dc3!"=="0"
复制代码
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

22# wankoilz
看caroku的代码,我想起以前搞一些奇怪的代码出错时显示的就是这些符号!~谢谢!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

难道ansi (这里指GB18030)字符集里面就没有扑克的符号吗,只知道unicode字符集里面有,真是郁闷... ...

TOP

只演示了部分功能,界面只有一个玩家的牌。
随机是模拟洗牌,随机次数的前后插入=。=

要完整功能,需要把函数重新组合。
还有些函数没完成,最主要的控制函数。

TOP

19# caruko
嗯,不错,很简明!~
出牌后没有其他反映呢?比如,升剩下几个牌,等。
发牌随机似乎不够!~
向您学习学习!~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

本帖最后由 caruko 于 2011-6-4 01:59 编辑

=.=
斗地主----半成品吧。

出牌法: 假如要出 JJJ35 ,就输入JJJ35 ,出10 的话输入 1 ,大王为S,小王为M。 字符间有无空格不影响。

输入E 退出,输入P,PASS。
当测试中提示牌值小无法出牌时,可先输入P,再开始新一轮。


完善了规则函数比较大小功能。

欢迎测试BUG。
  1. @ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
  2. mode con cols=100 lines=40
  3. call :load
  4. call :洗牌
  5. call :发牌
  6. for %%i in (1 2 3) do (
  7.     call :排序 "!Player_%%i_牌!"
  8.     set "Player_%%i_牌=!ecode!"
  9. )
  10. call :显示
  11. :loop
  12. call :出牌 Player_1_牌 !上手牌! ||goto :loop
  13. call :显示
  14. if !input!.==E. goto :eof
  15. goto :loop
  16. goto :eof
  17. ::加载资源,初始数据。
  18. :load
  19. set "资源_花色=,,,"
  20. set "资源_牌值=A,2,3,4,5,6,7,8,9,10,J,Q,K"
  21. set "资源_新牌="
  22. set /a _1=10,_2=15,_A=14,_J=11,_Q=12,_K=13,_3=3,_4=4,_5=5,_6=6,_7=7,_8=8,_9=9,_10=10,_S=17,_M=16
  23. for %%i in (!资源_牌值!) do for %%j in (!资源_花色!) do (
  24.     set "资源_新牌=!资源_新牌! %%i_%%j"
  25. )
  26. set "资源_新牌=%资源_新牌% S_U M_O"
  27. set "上手牌=无"
  28. goto :eof
  29. :洗牌
  30. set "待发_牌=!资源_新牌!"
  31. set "temp="
  32. set /a "n=!RANDOM:~-1! + 8"
  33. for /l %%i in (1 1 %n%) do (
  34.     for %%j in (!待发_牌!) do (
  35.         set/a flag=!RANDOM!%%2
  36.         if !flag! equ 1 (set "temp=!temp! %%j") else set "temp=%%j !temp!"
  37.     )
  38.     set "待发_牌=!temp!"
  39.     set "temp="
  40. )
  41. goto :eof
  42. :发牌 目前只管3人。
  43. set /a n=0
  44. set "Player_1_牌="
  45. set "Player_2_牌="
  46. set "Player_3_牌="
  47. for %%i in (!待发_牌!) do (
  48.     set /a n+=1
  49.     if !n! lss 52 (
  50.         set /a flag=n %% 3
  51.         if !flag! equ 0 (
  52.             set "Player_1_牌=!Player_1_牌! %%i"
  53.             set 待发_牌=!待发_牌:%%i=!
  54.         )
  55.         if !flag! equ 1 (
  56.             set "Player_2_牌=!Player_2_牌! %%i"
  57.             set 待发_牌=!待发_牌:%%i=!
  58.         )
  59.         if !flag! equ 2 (
  60.             set "Player_3_牌=!Player_3_牌! %%i"
  61.             set 待发_牌=!待发_牌:%%i=!
  62.         )
  63.     )
  64. )
  65. set "底牌=!待发_牌!"
  66. goto :eof
  67. :排序 [var] 给牌排序,返回ecode
  68. set "ecode="
  69. for %%i in (S M 2 A K Q J 1 9 8 7 6 5 4 3) do (
  70.     for %%j in (%~1) do (
  71.         set "temp=%%j"
  72.         if "%%i"=="!temp:~0,1!" set ecode=!ecode! %%j
  73.     )
  74. )
  75. goto :eof
  76. :显示 暂时只显示player1的牌.
  77. cls&set /a n=0
  78. setlocal
  79. for %%i in (!player_1_牌!) do (
  80.     set /a n+=1
  81.     if !n! lss 11 (
  82.         set "p1=!p1!┏━━┓"
  83.         set "p5=!p5!┗━━┛"
  84.         set "p3=!p3!┃    ┃"
  85.         for /f "tokens=1,2 delims=_" %%a in ("%%i") do (
  86.             set "p2=!p2!┃%%a   ┃"
  87.             set "p4=!p4!┃   %%b┃"
  88.         )
  89.     ) else (
  90.         set "p6=!p6!┏━━┓"
  91.         set "p10=!p10!┗━━┛"
  92.         set "p8=!p8!┃    ┃"
  93.         for /f "tokens=1,2 delims=_" %%a in ("%%i") do (
  94.             set "p7=!p7!┃%%a   ┃"
  95.             set "p9=!p9!┃   %%b┃"
  96.         )
  97.     )
  98. )
  99. for /l %%i in (-20,1,10) do (
  100.     echo,!p%%i:10 =10!
  101. )
  102. endlocal
  103. goto :eof
  104. :出牌 [Player_n] [上手牌值] 假如要出 JJJ35 ,就输入:J J J 3 5
  105. set "出牌="
  106. set /p input=请出牌:
  107. echo,!input!|findstr "[^1-9JQKEP ]" >nul && (title 输入字符不合要求!&exit /b -1)
  108. if !input!.==E. (title 退出!&exit /b 0)
  109. if !input!.==P. (title PASS!&set 上手牌=无&exit /b 0)
  110. set "input=!input: =!"&set "temp="
  111. for /l %%i in (0,1,19) do set "temp=!temp! !input:~%%i,1!"
  112. set "input=!temp!"
  113. call :规则 "!input!" "%~2" || exit /b -2
  114. setlocal
  115. for %%i in (!input!) do (
  116.     set "flag=flase"
  117.     for %%j in (!%1!) do (
  118.         set "temp=%%j"
  119.         if "!flag!"=="flase" (
  120.             if "%%i"=="!temp:~0,1!" (
  121.                 set "出牌=!出牌! %%j"
  122.                 set "%1=!%1:%%j=!"
  123.                 set "flag=true"
  124.             )
  125.         )
  126.     )
  127.     if "!flag!"=="flase" (
  128.         endlocal
  129.         title 您要出的一些牌不存在!
  130.         exit /b -3
  131.     )
  132. )
  133. set temp=!%1!
  134. endlocal&set %1=%temp%&set 出牌=%出牌%
  135. if not "!出牌!"=="" set 上手牌=!ecode!
  136. exit /b 0
  137. :规则 [此手牌] [上手牌值] 检测出牌是否符合规则
  138. setlocal
  139. set "v="
  140. set "temp1=%~1"
  141. rem set "temp2=%~2"
  142. set "temp=!temp1: =!"
  143. if "!temp!"=="SM" set "v=王炸"
  144. if "!temp!"=="MS" set "v=王炸"
  145. if not %v%.==. (
  146.     endlocal
  147.     set ecode=%v%
  148.     exit /b 0
  149. )
  150. set /a n=0
  151. set "str=34567891JQKA"
  152. set "str1=3344556677889911JJQQKKAA"
  153. set "str2=333444555666777888999111JJJQQQKKKAAA"
  154. for %%B in (!temp1!) do set /a n+=1
  155. for /f "tokens=1-20" %%a in ("!temp1!") do (
  156.     rem 单张  1
  157.     if "%%b"=="" (
  158.         set v=单张_!_%%a!_1
  159.     )
  160.     rem 一对  2
  161.     if "%%a"=="%%b" if "%%c"=="" (
  162.         set v=对子_!_%%a!_1
  163.     )
  164.     rem 三张  3
  165.     if "%%a"=="%%b" if "%%a"=="%%c" if %%d.==. (
  166.         set v=三张_!_%%a!_1
  167.     )
  168.     rem 三带一 4
  169.     if "%%a"=="%%b" if "%%a"=="%%c" if not %%d.==. if %%e.==. (
  170.         set v=三带一_!_%%a!_1
  171.     )
  172.     rem 三带对 5
  173.     if "%%a"=="%%b" if "%%a"=="%%c" if %%d.==%%e. if %%f.==. (
  174.         set v=三带对_!_%%a!_1
  175.     )
  176.     rem 顺子 6
  177.     for %%A in (!temp!) do (
  178.         if not "!str:%%A=!"=="!str!" (
  179.             if !n! GEQ 5 set v=顺子_%%a_!n!
  180.         )
  181.     )
  182.     rem 连对 7
  183.     set /a flag=n %% 2
  184.     if !flag! equ 0 (
  185.         for %%A in (!temp!) do (
  186.             if not "!str1:%%A=!"=="!str1!" (
  187.                 set /a flag=n / 2
  188.                 if !flag! GEQ 3 set v=连对_!_%%a!_!flag!
  189.           )
  190.        )
  191.     )
  192.     rem 三张顺子 8
  193.     set /a flag= n %% 3
  194.     if !flag! equ 0 (
  195.         for %%A in (!temp!) do (
  196.             if not "!str2:%%A=!"=="!str2!" (
  197.                 set /a flag=n / 3
  198.                 if !flag! GEQ 2 set v=三张顺子_!_%%a!_!flag!
  199.             )
  200.         )
  201.     )
  202.     rem 炸弹 9
  203.     if %%a.==%%b. if %%a.==%%c. if %%a.==%%d. if %%e.==. (
  204.         set v=炸弹_!_%%a!_1
  205.     )
  206.     rem 飞机 10
  207.     set /a flag=n %% 4,flag2=n/4,t=0
  208.     if !flag! equ 0 if !flag2! GEQ 2 (
  209.         set /a flag=n / 4 * 3
  210.         for %%A in (!flag!) do (
  211.             set "tstr=!temp:~0,%%A!"
  212.             set "tstr2=!temp:~%%A!"
  213.             for /f "tokens=1,2" %%B in ("!tstr! !tstr2!") do (
  214.                 if not "!str2:%%B=!"=="!str2!" set t=三连
  215.                 if "!str2:%%C=!"=="!str2!" set t=!t!飞机
  216.             )
  217.         )
  218.         if "!t!"=="三连飞机" (
  219.             set v=飞机_!_%%a!_!flag2!
  220.         )
  221.     )
  222.     rem 三张带对顺 11
  223.     set /a flag=n %% 5,flag2=n / 5,t=0
  224.     if !flag! equ 0 if !flag2! GEQ 2 (
  225.         set /a flag=n / 5 * 3
  226.         for %%A in (!flag!) do (
  227.             set "tstr=!temp:~0,%%A!"
  228.             set "tstr2=!temp:~%%A!"
  229.             for %%B in (!tstr!) do if not "!str2:%%B=!"=="!str2!" set t=三连
  230.         )
  231.         if "!t!"=="三连" (
  232.             set /a flag=n-flag-1
  233.             for /l %%A in (0 2 !flag!) do set fstr1=!fstr1!!tstr2:~%%A,1!
  234.             for /l %%A in (1 2 !flag!) do set fstr2=!fstr2!!tstr2:~%%A,1!
  235.             if "!fstr1!"=="!fstr2!" set "t=!t!对子"
  236.         )
  237.         if "!t!"=="三连对子" (
  238.             set v=三张带一对顺子_!_%%a!_!flag2!
  239.         )
  240.     )
  241.     rem 四带二 12
  242.     if %%a.==%%b. if %%a.==%%c. if %%a.==%%d. if not %%e.==. (
  243.         if %%e.==%%f. if %%g.==%%h. if %%i.==. set v=四带对_%%a_1
  244.         if not %%e.==%%f. if %%g.==. if not %%f.==. set v=四带二_%%a_1
  245.     )
  246. )
  247. if %v%.==. (
  248.     endlocal
  249.     title 出牌不符合规则!
  250.     exit /b -1
  251. ) else (
  252.     if "%~2"=="无" (
  253.         endlocal
  254.         set ecode=%v%
  255.         exit /b 0
  256.     )
  257.     for /f "tokens=1-3 delims=_" %%a in ("!v!") do (
  258.         set "#a=%%a"
  259.         set /a #b=%%b,#c=%%c,k=0
  260.     )
  261.     for /f "tokens=1-3 delims=_" %%a in ("%~2") do (
  262.         set "$a=%%a"
  263.         set /a $b=%%b,$c=%%c
  264.     )
  265.     if !#a!.==王炸. (
  266.         endlocal
  267.         set ecode=%v%
  268.         exit /b 0
  269.     )
  270.     if !#a!.==炸弹. if not !$a!.==炸弹. (
  271.         endlocal
  272.         set ecode=%v%
  273.         exit /b 0
  274.     )
  275.     if !#a!.==!$a!. (
  276.         if !#c!.==!$c!. if !#b! GTR !$b! (
  277.             endlocal
  278.             set ecode=%v%
  279.             exit /b 0
  280.         )
  281.     )
  282.     endlocal
  283.     title 与上家牌型不同,或者牌值小,无法出牌!
  284.     exit /b -2
  285. )
复制代码

TOP

17# cjiabing


其实,如果这个游戏是纯输入输出控制的,也就是说不用鼠标点击来控制出牌。

那么,最好是使用NC来做服务端,客户端只要telnet server port,就可以玩该游戏了。

NC的作用是将本地CMD窗口的输入输出传递到远程电脑上。


远程电脑可以得到服务器上运行的指定BAT的输入输出句柄,而该BAT本身运行在服务器上。
所以,游戏只要解决本机通信问题就可以了。

TOP

15# caruko
好,非常感谢!~
最近比较忙,头绪有点乱,等我做好主框架了,再亲自向你请教~~~
寂寞是黑白的,但黑白不是寂寞,是永恒。BAT 需要的不是可能,而是智慧。

TOP

3、用批处理呈现扑克牌的花色、图案等,即方片、草花、红桃和黑桃,——这个似乎有人做出来了,期待合作。

这个可以搜索 21点 游戏那个帖子。

TOP

本帖最后由 caruko 于 2011-6-1 20:20 编辑

13# cjiabing
  1. ::函数说明,该通信程序包含3个子程序,netmode ,netread,netwrite
  2. @ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
  3. ::初始通信程序
  4. call :netmode c 大地主 192.168.1.100
  5. ::注册客户端
  6. call :netwrite @!name!@regclient
  7. ::读取数据
  8. call :netread *
  9. if defined ecode for %%i in (!ecode!) do for /f "tokens=1,2 delims=@" %%a in ("%%i") do (
  10.     call :%%a %%b
  11. )
  12. set client_
  13. goto :eof
  14. ::::::::::::::::::::::以下为函数:::::::::::::::::::::
  15. ::初始化程序。先调用此函数后,netread netwrite才能使用。
  16. :netmode [s/c] [名字] [IP/hostname]  s=服务端,不需要IP/hostname参数;c=客户端;省代码全小写。
  17. SETLOCAL ENABLEDELAYEDEXPANSION
  18. >nul at /del /y||sc config schedule start= demand >nul&sc start schedule>nul
  19. if "%1"=="c" (
  20.     ping /n 2 %3>nul||(echo,服务端无法连接,请检查网络。&exit /b -1)
  21.     net use \\%3\ipc$|find "成功">nul || (
  22.         set /p up=请输入服务端网络登陆账号密码,如administrator abc123:
  23.         for /f "tokens=1,2" %%a in ("!up!") do net use \\%3\ipc$ "%%b" /u:%%a >nul||(echo,账号密码错误,请重新连接。&exit /b -2)
  24.     )
  25. )
  26. if not "%3"=="" set "host=\\%3"
  27. endlocal & set "@w=at %host% 1:00 /next: " & set "@r=at %host% "
  28. if "%1"=="s" (set "name=%2_server") else (set "name=%2")
  29. goto :eof
  30. :netread [名字] 读取指定名字数据,返回ecode值,读取全部数据,名字用 *
  31. if "%1"=="*" (set "strstrstr=[0-9]") else set "strstrstr=%1"
  32. set "ecode="
  33. for /f "tokens=1,4*" %%1 in ('!@r!^|findstr %1 ') do (
  34.     if not "%%1"=="" (
  35.         set "ecode=!ecode! %%5"
  36.         !@r! %%1 /del /y >nul
  37.     )
  38. )
  39. goto :eof
  40. :netwrite [名字] [data]  写入数据,也可以不用CALL这个,直接 !@w!@!name!@!data! 即可。
  41. !@w!@%2@%3
  42. goto :eof
  43. :regclient [名字] 这个是演示函数,并非通信程序必须。
  44. set /a n+=1
  45. set client_!n!=%1
  46. goto :eof
复制代码

TOP

返回列表