Board logo

标题: 斗地主脚本,开发中...鼠标测试版 更新[2010-4-23] [打印本页]

作者: sl543001     时间: 2010-2-24 20:06    标题: 斗地主脚本,开发中...鼠标测试版 更新[2010-4-23]

斗地主脚本,开发中...(现继续招募合作开发者群:3401238)
合作开发成员:sybn(sl543001),netbenton PLP
目前进度:
游戏界面基本完成,后期会继续优化.
发牌和选牌功能已基本可以使用.
出牌和牌型检测正在完善中.
改用最新版的SYBC 1.1.31 并改用DEBUG内存调用方式.
游戏速度大幅提升,画面刷新时间几乎减半
SYBC 1.1.41 新加鼠标支持,但不是很完善
测试中,可以用鼠标控制出牌,但咱不支持无3方

下一步编写电脑AI.

目前非正式发布测试版,代码在25楼.
41楼有支持鼠标的测试版本
最新版本截图[2010-04-23更新]

牌型检测讨论帖:
http://www.cn-dos.net/forum/viewthread.php?tid=50466&fpage=1
牌背图案讨论帖:
http://www.cn-dos.net/forum/viewthread.php?tid=50415&fpage=1
sybc更新讨论帖:
http://www.cn-dos.net/forum/viewthread.php?tid=50370&fpage=1

[ Last edited by sl543001 on 2010-4-25 at 18:16 ]
附件 1: sybc参数详解.gif (2010-3-10 12:41, 17.45 K,下载次数: 3)


附件 2: ddz61.GIF (2010-4-23 13:57, 24.41 K)



作者: doslike     时间: 2010-2-26 12:59
我可以给你一些帮助。
可以用wbat或中文系统里的tx来完成。
那个2010可以删掉。因为没起什么作用。可以用其他的文字来代替2010
草图设计的有点小。用mode调一下
作者: doslike     时间: 2010-2-26 13:00
esc可以换成f1
esc是关闭游戏(wbat里面关闭就是esc)
作者: doslike     时间: 2010-2-26 13:02
人机对战的模块有点难。
作者: sl543001     时间: 2010-2-26 14:21
预计使用16色彩色字符界面,所以最大就是25*80@16,所以界面不能再加大了!
2010是牌背,预计提供多种牌背.由玩家自己选择看着顺眼的用.
同样,排面斗地主字样也可以由玩家修改.
如果可以找到短小精悍的鼠标程序那就更好了.
作者: sl543001     时间: 2010-2-26 15:53
发一点中间数据,不知有没人看得懂:
      ┏━ ━━ ━┓ ┏━ ┳━ ━━ ┳━ ━━ ━┓ ┏━ ━━ ━┓ ┏━ ━━ ━┓       ┏━ ━━ ━┓             
┏━ ┳━ ┫  ┏━ ┳┻ ┫  ┃  ┏━ ┫  ┏━ ┳┻ ┫      ┃ ┃  ┏━ ┳┻ ━━ ━┓ ┃  ┏━ ━┻ ━┓   
┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃      ┃ ┃  ┃  ┃      ┃ ┃  ┃      ┃   
┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃      ┃ ┃  ┃  ┃      ┃ ┃  ┃      ┃
┃  ┃  ┗━ ┫  ┃  ┗━ ┻┳ ┫  ┗━ ┫  ┃  ┗━ ━┳ ━┛ ┗━ ┫  ┃      ┃ ┗━ ┫      ┃
┗━ ┻━ ━━ ┻━ ┻━ ━━ ━┛ ┗━ ━━ ┻━ ┻━ ━━ ━┛       ┗━ ┻━ ━━ ━┛    ┗━ ━━ ━┛
001  111  112  121  211  112  122  221  212  121  211  112  122  222  002  021  122  110  100  002 021  210  100


      ┏ ━━ ━━ ┓┏ ━┳ ━━ ━┳ ━━ ━━ ┓┏ ━━ ━━ ┓   ┏ ━━ ━━ ┓            
┏ ━┳ ━┫  ┏ ━┳ ┻┫  ┃  ┏ ━┫  ┏ ━┳ ┻┫       ┃   ┃  ┏ ━┳ ┻━ ━━ ┓   
┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃       ┃   ┃  ┃  ┃       ┃   
┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃  ┃       ┃   ┃  ┃  ┃       ┃
┃  ┃  ┗ ━┫  ┃  ┗ ━┻ ┳┫  ┗ ━┫  ┃  ┗ ━━ ┳━ ┛   ┗ ━┫  ┃       ┃
┗ ━┻ ━━ ━┻ ━┻ ━━ ━━ ┛┗ ━━ ━┻ ━┻ ━━ ━━ ┛         ┗ ━┻ ━━ ━━ ┛
001 111 112 121 211 112 122 221 212 121 211 112 122 222 002    121 122 111 111


A9A5 A9A7 A9B3 A9B7 A9BB A9BF A9C7 A9CF A9D7 A9DF A9EF
━   ┃   ┏   ┓   ┗   ┛   ┣   ┫   ┳   ┻   ╋


╳A9 ━A5┃A7┏B3┓B7┗BB┛BF┣C7┫CF┳D7┻DF╋EF
  ╳ □ □ □ □ □ □ □ □ □ □ □╳
━A5□━A5╋EF┳D7┳D7┻DF┻DF╋EF╋EF┳D7┻DF╋EF□
┃A7□╋EF┃A7┣C7┫CF┣C7┫CF┣C7┫CF╋EF╋EF╋EF□
┏B3□┳D7┣C7┏B3┣C7┣C7╋EF┣C7╋EF┳D7╋EF╋EF□
┓B7□┳D7┫CF┳D7┓B7╋EF┫CF╋EF┫CF┳D7╋EF╋EF□
┗BB□┻DF┣C7┣C7╋EF┗BB┻DF┣C7╋EF╋EF┻DF╋EF□
┛BF□┻DF┫CF╋EF┫CF┻DF┛BF╋EF┫CF╋EF┻DF╋EF□
┣C7□╋EF┣C7┣C7╋EF┣C7╋EF┣C7╋EF╋EF╋EF╋EF□
┫CF□╋EF┫CF╋EF┫CF╋EF┫CF╋EF┫CF╋EF╋EF╋EF□
┳D7□┳D7╋EF┳D7┳D7╋EF╋EF╋EF╋EF┳D7╋EF╋EF□
┻DF□┻DF╋EF╋EF╋EF┻DF┻DF╋EF╋EF╋EF┻DF╋EF□
╋EF□╋EF╋EF╋EF╋EF╋EF╋EF╋EF╋EF╋EF╋EF╋EF□
  ╳ □ □ □ □ □ □ □ □ □ □ □╳

╳A9 ━A5┃A7┏B3┓B7┗BB┛BF┣C7┫CF┳D7┻DF╋EF
  ╳ □ □ □ □ □ □ □ □ □ □ □╳
┏B3□┳D7┣C7┏B3┣C7┣C7╋EF┣C7╋EF┳D7╋EF╋EF□
┓B7□┳D7┫CF┳D7┓B7╋EF┫CF╋EF┫CF┳D7╋EF╋EF□
┗BB□┻DF┣C7┣C7╋EF┗BB┻DF┣C7╋EF╋EF┻DF╋EF□
┛BF□┻DF┫CF╋EF┫CF┻DF┛BF╋EF┫CF╋EF┻DF╋EF□
┣C7□┣C7┃A7┣C7┃A7┣C7┃A7┣C7┃A7┣C7┣C7┣C7□
┫CF□┫CF┃A7┃A7┫CF┃A7┫CF┃A7┫CF┫CF┫CF┫CF□
┳D7□━A5┳D7┳D7┳D7━A5━A5┳D7┳D7┳D7━A5┳D7□
┻DF□━A5┻DF━A5━A5┻DF┻DF┻DF┻DF━A5┻DF┻DF□
  ╳ □ □ □ □ □ □ □ □ □ □ □╳


[ Last edited by sl543001 on 2010-2-26 at 16:11 ]
作者: HAT     时间: 2010-2-26 18:30
“短小精悍的鼠标程序”需要具备哪些功能?
作者: sl543001     时间: 2010-2-26 21:25
功能多,体积小,最好小于1K
作者: HAT     时间: 2010-2-27 01:22
这里有没有能够满足功能上的需求的?
http://bbs.bathome.net/thread-3148-1-1.html
作者: sl543001     时间: 2010-2-28 13:30
楼上提供的确实是好东西,要是有源码就更好了!
目前俺正在汇编开发游戏中必要的三方工具
利用DEBUG争取全部内嵌到脚本中,
尽量做到绿色单文件,不生成任何历史文件,
所以那些与汇编几十字节相比,相对庞大的几十KB的3方暂时还是....
作者: sl543001     时间: 2010-3-1 11:32
草稿中的部分内容已经通过俺自己写的最新版的sybc实现:
http://www.cn-dos.net/forum/viewthread.php?tid=50370&fpage=1
作者: sl543001     时间: 2010-3-1 14:47
在顶楼发布了最新的游戏截图,每张牌绘图耗时仅0.01秒哦!
绘制一张扑克的命令已经压缩至1行:
sybc 10000f1┏━━━━┓;:┃╳╳╳╳┃;:┃╳$f2SYBN$f1╳┃;:┃╳╳╳╳┃;:┃╳$fc2010$f1╳┃;:┃╳╳╳╳┃;:┗━━━━┛

[ Last edited by sl543001 on 2010-3-1 at 15:23 ]
附件 1: ddzpb.GIF (2010-3-1 14:56, 7.74 K)



作者: sl543001     时间: 2010-3-2 14:39
16位程序参数长度限制124.
就差一点就好了,怎讨厌.截图也更新.
由于参数长度限制不得大于124,所以扑克右下角数字没有变色!
作者: sl543001     时间: 2010-3-4 12:21
略微修改sybc的参数设置,挤出了6个字节的代码,右下角终于可以变色了!
作者: sl543001     时间: 2010-3-5 10:27
改用小尺寸扑克,节约出的代码解决接缝问题.
作者: sl543001     时间: 2010-3-6 16:34
新版的sybc 1.1.21已经支持了choice功能
新版斗地主同步支持sybc进行方向键控制
最新截图已在1楼更新
作者: baohusan     时间: 2010-3-7 09:43
不错 呵呵

成功了一定看看
作者: chenall     时间: 2010-3-7 21:26
有没有放一个出来试试啊,好强大的感觉。
作者: sl543001     时间: 2010-3-8 11:07
目前只有前台界面,根本不能出牌滴!
不过如果需要目前的版本,拿去研究的话,
加群:3401238找我要!
作者: BWSkyer     时间: 2010-3-8 11:42
太有实力了,精神支持~~
作者: sl543001     时间: 2010-3-10 13:35
正在编写出牌的前台代码,目前不验证是否违规,电脑暂时不会出牌!
作者: sl543001     时间: 2010-3-13 20:44
嵌入了牌型检测,玩家出牌时会得到提示:
如果出牌符合规则,则提示所处的牌.[例如截图中提示3张7带1对4]
如果出牌不符合规则,则提示违规!
附件 1: ddz59.GIF (2010-3-13 20:44, 19.1 K)



作者: HAT     时间: 2010-3-14 12:34
厘秒和秒之间的换算关系是怎样的?
作者: sl543001     时间: 2010-3-14 17:48
1秒=100厘秒
作者: sl543001     时间: 2010-3-14 17:53    标题: 发布斗地主无AI测试版

非正式发布斗地主无AI测试版
目前勉强可以拿出来看看,但还有很多需要完善和修改.
如有任何意见建议欢迎回帖或加QQ群:3401238
@echo off&SETLOCAL ENABLEDELAYEDEXPANSION&(CHCP 437 &GRAFTABL 936)>NUL
set a=s1=A;s2=2;s3=3;s4=4;s5=5;s6=6;s7=7;s8=8;s9=9;s10=0;s11=J;s12=Q;s13=K;s14=A;s15=2;s16=N;s17=N;h1=;h2=;h3=;h4=;h0=T;y0=c;y1=0;p=1
set pk%a:;=&set pk%
SET SYBCOM=A100;80BE AC00 23C 5472 3CAC 7501 BE13 282;0EEB 3CAC 743A 3C09 740D 8347 1EE 46EB;E8AC 90 A2E8 3C00 7F18 8837 E8C6 84;96E8 3C00 7F4F 882B B0C2 F602 50E2 A0B0;E6F6 15F 57C7 3CAC 7424 E80A 67 45E8;8800 EBD1 E817 3B D188 10EB B0 16CD;E088 4CB4 21CD 815F A0C7 5700 B850 B800;0750 295A 88F5 ACCA 243C D974 3B3C 9274;0D3C DE74 233C 575 D783 EB01 AA01 D088;EBAA E8E4 1E C387 393C 27E 904 FB80;7E39 8003 9C3 F24 E380 B20F F610 E2;88D8 C3C2 3CAC 7420 3CFB 740D 88A5 ACC3;203C F074 D3C 9A74 87C3 2CC3 8030 30EB;0AB4 E4F6 D800 C3
SET V=;RCX;D7;N SYBC.COM;W;Q
if not exist sybc.com (ECHO.%SYBCOM:;=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL
set DEBUGQK=1F8 267;298 307;338 3a7;3D8 447;478 4e7;518 587;5B8 627;658 6c7;6F8 767;798 807;838 8a7;8D8 947;978 9e7;A18 a87;AB8 b27
set pkBK=$7f
set pkBK2=$f7
set pkBK3=$37
set pkBK4=$73
set pkNB=$f1
color 3e
echo 斗地主 测试版
echo.
echo 目前没有AI,电脑不会出牌.你可以随便出牌,出完自动发牌.
echo.
echo 目前可用按键及其功能:
echo F2     从新发牌       F5   刷新
echo 方向键 控制扑克       空格 出牌
echo.
echo 按任意键开始...
sybc
:win
:2
for /l %%b in (3,1,11) do set /a pr=!random!%%4+1&&for /f %%a in ("!pr!") do set pbh%%b=!pkh%%a!&&set pby%%b=!pky0!&&if %%a gtr 2 set pby%%b=!pky1!
for /l %%b in (4,1,12) do set /a pr=!random!%%4+1&&for /f %%a in ("!pr!") do set pch%%b=!pkh%%a!&&set pcy%%b=!pky0!&&if %%a gtr 2 set pcy%%b=!pky1!
call :FP
:1
set titds=$f
cls
set t1=%time%
sybc 10000%TITDS%0 :::│%TITDS%c积%TITDS%9  电脑左  %TITDS%00  %TITDS%2+0%TITDS%c=%TITDS%00  %TITDS%0│%TITDS%c 斗地主 V0.0 [测试版] %TITDS%0│%TITDS%0  [庄家]  %TITDS%0│ 底 牌 │:::
sybc 10100%TITDS%0  ::│%TITDS%c分%TITDS%9  电脑右  %TITDS%00  %TITDS%2+0%TITDS%c=%TITDS%00  %TITDS%0│%TITDS%9 开发者:SYBN netbenton  %TITDS%0│%TITDS%9  电脑左  %TITDS%0│       │::  
sybc 10200%TITDS%0   :│%TITDS%c榜%TITDS%9 玩家SYBN %TITDS%00  %TITDS%2+0%TITDS%c=%TITDS%00  %TITDS%0│%TITDS%22010-3-13  按F1查看帮助%TITDS%0│%TITDS%d 叫分 3分 %TITDS%0│       │:   
sybc 10168%TITDS%%pdi1y%%pdi1s% %TITDS%%pdi2y%%pdi2s% %TITDS%%pdi3y%%pdi3s%;%TITDS%%pdi1y%%pdi1h% %TITDS%%pdi2y%%pdi2h% %TITDS%%pdi3y%%pdi3h%
call :pb 10701
call :pb 10769
sybc 10300$4c☉$4c▄▄▄▄$4c☉;$c4▌$c9 电脑左 $4c▌;$c4▌$ce余牌11张$4c▌;$4c☉$c4▄▄▄▄$4c☉
sybc 10368$4c☉$4c▄▄▄▄$4c☉;$c4▌$c9 电脑右 $4c▌;$c4▌$ce余牌7 张$4c▌;$4c☉$c4▄▄▄▄$4c☉
sybc 11400$4c☉$4c▄▄▄▄$4c☉;$c4▌$c9玩家SYBN$4c▌;$c4▌$ce余牌17张$4c▌;$4c☉$c4▄▄▄▄$4c☉
call :p11
:for /l %%a in (3,1,11) do set /a wz=10352+%%a*3-9*3&&call :pa !wz! !pby%%a! !pks%%a! !pbh%%a! 农 民
:for /l %%a in (4,1,12) do set /a wz=10800+%%a*3&&call :pa !wz! !pcy%%a! !pks%%a! !pch%%a! 地 主
set t2=%time%
call :timec
:GB
::title 请选择您要出的牌...
set /a GBy=12212,GBs=1
:GB1
set /a GBW=12209+GBs*3
sybc %GBy%f1  ;:%GBw%f1↑
sybc
title sybc-%errorlevel%-
if %errorlevel% == 75 set /a GBs-=1
if %errorlevel% == 77 set /a GBs+=1
if %errorlevel% == 72 set /a p2w%GBs%=1&&call :p11 1 %GBs%
if %errorlevel% == 80 set /a p2w%GBs%=0&&call :p11 0 %GBs%
if %errorlevel% == 57 goto chupai
if %errorlevel% == 60 goto 2
if %errorlevel% == 63 goto 1
if %GBs% lss 1 set gbs=%p2z%
if %GBs% gtr %p2z% set gbs=1
set /a GBy=GBw
goto :GB1
:chupai
set /a p6s=0,p6h=0,p6y=0,p6z=0,p0s=0,p0h=0,p0y=0,p0z=0,p2zBF=%p2z%
set p2sBF=%p2s%
set p2hBF=%p2h%
set p2yBF=%p2y%
for /l %%a in (1,1,%p2z%) do if !p2w%%a! == 1 (set /a p6z=p6z+1&&set p6s=!p6s!!p2s:~%%a,1!&&set p6h=!p6h!!p2h:~%%a,1!&&set p6y=!p6y!!p2y:~%%a,1!&&set p6js=农 民) else (set /a p0z=p0z+1&&set p0s=!p0s!!p2s:~%%a,1!&&set p0h=!p0h!!p2h:~%%a,1!&&set p0y=!p0y!!p2y:~%%a,1!)
for /l %%a in (1,1,%p0z%) do (set /a p2z=p0z&&set p2s=!p0s!&&set p2h=!p0h!&&set p2y=!p0y!)
:yanzheng
set px=违规
set p6yx=0
::标记字符串对应的牌
set ps=---34567890JQKA02N$
::初始化
for /l %%a in (0,1,4) do set pss%%a=0
for %%a in (3 4 5 6 7 8 9 0 J Q K A 2 N) do set ps%%a=0&set p6zs%%a=0
::计算各中点数的牌的数量
for /l %%a in (1,1,20) do for /f %%b in ("!p6s:~%%a,1!") do set /a ps%%b+=1
::计算牌的数量
set /a p6zs=%ps3%+%ps4%+%ps5%+%ps6%+%ps7%+%ps8%+%ps9%+%ps0%+%psj%+%psq%+%psk%+%psa%+%ps2%+%psn%
::获取标记字符串%p6ss%
set p6ss=---%ps3%%ps4%%ps5%%ps6%%ps7%%ps8%%ps9%%ps0%%psj%%psq%%psk%%psa%0%ps2%%psn%$
::提取最大的单张,2张,3张,4张
for /l %%a in (3,1,17) do set pss!p6ss:~%%a,1!=%%a
::单牌
if %p6zs% == 1 set px=一张!ps:~%pss1%,1!&set p6yx=%pss1%
::3张和飞机
::解释:  %p6ss:3=.% == %p6ss%  表示%p6ss%中没有3则if生效,加上not表示有3则if生效
if %p6zs% == 3 if not %p6ss:3=.% == %p6ss% set px=三张!ps:~%pss3%,1!
if %p6zs% == 4 if not %p6ss:3=.% == %p6ss% set px=三张!ps:~%pss3%,1!带一张!ps:~%pss1%,1!
if %p6zs% == 5 if not %p6ss:3=.% == %p6ss% if not %p6ss:2=.% == %p6ss% set px=三张!ps:~%pss3%,1!带一对!ps:~%pss2%,1!
if %p6zs% == 6 if not %p6ss:33=.% == %p6ss% set px=飞机
if %p6zs% == 8 if not %p6ss:33=.% == %p6ss% set px=飞机带单
if %p6zs% == 10 if not %p6ss:33=.% == %p6ss% if %p6ss:1=.% == %p6ss% set px=飞机带对
if %p6zs% == 9 if not %p6ss:333=.% == %p6ss% set px=三顺
if %p6zs% == 12 if not %p6ss:333=.% == %p6ss% set px=三顺带单
if %p6zs% == 15 if not %p6ss:333=.% == %p6ss% if %p6ss:1=.% == %p6ss% set px=三顺带对
if %p6zs% == 12 if not %p6ss:3333=.% == %p6ss% set px=三大顺
if %p6zs% == 16 if not %p6ss:3333=.% == %p6ss% set px=三大顺带单
::为防止出现类似333444555666777qqqkkkaa被误认为三大顺带对加入下面一行
set p6ss3=%p6ss:3333=.%
if %p6zs% == 20 if not %p6ss:3333=.% == %p6ss% if %p6ss:1=.% == %p6ss% if %p6ss3:3=.% == %p6ss3% set px=三大顺带对
if %p6zs% == 15 if not %p6ss:33333=.% == %p6ss% set px=三巨顺
if %p6zs% == 20 if not %p6ss:33333=.% == %p6ss% set px=三巨顺带单
if %p6zs% == 18 if not %p6ss:333333=.% == %p6ss% set px=三神顺
::对子和兄弟
if %p6zs% == 2 if %p6ss:1=.% == %p6ss% set px=一对!ps:~%pss2%,1!&set p6yx=%pss2%
if %p6zs% == 6 if not %p6ss:222=.% == %p6ss% set px=3兄弟
if %p6zs% == 8 if not %p6ss:2222=.% == %p6ss% set px=4兄弟
if %p6zs% == 10 if not %p6ss:22222=.% == %p6ss% set px=5兄弟
if %p6zs% == 12 if not %p6ss:222222=.% == %p6ss% set px=6兄弟
if %p6zs% == 14 if not %p6ss:2222222=.% == %p6ss% set px=7兄弟
if %p6zs% == 16 if not %p6ss:22222222=.% == %p6ss% set px=8兄弟
if %p6zs% == 18 if not %p6ss:222222222=.% == %p6ss% set px=9兄弟
if %p6zs% == 20 if not %p6ss:2222222222=.% == %p6ss% set px=10兄弟
::顺子
if %p6zs% == 5 if not %p6ss:11111=.% == %p6ss% set px=5张顺子
if %p6zs% == 6 if not %p6ss:111111=.% == %p6ss% set px=6张顺子
if %p6zs% == 7 if not %p6ss:1111111=.% == %p6ss% set px=7张顺子
if %p6zs% == 8 if not %p6ss:11111111=.% == %p6ss% set px=8张顺子
if %p6zs% == 9 if not %p6ss:111111111=.% == %p6ss% set px=9张顺子
if %p6zs% == 10 if not %p6ss:1111111111=.% == %p6ss% set px=10张顺子
if %p6zs% == 11 if not %p6ss:11111111111=.% == %p6ss% set px=11张顺子
if %p6zs% == 12 if not %p6ss:111111111111=.% == %p6ss% set px=12张顺子
::炸弹
if %p6zs% == 4 if not %p6ss:4=.% == %p6ss% set px=4炸!ps:~%pss4%,1!&set p6yx=%pss4%
if %p6zs% == 2 if not %p6ss:2$=.% == %p6ss% set px=王炸&set p6yx=%pss2%
::提取有效牌(顺子和兄弟里的最大一张,3张里的不含带牌的最大一张)
if not %px:顺子=.% == %px% set p6yx=%pss1%
if not %px:兄弟=.% == %px% set p6yx=%pss2%
if not %px:三=.% == %px% set p6yx=%pss3%
SYBC 1146830您出的牌:   ;            ;:115683C%px%
if "%px%" == "违规" (set p2s=%p2sBF%&&set p2h=%p2hBF%&&set p2y=%p2yBF%&&set p2z=%p2zBF%
for /l %%a in (1,1,20) do set p2w%%a=0
call :p11
SYBC 1166830不能这样出.;请重新出牌!
goto :GB)
(ECHO.fB800:%DEBUGQK:;= 20 3e&ECHO.fB800:% 20 3e&ECHO.q%)|DEBUG>NUL
for /l %%a in (1,1,%P6z%) do set /a wz=11220+%%a*3&&call :pa !wz! !p6y:~%%a,1! !p6s:~%%a,1! !p6h:~%%a,1! %p6js%
for /l %%a in (1,1,20) do set p2w%%a=0
sybc 1035030  ▁▁▁▁▁▁  ;$03▉$30      ▏;$03▉$3e 俺要不起!$30▏;$03▉$3e      $30╲;  $03▇▇▇▇▇▇▇
sybc 1071330  ▁▁▁▁▁▁  ;$03▉$30      ▏;$03▉$3e 俺要不起!$30▏;╱$3e      $30▏;$03▇▇▇▇▇▇▇$30  
if %p6z% == %p2zBF% goto :win
call :p11
SYBC 11606ce  ;:11606ce%p2z%
SYBC 1166830没人要得起.;请继续出牌!
goto :GB
:p1
if "%2" == "" goto :P11
set /a sx0=11808+%2*3,sx1=12408+%2*3
if %1 == 0 sybc %sx0%3e         
if %1 == 1 sybc %sx1%3e         
:P11
(echo.FB800:B40 FFF 20 3E&echo q)|DEBUG>NUL
for /l %%a in (1,1,%p2z%) do set /a wz=11908+%%a*3,pz=%%a+1&(if !p2w%%a! == 1 set /a wz=!wz!-100)&call :pa !wz! !p2y:~%%a,1! !p2s:~%%a,1! !p2h:~%%a,1! 农 民
goto :eof
:pl
set pl=%2
for %%a in (0,1,20) set /a pq1=%%a*7+5,pq2=%%a*7+6 &&call :pa %1
goto :eof
:pb
sybc %1%pkBK3%▄▄▄▄▄;%pkbk% %pkNB% {\__/} %pkBK% ; %pkNB% / $fc@@%pkNB% \ %pkBK% ; %pkNB%( ($f0oo%pkNB%) )%pkBK% ; %pkNB% / ~~ \ %pkBK%
set /a pbw=%1+500
sybc %pbw%%pkbk% $f2斗 地 主%pkbk% ;%pkBK4%▄▄▄▄▄%pkBK%
goto :eof
:pa
if not "%4" == "" sybc %1%pkBK% ▄▄▄▄ ; $f%2%3%pkNB%    %pkBK% ; $f%2%4%pkNB%  %5  %pkBK% ; %pkNB%  %6  $f%2%4%pkBK% ; %pkNB%    $f%2%3%pkBK% ; %pkBK2%▄▄▄▄%pkBK%
goto :eof
:fp
title 发牌中...
for /l %%a in (1,1,20) do set p2w%%a=0
set /a p1z=17,p2z=17,p3z=17
set paid=
set paif=
set paiy=
:FP1
set /a pran+=1,m=0,n=0,d=0
::随机排序54张牌(洗牌)
for %%a in (3 4 5 6 7 8 9 0 J Q K A 2) do (for %%b in (!pkh1!-!pky0! !pkh2!-!pky0! !pkh3!-!pky1! !pkh4!-!pky1!) do (set p%pran%#!random!!random!.%%a-%%b=1))
set P%pran%#!random!!random!.N-!pkh0!-!pky1!=1
set P%pran%#!random!!random!.N-!pkh0!-!pky0!=1
::发牌,并留三张底
set he1=
set he2=
set he3=
set Di=
for /f "tokens=2 delims==." %%a in ('set p%pran%#') do (
        set /a m=m%%3+1,n+=1
        if !n! leq 51 (
                for %%c in (!m!) do (
                        set he%%c=!he%%c! %%a
                )
        ) else (set di=!di! %%a)
)
echo .%di%. >>d.txt
set pdi1s=!di:~1,1!
set pdi1h=!di:~3,1!
set pdi1y=!di:~5,1!
set pdi2s=!di:~7,1!
set pdi2h=!di:~9,1!
set pdi2y=!di:~11,1!
set pdi3s=!di:~13,1!
set pdi3h=!di:~15,1!
set pdi3y=!di:~17,1!
::整理各家手上的牌
for /l %%a in (1,1,3) do (
        for %%b in (!he%%a!) do (
                for /f "tokens=1,2,3 delims=-" %%c in ("%%b") do (
                        set pd%pran%#%%c=!pd%pran%#%%c!%%c
                        set pf%pran%#%%c=!pf%pran%#%%c!%%d
                        set py%pran%#%%c=!py%pran%#%%c!%%e
                )
        )
        for %%b in (3 4 5 6 7 8 9 0 J Q K A 2 N) do (
                set paid%pran%#=!paid%pran%#!!pd%pran%#%%b!
                set paif%pran%#=!paif%pran%#!!pf%pran%#%%b!
                set paiy%pran%#=!paiy%pran%#!!py%pran%#%%b!
        )
        for /f "tokens=1,2,3 delims=." %%b in ("!paid%pran%#!.!paif%pran%#!.!paiy%pran%#!") do (
                set p%%as=0%%b
                set p%%ah=0%%c
                set p%%ay=0%%d
        )
)
if "%pdi3s%" == "" goto FP
goto :eof
:timec
IF "%t1%" == "" EXIT /B 0
FOR /F "DELIMS=:. TOKENS=1,2,3,4" %%N IN ("%t1%") DO SET O=1%%O&SET P=1%%P&SET Q=1%%Q&SET /A N=100+%%N
IF "%t2%" == "" SET /A T=N*360000+O*6000+P*100+Q-36610100&&EXIT /B !T!
FOR /F "DELIMS=:. TOKENS=1,2,3,4" %%M IN ("%t2%") DO SET I=1%%N&SET J=1%%O&SET K=1%%P&SET /A H=100+%%M
IF "%t2%" GTR "A" (SET L=%t2%&SET /A T=N*360000+O*6000+P*100+Q-36610100,S=T/100,M=T/6000,H=T/360000) ELSE (SET L=%3&SET /A H=H-N,I=I-O,J=J-P,K=K-Q,T=H*360000+I*6000+J*100+K,S=T/100,M=T/6000,H=T/360000)
IF "%L%" == "" SET L=T
sybc 1176831耗时:   厘秒;:11773$3c!%L%!
goto :eof

作者: sl543001     时间: 2010-3-16 17:30
压缩了部分代码,牺牲了可读性,提高了一点速度!
作者: sl543001     时间: 2010-3-20 14:36
找到了新的合作者PLP
这在计划整理重写代码
作者: sl543001     时间: 2010-3-20 15:13    标题: 发布前半部分代码的逐行解释


@echo off&SETLOCAL ENABLEDELAYEDEXPANSION&(CHCP 437 &GRAFTABL 936)>NUL
::变量初始化
::玩家1-3 的牌统一使用P1XXX-p3XXX变量 P4XXX保留   玩家出的牌统一使用P5XXX-P6XXX  P7XXX保留  P0XXX 用于临时需要
::与扑克有关的变量牌统一使用PKXXX   
::    PKSXX代表各个点数的牌与字符的对应值 pks11=J  pks12=Q
::    PKHX代表各个花色的数字与字符的对应值 pkh1= (红桃) pkh0=T (王)
::    PKYX代表各个颜色的数字与字符的对应值 扑克只有红黑2色 pky0=c (红) pky1=0 (黑) (同color命令)
set a=s1=A;s2=2;s3=3;s4=4;s5=5;s6=6;s7=7;s8=8;s9=9;s10=0;s11=J;s12=Q;s13=K;s14=A;s15=2;s16=N;s17=N;h1=;h2=;h3=;h4=;h0=T;y0=c;y1=0;BK=$7f;BK2=$f7;BK3=$37;BK4=$73;NB=$f1;p=1
set pk%a:;=&set pk%
::载入/生成sybc 变量SYBCOM保存SYBC的16进制数据 V保存DEBUG代码 最后通过管道交由DEBUG执行
SET SYBCOM=A100;80BE AC00 23C 5472 3CAC 7501 BE13 282;0EEB 3CAC 743A 3C09 740D 8347 1EE 46EB;E8AC 90 A2E8 3C00 7F18 8837 E8C6 84;96E8 3C00 7F4F 882B B0C2 F602 50E2 A0B0;E6F6 15F 57C7 3CAC 7424 E80A 67 45E8;8800 EBD1 E817 3B D188 10EB B0 16CD;E088 4CB4 21CD 815F A0C7 5700 B850 B800;0750 295A 88F5 ACCA 243C D974 3B3C 9274;0D3C DE74 233C 575 D783 EB01 AA01 D088;EBAA E8E4 1E C387 393C 27E 904 FB80;7E39 8003 9C3 F24 E380 B20F F610 E2;88D8 C3C2 3CAC 7420 3CFB 740D 88A5 ACC3;203C F074 D3C 9A74 87C3 2CC3 8030 30EB;0AB4 E4F6 D800 C3
SET V=;RCX;D7;N SYBC.COM;W;Q
if not exist sybc.com (ECHO.%SYBCOM:;=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL
::保存刷新块坐标 游戏界面中间部分(出牌的位置),每次需要局部刷新,变量DEBUGQK保存要刷新的内存地址起止点
set DEBUGQK=1F8 267;298 307;338 3a7;3D8 447;478 4e7;518 587;5B8 627;658 6c7;6F8 767;798 807;838 8a7;8D8 947;978 9e7;A18 a87;AB8 b27
::初始信息
color 3e
echo 斗地主 {注释版} 2010-3-20
echo.
echo 目前没有AI,电脑不会出牌.你可以随便出牌,出完自动发牌.
echo.
echo 目前可用按键及其功能:
echo F2     从新发牌       F5   刷新
echo 方向键 控制扑克       空格 出牌
echo.
echo 按任意键开始...
sybc
:2
::调用发牌模块
call :FP
:1
::变量CBXX统一用于颜色背景信息  
set cB0=$f
cls
::计时1
set t1=%time%
::显示顶部栏
sybc 10000%cB0%0 :::│%cB0%c积%cB0%9  电脑左  %cB0%00  %cB0%2+0%cB0%c=%cB0%00  %cB0%0│%cB0%c 斗地主 V0.0 [测试版] %cB0%0│%cB0%0  [庄家]  %cB0%0│ 底 牌 │:::
sybc 10100%cB0%0  ::│%cB0%c分%cB0%9  电脑右  %cB0%00  %cB0%2+0%cB0%c=%cB0%00  %cB0%0│%cB0%9开发:SYBN netbenton plp %cB0%0│%cB0%9  电脑左  %cB0%0│       │::  
sybc 10200%cB0%0   :│%cB0%c榜%cB0%9 玩家SYBN %cB0%00  %cB0%2+0%cB0%c=%cB0%00  %cB0%0│%cB0%22010-3-20  按F1查看帮助%cB0%0│%cB0%d 叫分 3分 %cB0%0│       │:   
sybc 10168%cB0%%pdi1y%%pdi1s% %cB0%%pdi2y%%pdi2s% %cB0%%pdi3y%%pdi3s%;%cB0%%pdi1y%%pdi1h% %cB0%%pdi2y%%pdi2h% %cB0%%pdi3y%%pdi3h%
::显示电脑的牌背
call :pb 10701
call :pb 10769
::显示3人的名称框
sybc 10300$4c☉$4c▄▄▄▄$4c☉;$c4▌$c9 电脑左 $4c▌;$c4▌$ce余牌11张$4c▌;$4c☉$c4▄▄▄▄$4c☉
sybc 10368$4c☉$4c▄▄▄▄$4c☉;$c4▌$c9 电脑右 $4c▌;$c4▌$ce余牌7 张$4c▌;$4c☉$c4▄▄▄▄$4c☉
sybc 11400$4c☉$4c▄▄▄▄$4c☉;$c4▌$c9玩家SYBN$4c▌;$c4▌$ce余牌17张$4c▌;$4c☉$c4▄▄▄▄$4c☉
::P11显示玩家的牌
call :p11
::计时2
set t2=%time%
::计算时差并显示
call :timec
:GB
title 请选择您要出的牌...
::初始化选牌指针 变量GBy为原指针位置
set /a GBy=12212,GBs=1
:GB1
::定位选牌指针 变量GBW为新指针位置
set /a GBW=12209+GBs*3
::显示选牌指针并擦除原指针
sybc %GBy%f1  ;:%GBw%f1↑
::无参数的SYBC功能类似CHOICE,暂停脚本并获取一个按键
sybc
::下一行,显示所按的键
::title sybc-%errorlevel%-
::根据不同的按键执行相应的操作
::  左右键移动光标
if %errorlevel% == 75 set /a GBs-=1
if %errorlevel% == 77 set /a GBs+=1
::  上下键拉起/放下扑克 并刷新玩家的牌
if %errorlevel% == 72 set /a p2w%GBs%=1&&call :p11 1 %GBs%
if %errorlevel% == 80 set /a p2w%GBs%=0&&call :p11 0 %GBs%
::  空格 出牌
if %errorlevel% == 57 goto chupai
::  F2 重新发牌
if %errorlevel% == 60 goto 2
::  F5 刷新
if %errorlevel% == 63 goto 1
::指针超出高低极限则恢复
if %GBs% lss 1 set gbs=%p2z%
if %GBs% gtr %p2z% set gbs=1
::保存原指针等待擦除
set /a GBy=GBw
goto :GB1

作者: doslike     时间: 2010-3-21 12:30
为什么不用我的建议呢
作者: sl543001     时间: 2010-3-24 12:37
F1帮助已经采纳了,只是斗地主找不到AI暂时不写了,改写别的游戏了!
在新游戏里F1已经是帮助了!
http://www.cn-dos.net/forum/viewthread.php?tid=50583&fpage=1
作者: sl543001     时间: 2010-3-31 18:45
改用最新版的SYBC 1.1.31 并改用DEBUG内存调用方式.
游戏速度大幅提升,画面刷新时间几乎减半
作者: sl543001     时间: 2010-4-3 03:20
测试代码:
[2010-4-5 20:50更新]
@echo off&SETLOCAL ENABLEDELAYEDEXPANSION&(CHCP 437 &GRAFTABL 936)>NUL
::变量初始化
::玩家1-3 的牌统一使用P1XXX-p3XXX变量 P4XXX保留   玩家出的牌统一使用P5XXX-P6XXX  P7XXX保留  P0XXX 用于临时需要
::与扑克有关的变量牌统一使用PKXXX   
::    PKSXX代表各个点数的牌与字符的对应值 pks11=J  pks12=Q
::    PKHX代表各个花色的数字与字符的对应值 pkh1= (红桃) pkh0=T (王)
::    PKYX代表各个颜色的数字与字符的对应值 扑克只有红黑2色 pky0=c (红) pky1=0 (黑) (同color命令)
set a=s1=A;s2=2;s3=3;s4=4;s5=5;s6=6;s7=7;s8=8;s9=9;s10=0;s11=J;s12=Q;s13=K;s14=A;s15=2;s16=N;s17=N;h1=;h2=;h3=;h4=;h0=T;y0=c;y1=0;BK=$7f;BK2=$f7;BK3=$37;BK4=$73;NB=$f1;p=1
set pk%a:;=&set pk%
::载入/生成sybc 变量SYBCOM保存SYBC的16进制数据 V保存DEBUG代码 最后通过管道交由DEBUG执行
SET SYBCOM=A100`80BE AC00 3C 375 83E9 3C00 ACFF 4275`2CBE AC00 E08A 86AC 50C4 BE1F 0 3CAC`7553 ACFB 593C F675 3CAC 7542 ACF1 433C`EC75 3CAC 7553 ACE7 3D3C E275 14EB 3CAC`743A 3C0F 740D 3C4D 7400 8349 1EE 48EB`54B4 E8AC 93 ADE8 3C00 7F18 8A37 E8F0`87 A1E8 3C00 7F4F 8A2B B0D0 F602 50E2`A0B0 E6F6 35F 57F8 3CAC 7424 E80A 6A`49E8 8A00 EBCA E817 3F CA8A 10EB B0`16CD C48A 4CB4 21CD 815F A0C7 5700 B850`B800 750 2B5A 8AEE ACD1 243C D974 3B3C`8C74 D3C DE74 3C DA74 233C 575 D783`EB01 AA01 C28A EBAA E8E0 1D 3C93 7E39`402 8009 39FB 37E C380 2409 800F FE3`10B2 E2F6 C302 D08A ACC3 203C FB74 D3C`A274 3C 9E74 D88A 3CAC 7420 3CEC 740D`3C93 7400 C38F 2C93 8030 30EB AB4 E4F6`C302 C3`
SET SYBCV=`A80`DB FF``RCX`120`G`Q
::SET V=;RCX;120;N SYBC.COM;W;Q
::if not exist sybc.com (ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL
::保存刷新块坐标 游戏界面中间部分(出牌的位置),每次需要局部刷新,变量DEBUGQK保存要刷新的内存地址起止点
set DEBUGQK=1F8 267;298 307;338 3a7;3D8 447;478 4e7;518 587;5B8 627;658 6c7;6F8 767;798 807;838 8a7;8D8 947;978 9e7;A18 a87;AB8 b27
::初始信息
color 3e
echo 斗地主 {注释版} 2010-3-20
echo.
echo 目前没有AI,电脑不会出牌.你可以随便出牌,出完自动发牌.
echo.
echo 目前可用按键及其功能:
echo F2     从新发牌       F5   刷新
echo 方向键 控制扑克       空格 出牌
echo.
echo 按任意键开始测试...
echo.
call :SYBC
(echo.Q)|DEBUG>NUL
echo 测试失败.请关闭游戏.并联系SYBN QQ:354324773
call :SYBC 110000A测试成功.请再按任意键以开始游戏,祝您游戏愉快.
echo.
echo win 2003以后系统无法正常运行SYBC,所以会看到"测试失败"字样.
pause>NUL
:2
::调用发牌模块
call :FP
:1
::变量CBXX统一用于颜色背景信息  
set cB0=$f
cls
::计时1
set t1=%time%
::显示顶部栏
SET SYBCS=10000%CB0%0 :::│%CB0%C积%CB0%9  电脑左  %CB0%00  %CB0%2+0%CB0%C=%CB0%00  %CB0%0│%CB0%C 斗地主 V0.0 [测试版] %CB0%0│%CB0%0  [庄家]  %CB0%0│ 底 牌 │:::
SET SYBCS=%SYBCS%;:10100%CB0%0  ::│%CB0%C分%CB0%9  电脑右  %CB0%00  %CB0%2+0%CB0%C=%CB0%00  %CB0%0│%CB0%9开发:SYBN NETBENTON PLP %CB0%0│%CB0%9  电脑左  %CB0%0│       │::  
SET SYBCS=%SYBCS%;:10200%CB0%0   :│%CB0%C榜%CB0%9 玩家SYBN %CB0%00  %CB0%2+0%CB0%C=%CB0%00  %CB0%0│%CB0%22010-3-20  按F1查看帮助%CB0%0│%CB0%D 叫分 3分 %CB0%0│       │:   
SET SYBCS=%SYBCS%;:10168%CB0%%PDI1Y%%PDI1S% %CB0%%PDI2Y%%PDI2S% %CB0%%PDI3Y%%PDI3S%;%CB0%%PDI1Y%%PDI1H% %CB0%%PDI2Y%%PDI2H% %CB0%%PDI3Y%%PDI3H%
set SYBCS0=%SYBCS%
::显示3人的名称框
SET SYBCS=%SYBCS%;:10300$4c☉$4c▄▄▄▄$4c☉;$c4▌$c9 电脑左 $4c▌;$c4▌$ce余牌11张$4c▌;$4c☉$c4▄▄▄▄$4c☉
SET SYBCS=%SYBCS%;:10368$4c☉$4c▄▄▄▄$4c☉;$c4▌$c9 电脑右 $4c▌;$c4▌$ce余牌7 张$4c▌;$4c☉$c4▄▄▄▄$4c☉
SET SYBCS=%SYBCS%;:11400$4c☉$4c▄▄▄▄$4c☉;$c4▌$c9玩家SYBN$4c▌;$c4▌$ce余牌17张$4c▌;$4c☉$c4▄▄▄▄$4c☉
::显示电脑的牌背
call :pb 10701
call :pb 10769
set SYBCS1=%SYBCS%
CALL :SYBCS
::P11显示玩家的牌
call :p11
::计时2
set t2=%time%
::计算时差并显示
call :timec
:GB
title 请选择您要出的牌...
::初始化选牌指针 变量GBy为原指针位置
set /a GBy=12212,GBs=1
:GB1
::定位选牌指针 变量GBW为新指针位置
set /a GBW=12209+GBs*3
::显示选牌指针并擦除原指针
call :sybc %GBy%f1  ;
call :sybc %GBw%f1↑
::无参数的SYBC功能类似CHOICE,暂停脚本并获取一个按键
call :sybc
::下一行,显示所按的键
::title sybc-%errorlevel%-
::根据不同的按键执行相应的操作
::  左右键移动光标
if %errorlevel% == 75 set /a GBs-=1
if %errorlevel% == 77 set /a GBs+=1
::  上下键拉起/放下扑克 并刷新玩家的牌
if %errorlevel% == 72 if !p2w%GBs%! == 0 set /a p2w%GBs%=1&&call :p11 1 %GBs%
if %errorlevel% == 80 if !p2w%GBs%! == 1 set /a p2w%GBs%=0&&call :p11 0 %GBs%
::  空格 出牌
if %errorlevel% == 57 goto chupai
::  F2 重新发牌
if %errorlevel% == 60 goto 2
::  F5 刷新
if %errorlevel% == 63 goto 1
::指针超出高低极限则恢复
if %GBs% lss 1 set gbs=%p2z%
if %GBs% gtr %p2z% set gbs=1
::保存原指针等待擦除
set /a GBy=GBw
goto :GB1
:chupai
::出牌
set /a p6s=0,p6h=0,p6y=0,p6z=0,p0s=0,p0h=0,p0y=0,p0z=0,p2zBF=%p2z%
set p2sBF=%p2s%
set p2hBF=%p2h%
set p2yBF=%p2y%
for /l %%a in (1,1,%p2z%) do if !p2w%%a! == 1 (set /a p6z=p6z+1&&set p6s=!p6s!!p2s:~%%a,1!&&set p6h=!p6h!!p2h:~%%a,1!&&set p6y=!p6y!!p2y:~%%a,1!&&set p6js=农 民) else (set /a p0z=p0z+1&&set p0s=!p0s!!p2s:~%%a,1!&&set p0h=!p0h!!p2h:~%%a,1!&&set p0y=!p0y!!p2y:~%%a,1!)
for /l %%a in (1,1,%p0z%) do (set /a p2z=p0z&&set p2s=!p0s!&&set p2h=!p0h!&&set p2y=!p0y!)
:yanzheng
set px=违规&set pxs=0&set pxz={违规了!}&set ps=---34567890JQKA02N$
::初始化
for /l %%a in (0,1,4) do set pss%%a=0
for %%a in (3 4 5 6 7 8 9 0 J Q K A 2 N) do set ps%%a=0&set p6zs%%a=0
::计算各中点数的牌的数量
for /l %%a in (1,1,20) do for /f %%b in ("!p6s:~%%a,1!") do set /a ps%%b+=1
::计算牌的数量
set /a p6zs=%ps3%+%ps4%+%ps5%+%ps6%+%ps7%+%ps8%+%ps9%+%ps0%+%psj%+%psq%+%psk%+%psa%+%ps2%+%psn%
::获取标记字符串%p6ss%
set p6ss=---%ps3%%ps4%%ps5%%ps6%%ps7%%ps8%%ps9%%ps0%%psj%%psq%%psk%%psa%0%ps2%%psn%$
::提取最大的单张,2张,3张,4张
for /l %%a in (3,1,17) do set pss!p6ss:~%%a,1!=%%a
::提取最小的单张,2张,3张,4张
for /l %%a in (17,-1,3) do set psx!p6ss:~%%a,1!=%%a
::单牌
if %p6zs% == 1 set px=一张&set pxz=一张{!ps:~%pss1%,1!}&set pxs=%pss1%
set p=%p6ss%&set q=%p6zs%
::3张和飞机
::解释:  %p:3=.% == %p%  表示%p%中没有3则if生效,加上not表示有3则if生效
if %q% == 6 if not %p:33=.% == %p% set px=飞机
if %q% == 8 if not %p:33=.% == %p% set px=飞机带单
if %q% == 10 if not %p:33=.% == %p% if %p:1=.% == %p% set px=飞机带对
if not %px:飞机=.% == %px% set pxs=%pss3%&set pxz=%px%
if %q% == 9 if not %p:333=.% == %p% set px=三顺
if %q% == 12 if not %p:333=.% == %p% set px=三顺带单
if %q% == 15 if not %p:333=.% == %p% if %p:1=.% == %p% set px=三顺带对
if %q% == 12 if not %p:3333=.% == %p% set px=三大顺
if %q% == 16 if not %p:3333=.% == %p% set px=三大顺带单
set p3=%p:3333=.%
if %q% == 20 if not %p:3333=.% == %p% if %p:1=.% == %p% if %p3:3=.% == %p3% set px=三大顺带对
if %q% == 15 if not %p:33333=.% == %p% set px=三巨顺
if %q% == 20 if not %p:33333=.% == %p% set px=三巨顺带单
if %q% == 18 if not %p:333333=.% == %p% set px=三神顺
if not %px:三=.% == %px% set pxs=%pss3%&set pxz=%px%
if %q% == 3 if not %p:3=.% == %p% set px=三张&set pxz=三张!ps:~%pss3%,1!
if %q% == 4 if not %p:3=.% == %p% set px=三带一&set pxz=三张!ps:~%pss3%,1!带一张!ps:~%pss1%,1!
if %q% == 5 if not %p:3=.% == %p% if not %p:2=.% == %p% set px=三带对&set pxz=三张!ps:~%pss3%,1!带一对!ps:~%pss2%,1!
::对子和兄弟
if %q% == 2 if %p:1=.% == %p% set px=对子&set pxz=一对!ps:~%pss2%,1!&set pxs=%pss2%
if %q% == 6 if not %p:222=.% == %p% set px=3兄弟
if %q% == 8 if not %p:2222=.% == %p% set px=4兄弟
if %q% == 10 if not %p:22222=.% == %p% set px=5兄弟
if %q% == 12 if not %p:222222=.% == %p% set px=6兄弟
if %q% == 14 if not %p:2222222=.% == %p% set px=7兄弟
if %q% == 16 if not %p:22222222=.% == %p% set px=8兄弟
if %q% == 18 if not %p:222222222=.% == %p% set px=9兄弟
if %q% == 20 if not %p:2222222222=.% == %p% set px=10兄弟
::顺子
if %q% == 5 if not %p:11111=.% == %p% set px=5张顺子
if %q% == 6 if not %p:111111=.% == %p% set px=6张顺子
if %q% == 7 if not %p:1111111=.% == %p% set px=7张顺子
if %q% == 8 if not %p:11111111=.% == %p% set px=8张顺子
if %q% == 9 if not %p:111111111=.% == %p% set px=9张顺子
if %q% == 10 if not %p:1111111111=.% == %p% set px=10张顺子
if %q% == 11 if not %p:11111111111=.% == %p% set px=11张顺子
if %q% == 12 if not %p:111111111111=.% == %p% set px=12张顺子
::炸弹
if %q% == 4 if not %p:4=.% == %p% set px=炸弹&set pxz=炸弹{四张!ps:~%pss4%,1!}&set pxs=%pss4%&set pxs=%pss4%
if %q% == 2 if not %p:2$=.% == %p% set px=王炸&set pxz=王炸{无敌}&set pxs=%pss2%
::提取有效牌(顺子和兄弟里的最大一张,3张里的不含带牌的最大一张)
if not %px:顺子=.% == %px% set pxs=%pss1%&set pxz=%px%!ps:~%psx1%,1!到!ps:~%pss1%,1!
if not %px:兄弟=.% == %px% set pxs=%pss2%&set pxz=%px%!ps:~%psx2%,1!到!ps:~%pss2%,1!
call :sybc 1146830您出的牌:   ;            ;:115683C%pxz%
if "%px%" == "违规" (set p2s=%p2sBF%&&set p2h=%p2hBF%&&set p2y=%p2yBF%&&set p2z=%p2zBF%
for /l %%a in (1,1,20) do set p2w%%a=0
call :p11
call :sybc 1166830不能这样出.;请重新出牌!
goto :GB)
(ECHO.fB800:%DEBUGQK:;= 20 3e&ECHO.fB800:% 20 3e&ECHO.q%)|DEBUG>NUL
for /l %%a in (1,1,%P6z%) do set /a wz=11220+%%a*3&&call :pa !wz! !p6y:~%%a,1! !p6s:~%%a,1! !p6h:~%%a,1! %p6js%
call :sybcs
for /l %%a in (1,1,20) do set p2w%%a=0
SET SYBCS=%SYBCS%;:1035030  ▁▁▁▁▁▁  ;$03▉$30      ▏;$03▉$3e 俺懒得要!$30▏;$03▉$3e      $30╲;  $03▇▇▇▇▇▇▇
call :sybcs
SET SYBCS=%SYBCS%;:1071330  ▁▁▁▁▁▁  ;$03▉$30      ▏;$03▉$3e 俺要不起!$30▏;╱$3e      $30▏;$03▇▇▇▇▇▇▇$30  
call :sybcs
if %p6z% == %p2zBF% goto :win
call :p11
call :sybc 11606ce  ;:11606ce%p2z%
call :sybc 1166830没人要得起.;请继续出牌!
goto :GB
:p1
if "%2" == "" goto :P11
:P11
(echo.FB800:B40 FFF 20 3E&echo q)|DEBUG>NUL
set SYBCS=10000f1
for /l %%a in (1,1,%p2z%) do set /a wz=11908+%%a*3,pz=%%a+1&(if !p2w%%a! == 1 set /a wz=!wz!-100)&call :pa !wz! !p2y:~%%a,1! !p2s:~%%a,1! !p2h:~%%a,1! 农 民
CALL :SYBCS
goto :eof
:pl
set pl=%2
for %%a in (0,1,20) set /a pq1=%%a*7+5,pq2=%%a*7+6 &&call :pa %1
goto :eof
:pb
SET SYBCS=%SYBCS%;:%1%pkBK3%▄▄▄▄▄;%pkbk% %pkNB% {\__/} %pkBK% ; %pkNB% / $fc@@%pkNB% \ %pkBK% ; %pkNB%( ($f0oo%pkNB%) )%pkBK% ; %pkNB% / ~~ \ %pkBK% ;%pkbk% $f2斗 地 主%pkbk% ;%pkBK4%▄▄▄▄▄%pkBK%
goto :eof
:pa
if not "%4" == "" SET SYBCS=%SYBCS%;:%1%pkBK% ▄▄▄▄ ; $f%2%3%pkNB%     %pkBK% ; $f%2%4%pkNB%  %5   %pkBK% ; %pkNB%   %6  $f%2%4%pkBK% ; %pkNB%     $f%2%3%pkBK% ; %pkBK2%▄▄▄▄%pkBK%
goto :eof
:fp
title 发牌中...
for /l %%a in (1,1,20) do set p2w%%a=0
set paid=&set paif=&set paiy=&set /a p1z=17,p2z=17,p3z=17
:FP1
set /a pran+=1,m=0,n=0,d=0
::随机排序54张牌(洗牌)
for %%a in (3 4 5 6 7 8 9 0 J Q K A 2) do (for %%b in (!pkh1!-!pky0! !pkh2!-!pky0! !pkh3!-!pky1! !pkh4!-!pky1!) do (set p%pran%#!random!!random!.%%a-%%b=1))
set P%pran%#300543001.N-!pkh0!-!pky1!=1&set P%pran%#543001000.N-!pkh0!-!pky0!=1
::发牌,并留三张底
set he1=&set he2=&set he3=&set Di=
for /f "tokens=2 delims==." %%a in ('set p%pran%#') do set /a m=m%%3+1,n+=1&&if !n! leq 51 (for %%c in (!m!) do set he%%c=!he%%c! %%a) else (set di=!di! %%a)
set a=1s=%di:~1,1%;1h=%di:~3,1%;1y=%di:~5,1%;2s=%di:~7,1%;2h=%di:~9,1%;2y=%di:~11,1%;3s=%di:~13,1%;3h=%di:~15,1%;3y=%di:~17,1%
set pdi%a:;=&set pdi%
::整理各家手上的牌
for /l %%a in (1,1,3) do (for %%b in (!he%%a!) do (for /f "tokens=1,2,3 delims=-" %%c in ("%%b") do (
                        set pd%pran%#%%c=!pd%pran%#%%c!%%c
                        set pf%pran%#%%c=!pf%pran%#%%c!%%d
                        set py%pran%#%%c=!py%pran%#%%c!%%e))
        for %%b in (3 4 5 6 7 8 9 0 J Q K A 2 N) do set paid%pran%#=!paid%pran%#!!pd%pran%#%%b!&set paif%pran%#=!paif%pran%#!!pf%pran%#%%b!&set paiy%pran%#=!paiy%pran%#!!py%pran%#%%b!
        for /f "tokens=1,2,3 delims=." %%b in ("!paid%pran%#!.!paif%pran%#!.!paiy%pran%#!") do set p%%as=0%%b&set p%%ah=0%%c&set p%%ay=0%%d
)
if "%pdi3s%" == "" goto FP
goto :eof
:win
(echo.FB800:B40 FFF 20 3E&echo q)|DEBUG>NUL
call :sybc 12030F1╔════════╗;║$FC恭喜你,获得胜利.$F1║;║$F8按任意键从新开局$F1║;╚════════╝
pause>nul
goto :2
:timec
IF "%t1%" == "" EXIT /B 0
FOR /F "DELIMS=:. TOKENS=1,2,3,4" %%N IN ("%t1%") DO SET O=1%%O&SET P=1%%P&SET Q=1%%Q&SET /A N=100+%%N
IF "%t2%" == "" SET /A T=N*360000+O*6000+P*100+Q-36610100&&EXIT /B !T!
FOR /F "DELIMS=:. TOKENS=1,2,3,4" %%M IN ("%t2%") DO SET I=1%%N&SET J=1%%O&SET K=1%%P&SET /A H=100+%%M
IF "%t2%" GTR "A" (SET L=%t2%&SET /A T=N*360000+O*6000+P*100+Q-36610100,S=T/100,M=T/6000,H=T/360000) ELSE (SET L=%3&SET /A H=H-N,I=I-O,J=J-P,K=K-Q,T=H*360000+I*6000+J*100+K,S=T/100,M=T/6000,H=T/360000)
IF "%L%" == "" SET L=T
call :sybc 1176831耗时:   厘秒;:11773$3c!%L%!
goto :eof
:SYBCS
(ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%SYBCV:`=&ECHO.%)|DEBUG>NUL
goto :EOF
:SYBC
IF "%1" == "" SET SYBCCD=00&GOTO SYBCC
SET SYBCCD=54
set SYBCC=%*
:SYBCC
SET V=`A80`DB %SYBCCD% 00 "%SYBCC%" 0D``RCX`120`G`Q
(ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:`=&ECHO.%)|DEBUG>NUL
EXIT /B %ERRORLEVEL%
[ Last edited by sl543001 on 2010-4-5 at 21:05 ]
作者: ZJHJ     时间: 2010-4-4 11:15
32 L  没有↑符号
作者: vk     时间: 2010-4-4 11:28
膜拜 学习 DDDDDDDDDDD
作者: sl543001     时间: 2010-4-4 12:51
更新了32楼,再试试!
正在想办法让脚本支持鼠标操作
作者: ZJHJ     时间: 2010-4-4 13:56
32 L  还是没有↑符号
附件 1: bbb.gif (2010-4-4 13:58, 62.13 K, 下载附件所需积分 1点 )



作者: ZJHJ     时间: 2010-4-4 17:58
你把 call :sybc %GBy%f1 ;:%GBw%f1↑这一句没有改到(sybc %GBy%f1 ;:%GBw%f1↑)
大家修改一下就行了
作者: sl543001     时间: 2010-4-5 20:54
哈哈,不好意思啊!
由于SYBC的版本还不稳定,经常有更新,并且俺正在计划给他再添加新功能.
所以旧版升级新版的过程会有少许麻烦
大体如下:
1 各种版本的SYBC参数基本一致(这不算问题)
2 新版一般比旧版大,所以要变量V里的修改RCX参数(有时忘了改所以出错,这次不是)
2 新版支持了新的调用方式,修改调用会很麻烦(这次问题出在这里)
问题:原来的脚本使用了SYBC文件,新版不用了,但是部分地方忘了改,所以出错
还好,目前不打算再改调用方式了,原来的SYBC文件形式的调用将不推荐使用,但仍旧支持
作者: sl543001     时间: 2010-4-23 10:57
SYBC 1.1.41 新加鼠标支持,但不是很完善
测试中,可以用鼠标控制出牌,但咱不支持无3方
作者: wode5130xm     时间: 2010-4-23 13:34
哈哈!楼主真强啊!
作者: sl543001     时间: 2010-4-23 13:51    标题: 发布基于SYBC 1.1.41 的斗地主测试代码

测试了SYBC 1.1.41 暂未发现异常
发布基于SYBC 1.1.41 的斗地主测试代码
@echo off&SETLOCAL ENABLEDELAYEDEXPANSION&(CHCP 437 &GRAFTABL 936)>NUL
mode con cols=80 lines=25 >nul
::变量初始化
::玩家1-3 的牌统一使用P1XXX-p3XXX变量 P4XXX保留   玩家出的牌统一使用P5XXX-P6XXX  P7XXX保留  P0XXX 用于临时需要
::与扑克有关的变量牌统一使用PKXXX   
::    PKSXX代表各个点数的牌与字符的对应值 pks11=J  pks12=Q
::    PKHX代表各个花色的数字与字符的对应值 pkh1= (红桃) pkh0=T (王)
::    PKYX代表各个颜色的数字与字符的对应值 扑克只有红黑2色 pky0=c (红) pky1=0 (黑) (同color命令)
set a=s1=A;s2=2;s3=3;s4=4;s5=5;s6=6;s7=7;s8=8;s9=9;s10=0;s11=J;s12=Q;s13=K;s14=A;s15=2;s16=N;s17=N;h1=;h2=;h3=;h4=;h0=T;y0=c;y1=0;BK=$7f;BK2=$f7;BK3=$37;BK4=$73;NB=$f1;p=1
set pk%a:;=&set pk%
::载入/生成sybc 变量SYBCOM保存SYBC的16进制数据 V保存DEBUG代码 最后通过管道交由DEBUG执行
SET SYBCOM=A100``80BE BA00 0 88AC ACC4 88AC 80C3 FC`3674 FC80 BEFF 82 4B75 2CBE AC00 C488`86AC 50C4 BE1F 0 3CAC 7553 ACFB 593C`F675 3CAC 7542 ACF1 433C EC75 3CAC 7553`ACE7 3D3C E275 1DEB 1B3 8EE9 B300 E902`89 3CAC 743A 3C0E 740D 3C5B 7400 8357`1EE 83E9 AC00 313C 1874 4A3C DA74 4B3C`DB74 4D3C 4474 6A3C CE74 6B3C CF74 6D3C`3874 D6E8 E800 F0 183C 2A7F C688 CAE8`E800 E4 4F3C 1E7F C288 2B0 E2F6 B050`F6A0 5FE6 C701 AC57 243C 374 EE83 E801`74 D188 38EB 4CB4 21CD B8 CD00 B833`1 33CD 5B8 CD00 A933 3 F174 3B8`CD00 8933 B3C8 F608 EBF3 B0DB CD00 8016`2FB D274 E088 CEEB 815F A0C7 5700 B850`B800 750 295A 88F5 ACCA 243C B174 3B3C`1174 D3C 5174 3C 4D74 233C 875 D783`EB01 E904 FF3C 80AA FA 574 D088 EBAA`83D8 1D7 D3EB 32E8 3C00 7523 8008 23FB`375 B2 38C3 74D8 87F9 3CC3 7E39 402`8009 39FB 37E C380 2409 800F FE3 10B2`E2F6 D800 C288 B4C3 CD4C AC21 203C FB74`D3C F374 3C EF74 C388 3CAC 7420 3CEC`740D 3CE4 7400 C3E0 C387 302C EB80 B430`F60A E4 C3D8``
SET SYBCV=`A80`DB FF``RCX`200`G`Q
SET V=;RCX;200;N SYBC.COM;W;Q
(ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL
::保存刷新块坐标 游戏界面中间部分(出牌的位置),每次需要局部刷新,变量DEBUGQK保存要刷新的内存地址起止点
set DEBUGQK=1F8 267;298 307;338 3a7;3D8 447;478 4e7;518 587;5B8 627;658 6c7;6F8 767;798 807;838 8a7;8D8 947;978 9e7;A18 a87;AB8 b27
set kh=                                                                                ;
for /l %%a in (1,1,6) do set kh=!kh!%KH%
::初始信息
color 3e
echo 斗地主 {注释版} 2010-3-20
echo.
echo 目前没有AI,电脑不会出牌.你可以随便出牌,出完自动发牌.
echo.
echo 按键模式功能:M(鼠标模式) F2(从新发牌) F5(刷新) 方向键(控制扑克) 空格(出牌)
echo.
echo 鼠标模式功能:键盘按钮(键盘模式) 扑克(选择/取消选择 一张扑克) 出牌(出牌)
echo.
echo 按任意键开始测试...
echo.
call :SYBC
(echo.Q)|DEBUG>NUL
echo 测试失败.请关闭游戏.并联系SYBN QQ:354324773
call :SYBC 110000A测试成功.请再按任意键以开始游戏,祝您游戏愉快.
echo.
echo win 2003以后系统无法正常运行SYBC,所以会看到"测试失败"字样.
echo [win 2003 R2]系统测试通过  [win XP SP2]系统测试通过
pause>NUL
:2
::调用发牌模块
call :FP
:1
::变量CBXX统一用于颜色背景信息  
set cB0=$f
cls
::计时1
set t1=%time%
::显示顶部栏
SET SYBCS=10000%CB0%0 :::│%CB0%C积%CB0%9  电脑左  %CB0%00  %CB0%2+0%CB0%C=%CB0%00  %CB0%0│%CB0%C 斗地主 V0.0 [测试版] %CB0%0│%CB0%0  [庄家]  %CB0%0│ 底 牌 │:::
SET SYBCS=%SYBCS%;:10100%CB0%0  ::│%CB0%C分%CB0%9  电脑右  %CB0%00  %CB0%2+0%CB0%C=%CB0%00  %CB0%0│%CB0%9开发:SYBN NETBENTON PLP %CB0%0│%CB0%9  电脑左  %CB0%0│       │::  
SET SYBCS=%SYBCS%;:10200%CB0%0   :│%CB0%C榜%CB0%9 玩家SYBN %CB0%00  %CB0%2+0%CB0%C=%CB0%00  %CB0%0│%CB0%22010-3-20  按F1查看帮助%CB0%0│%CB0%D 叫分 3分 %CB0%0│       │:   
SET SYBCS=%SYBCS%;:10168%CB0%%PDI1Y%%PDI1S% %CB0%%PDI2Y%%PDI2S% %CB0%%PDI3Y%%PDI3S%;%CB0%%PDI1Y%%PDI1H% %CB0%%PDI2Y%%PDI2H% %CB0%%PDI3Y%%PDI3H%
set SYBCS0=%SYBCS%
::显示3人的名称框
SET SYBCS=%SYBCS%;:10300$4c☉$4c▄▄▄▄$4c☉;$c4▌$c9 电脑左 $4c▌;$c4▌$ce余牌11张$4c▌;$4c☉$c4▄▄▄▄$4c☉
SET SYBCS=%SYBCS%;:10368$4c☉$4c▄▄▄▄$4c☉;$c4▌$c9 电脑右 $4c▌;$c4▌$ce余牌7 张$4c▌;$4c☉$c4▄▄▄▄$4c☉
SET SYBCS=%SYBCS%;:11400$4c☉$4c▄▄▄▄$4c☉;$c4▌$c9玩家SYBN$4c▌;$c4▌$ce余牌17张$4c▌;$4c☉$c4▄▄▄▄$4c☉
::显示电脑的牌背
call :pb 10701
call :pb 10769
set SYBCS1=%SYBCS%
CALL :SYBCS
::P11显示玩家的牌
set kzms=sb
call :p11
::计时2
set t2=%time%
::计算时差并显示
call :timec
goto :%kzms%
:GB
:SB
title 请用鼠标选择您要出的牌...
:SB1
set kzms=sb
sybc M
set err=%errorlevel%
set /a GBSvv=err-8,GBSvm=17+p2z*3,GBS=GBSvv/3
if %err% gtr %GBSvm% (goto chupai) else (if %err% == 10 (goto chupai) else (if %err% lss 10 set kzms=jp&&call :p11&&goto :GBJ))
if %GBs% gtr %p2z% set GBs=%P2z%
if !p2w%GBs%! == 0 (set /a p2w%GBs%=1&&call :p11 1 %GBs%&&goto :SB1) else (set /a p2w%GBs%=0&&call :p11 0 %GBs%&&goto :SB1)
goto :SB1
:GBJ
title 请选用键盘择您要出的牌...
::初始化选牌指针 变量GBy为原指针位置
set /a GBy=12212,GBs=1
:GB1
set kzms=jp
::定位选牌指针 变量GBW为新指针位置
set /a GBW=12209+GBs*3
::显示选牌指针并擦除原指针
call :sybc %GBy%f1  ;
call :sybc %GBw%f1↑
::无参数的SYBC功能类似CHOICE,暂停脚本并获取一个按键
call :sybc
::下一行,显示所按的键
::title sybc-%errorlevel%-
::根据不同的按键执行相应的操作
::  左右键移动光标
if %errorlevel% == 75 set /a GBs-=1
if %errorlevel% == 77 set /a GBs+=1
::  上下键拉起/放下扑克 并刷新玩家的牌
if %errorlevel% == 72 if !p2w%GBs%! == 0 set /a p2w%GBs%=1&&call :p11 1 %GBs%
if %errorlevel% == 80 if !p2w%GBs%! == 1 set /a p2w%GBs%=0&&call :p11 0 %GBs%
::  空格 出牌
if %errorlevel% == 57 goto chupai
::  F2 重新发牌
if %errorlevel% == 60 goto 2
::  F5 刷新
if %errorlevel% == 63 goto 1
::
if %errorlevel% == 50 goto :SB
::指针超出高低极限则恢复
if %GBs% lss 1 set gbs=%p2z%
if %GBs% gtr %p2z% set gbs=1
::保存原指针等待擦除
set /a GBy=GBw
goto :GB1
:chupai
::出牌
set /a p6s=0,p6h=0,p6y=0,p6z=0,p0s=0,p0h=0,p0y=0,p0z=0,p2zBF=%p2z%
set p2sBF=%p2s%
set p2hBF=%p2h%
set p2yBF=%p2y%
for /l %%a in (1,1,%p2z%) do if !p2w%%a! == 1 (set /a p6z=p6z+1&&set p6s=!p6s!!p2s:~%%a,1!&&set p6h=!p6h!!p2h:~%%a,1!&&set p6y=!p6y!!p2y:~%%a,1!&&set p6js=农 民) else (set /a p0z=p0z+1&&set p0s=!p0s!!p2s:~%%a,1!&&set p0h=!p0h!!p2h:~%%a,1!&&set p0y=!p0y!!p2y:~%%a,1!)
for /l %%a in (1,1,%p0z%) do (set /a p2z=p0z&&set p2s=!p0s!&&set p2h=!p0h!&&set p2y=!p0y!)
:yanzheng
set px=违规&set pxs=0&set pxz={违规了!}&set ps=---34567890JQKA02N$
::初始化
for /l %%a in (0,1,4) do set pss%%a=0
for %%a in (3 4 5 6 7 8 9 0 J Q K A 2 N) do set ps%%a=0&set p6zs%%a=0
::计算各中点数的牌的数量
for /l %%a in (1,1,20) do for /f %%b in ("!p6s:~%%a,1!") do set /a ps%%b+=1
::计算牌的数量
set /a p6zs=%ps3%+%ps4%+%ps5%+%ps6%+%ps7%+%ps8%+%ps9%+%ps0%+%psj%+%psq%+%psk%+%psa%+%ps2%+%psn%
::获取标记字符串%p6ss%
set p6ss=---%ps3%%ps4%%ps5%%ps6%%ps7%%ps8%%ps9%%ps0%%psj%%psq%%psk%%psa%0%ps2%%psn%$
::提取最大的单张,2张,3张,4张
for /l %%a in (3,1,17) do set pss!p6ss:~%%a,1!=%%a
::提取最小的单张,2张,3张,4张
for /l %%a in (17,-1,3) do set psx!p6ss:~%%a,1!=%%a
::单牌
if %p6zs% == 1 set px=一张&set pxz=一张{!ps:~%pss1%,1!}&set pxs=%pss1%
set p=%p6ss%&set q=%p6zs%
::3张和飞机
::解释:  %p:3=.% == %p%  表示%p%中没有3则if生效,加上not表示有3则if生效
if %q% == 6 if not %p:33=.% == %p% set px=飞机
if %q% == 8 if not %p:33=.% == %p% set px=飞机带单
if %q% == 10 if not %p:33=.% == %p% if %p:1=.% == %p% set px=飞机带对
if not %px:飞机=.% == %px% set pxs=%pss3%&set pxz=%px%
if %q% == 9 if not %p:333=.% == %p% set px=三顺
if %q% == 12 if not %p:333=.% == %p% set px=三顺带单
if %q% == 15 if not %p:333=.% == %p% if %p:1=.% == %p% set px=三顺带对
if %q% == 12 if not %p:3333=.% == %p% set px=三大顺
if %q% == 16 if not %p:3333=.% == %p% set px=三大顺带单
set p3=%p:3333=.%
if %q% == 20 if not %p:3333=.% == %p% if %p:1=.% == %p% if %p3:3=.% == %p3% set px=三大顺带对
if %q% == 15 if not %p:33333=.% == %p% set px=三巨顺
if %q% == 20 if not %p:33333=.% == %p% set px=三巨顺带单
if %q% == 18 if not %p:333333=.% == %p% set px=三神顺
if not %px:三=.% == %px% set pxs=%pss3%&set pxz=%px%
if %q% == 3 if not %p:3=.% == %p% set px=三张&set pxz=三张!ps:~%pss3%,1!
if %q% == 4 if not %p:3=.% == %p% set px=三带一&set pxz=三张!ps:~%pss3%,1!带一张!ps:~%pss1%,1!
if %q% == 5 if not %p:3=.% == %p% if not %p:2=.% == %p% set px=三带对&set pxz=三张!ps:~%pss3%,1!带一对!ps:~%pss2%,1!
::对子和兄弟
if %q% == 2 if %p:1=.% == %p% set px=对子&set pxz=一对!ps:~%pss2%,1!&set pxs=%pss2%
if %q% == 6 if not %p:222=.% == %p% set px=3兄弟
if %q% == 8 if not %p:2222=.% == %p% set px=4兄弟
if %q% == 10 if not %p:22222=.% == %p% set px=5兄弟
if %q% == 12 if not %p:222222=.% == %p% set px=6兄弟
if %q% == 14 if not %p:2222222=.% == %p% set px=7兄弟
if %q% == 16 if not %p:22222222=.% == %p% set px=8兄弟
if %q% == 18 if not %p:222222222=.% == %p% set px=9兄弟
if %q% == 20 if not %p:2222222222=.% == %p% set px=10兄弟
::顺子
if %q% == 5 if not %p:11111=.% == %p% set px=5张顺子
if %q% == 6 if not %p:111111=.% == %p% set px=6张顺子
if %q% == 7 if not %p:1111111=.% == %p% set px=7张顺子
if %q% == 8 if not %p:11111111=.% == %p% set px=8张顺子
if %q% == 9 if not %p:111111111=.% == %p% set px=9张顺子
if %q% == 10 if not %p:1111111111=.% == %p% set px=10张顺子
if %q% == 11 if not %p:11111111111=.% == %p% set px=11张顺子
if %q% == 12 if not %p:111111111111=.% == %p% set px=12张顺子
::炸弹
if %q% == 4 if not %p:4=.% == %p% set px=炸弹&set pxz=炸弹{四张!ps:~%pss4%,1!}&set pxs=%pss4%&set pxs=%pss4%
if %q% == 2 if not %p:2$=.% == %p% set px=王炸&set pxz=王炸{无敌}&set pxs=%pss2%
::提取有效牌(顺子和兄弟里的最大一张,3张里的不含带牌的最大一张)
if not %px:顺子=.% == %px% set pxs=%pss1%&set pxz=%px%!ps:~%psx1%,1!到!ps:~%pss1%,1!
if not %px:兄弟=.% == %px% set pxs=%pss2%&set pxz=%px%!ps:~%psx2%,1!到!ps:~%pss2%,1!
call :sybc 1146830您出的牌:   ;            ;:115683C%pxz%
if "%px%" == "违规" (set p2s=%p2sBF%&&set p2h=%p2hBF%&&set p2y=%p2yBF%&&set p2z=%p2zBF%
for /l %%a in (1,1,20) do set p2w%%a=0
call :p11
call :sybc 1166830不能这样出.;请重新出牌!
goto :GB)
(ECHO.fB800:%DEBUGQK:;= 20 3e&ECHO.fB800:% 20 3e&ECHO.q%)|DEBUG>NUL
for /l %%a in (1,1,%P6z%) do set /a wz=11220+%%a*3&&call :pa !wz! !p6y:~%%a,1! !p6s:~%%a,1! !p6h:~%%a,1! %p6js%
call :sybcs
for /l %%a in (1,1,20) do set p2w%%a=0
SET SYBCS=%SYBCS%;:1035030  ▁▁▁▁▁▁  ;$03▉$30      ▏;$03▉$3e 俺懒得要!$30▏;$03▉$3e      $30╲;  $03▇▇▇▇▇▇▇
call :sybcs
SET SYBCS=%SYBCS%;:1071330  ▁▁▁▁▁▁  ;$03▉$30      ▏;$03▉$3e 俺要不起!$30▏;╱$3e      $30▏;$03▇▇▇▇▇▇▇$30  
call :sybcs
if %p6z% == %p2zBF% goto :win
call :p11
call :sybc 11606ce  ;:11606ce%p2z%
call :sybc 1166830没人要得起.;请继续出牌!
goto :GB
:p1
if "%2" == "" goto :P11
:P11
set SYBCS=11800$3e%KH%:12000$##按M键切换;到鼠标模式;出牌更方便;建议用鼠标;:12070$##F2重新发牌;F5刷新屏幕;方向键控制;空格键出牌
if "%kzms%" == "sb" set SYBCS=11800$3e%KH%:11900$##┌───┒;│键  盘┃;┕━━━┛;鼠标模式不;能用功能键;点击用键盘;:11970$##┌───┒;│出  牌┃;┕━━━┛;鼠标模式下;单击选扑克;然后点出牌
for /l %%a in (1,1,%p2z%) do set /a wz=11908+%%a*3,pz=%%a+1&(if !p2w%%a! == 1 set /a wz=!wz!-100)&call :pa !wz! !p2y:~%%a,1! !p2s:~%%a,1! !p2h:~%%a,1! 农 民
CALL :SYBCS
goto :eof
:pl
set pl=%2
for %%a in (0,1,20) set /a pq1=%%a*7+5,pq2=%%a*7+6 &&call :pa %1
goto :eof
:pb
SET SYBCS=%SYBCS%;:%1%pkBK3%▄▄▄▄▄;%pkbk% %pkNB% {\__/} %pkBK% ; %pkNB% / $fc@@%pkNB% \ %pkBK% ; %pkNB%( ($f0oo%pkNB%) )%pkBK% ; %pkNB% / ~~ \ %pkBK% ;%pkbk% $f2斗 地 主%pkbk% ;%pkBK4%▄▄▄▄▄%pkBK%
goto :eof
:pa
if not "%4" == "" SET SYBCS=%SYBCS%;:%1%pkBK% ▄▄▄▄ ; $f%2%3%pkNB%     %pkBK% ; $f%2%4%pkNB%  %5   %pkBK% ; %pkNB%   %6  $f%2%4%pkBK% ; %pkNB%     $f%2%3%pkBK% ; %pkBK2%▄▄▄▄%pkBK%
goto :eof
:fp
title 发牌中...
for /l %%a in (1,1,20) do set p2w%%a=0
set paid=&set paif=&set paiy=&set /a p1z=17,p2z=17,p3z=17
:FP1
set /a pran+=1,m=0,n=0,d=0
::随机排序54张牌(洗牌)
for %%a in (3 4 5 6 7 8 9 0 J Q K A 2) do (for %%b in (!pkh1!-!pky0! !pkh2!-!pky0! !pkh3!-!pky1! !pkh4!-!pky1!) do (set p%pran%#!random!!random!.%%a-%%b=1))
set P%pran%#300543001.N-!pkh0!-!pky1!=1&set P%pran%#543001000.N-!pkh0!-!pky0!=1
::发牌,并留三张底
set he1=&set he2=&set he3=&set Di=
for /f "tokens=2 delims==." %%a in ('set p%pran%#') do set /a m=m%%3+1,n+=1&&if !n! leq 51 (for %%c in (!m!) do set he%%c=!he%%c! %%a) else (set di=!di! %%a)
set a=1s=%di:~1,1%;1h=%di:~3,1%;1y=%di:~5,1%;2s=%di:~7,1%;2h=%di:~9,1%;2y=%di:~11,1%;3s=%di:~13,1%;3h=%di:~15,1%;3y=%di:~17,1%
set pdi%a:;=&set pdi%
::整理各家手上的牌
for /l %%a in (1,1,3) do (for %%b in (!he%%a!) do (for /f "tokens=1,2,3 delims=-" %%c in ("%%b") do (
                        set pd%pran%#%%c=!pd%pran%#%%c!%%c
                        set pf%pran%#%%c=!pf%pran%#%%c!%%d
                        set py%pran%#%%c=!py%pran%#%%c!%%e))
        for %%b in (3 4 5 6 7 8 9 0 J Q K A 2 N) do set paid%pran%#=!paid%pran%#!!pd%pran%#%%b!&set paif%pran%#=!paif%pran%#!!pf%pran%#%%b!&set paiy%pran%#=!paiy%pran%#!!py%pran%#%%b!
        for /f "tokens=1,2,3 delims=." %%b in ("!paid%pran%#!.!paif%pran%#!.!paiy%pran%#!") do set p%%as=0%%b&set p%%ah=0%%c&set p%%ay=0%%d
)
if "%pdi3s%" == "" goto FP
goto :eof
:win
(echo.FB800:B40 FFF 20 3E&echo q)|DEBUG>NUL
set sybcs=12030F1╔════════╗;║$FC恭喜你,获得胜利.$F1║;║$F8按任意键从新开局$F1║;╚════════╝
call :SYBCS
pause>nul
goto :2
:timec
IF "%t1%" == "" EXIT /B 0
FOR /F "DELIMS=:. TOKENS=1,2,3,4" %%N IN ("%t1%") DO SET O=1%%O&SET P=1%%P&SET Q=1%%Q&SET /A N=100+%%N
IF "%t2%" == "" SET /A T=N*360000+O*6000+P*100+Q-36610100&&EXIT /B !T!
FOR /F "DELIMS=:. TOKENS=1,2,3,4" %%M IN ("%t2%") DO SET I=1%%N&SET J=1%%O&SET K=1%%P&SET /A H=100+%%M
IF "%t2%" GTR "A" (SET L=%t2%&SET /A T=N*360000+O*6000+P*100+Q-36610100,S=T/100,M=T/6000,H=T/360000) ELSE (SET L=%3&SET /A H=H-N,I=I-O,J=J-P,K=K-Q,T=H*360000+I*6000+J*100+K,S=T/100,M=T/6000,H=T/360000)
IF "%L%" == "" SET L=T
call :sybc 1176831耗时:   厘秒;:11773$3c!%L%!
goto :eof
:SYBCS
(ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%SYBCV:`=&ECHO.%)|DEBUG>NUL
goto :EOF
:SYBC
IF "%1" == "" SET SYBCCD=00&GOTO SYBCC
SET SYBCCD=64
set SYBCC=%*
:SYBCC
SET V=`A80`DB %SYBCCD% 00 "%SYBCC%" 0D``RCX`200`G`Q
(ECHO.%SYBCOM:`=&ECHO.DW %&ECHO.%V:`=&ECHO.%)|DEBUG>NUL
EXIT /B %ERRORLEVEL%
[ Last edited by sl543001 on 2010-4-26 at 22:50 ]
作者: sl543001     时间: 2010-4-25 18:15
正在计划继续更新SYBC
加强鼠标支持
作者: wo1234     时间: 2010-4-25 18:35
太强了 不过我试了一下,25L给的代码,在自己出完牌后,对方一直“出不起”牌。
作者: sl543001     时间: 2010-4-25 21:51
对方一直“出不起”牌是因为脚本还没有写AI,所以电脑永远不会出牌,请等待日后的版本
作者: sl543001     时间: 2010-4-26 22:51
修正了41楼的代码
作者: sl543001     时间: 2010-5-11 14:29
这个鼠标是由netbenton提供的,大家有问题找他去吧,西西.