斗牛有牛的概率

问题:斗牛有点的概率。还有各点数的概率。

游戏玩法:

1、  斗牛的玩法,52张牌,每人派5张牌。5张牌中,其中3张加起来点数为10的倍数的,为牛,而另外2张加起来,取个位数为点数。JQK都当10点。如 K,3,7,6,8 就是K,3,7为牛,6,84点。

2、  把纸牌按点数分为1,2,3,4,5,6,7,8,9,1010种类型。KQJ10为一种。

3、  胜负方式,有点算点数,点数相同算最大的牌。没点都牌大。10点为牛牛。

分情况计算:

1)  五张都为10的情况:C5/16=0.0016806722689076

2)  四张为10,一张为1~9的情况:C4/16*C1/36=0.0252100840336134

3)  三张为10,二张为1~9的情况:C3/16*C2/36=0.135746606334842

4)  二张为10,三张为1~9的情况:C2/16*C3/36=0.32967032967033

5)  一张为10,四张为1~9的情况:C1/16*C4/36=0.3626373626373626

6)  五张都为1~9的情况:C5/36=0.1450549450549451

 

分析:

其中1),2),3)至少有3张为10,所以肯定有牛。

4)当中的三张和为10,20或者二张和为10

5)当中四张1~9当中3张和为10,20或者2张和为10

6)当中:三张加起来等于10或者20的情况。

和为10的有:118,127,136,145,226,235,334 ,442

和为20的有:992,983,974,965,884,875,776,668

将这16种情况按是否有重号重新分类:

118,226,334,442,992,884,776,668 重号的有8种。每种个有24  情况1

 

127,136,145,235,983,974,965,875不重号的有8种。没种个有64情况2

19,28,37,46,55  2个和为10     情况3

4)三张为1~9, 3张中选2张和为10,或者3张和为10,20 

情况1,2的共有(24+64*8*(16*15/2)=84480

2张和为10,并且与2张不同点数的情况: 19,28,37,46  28*16*4*(16*15/2)=215040

有相同的情况:如119199 共有6*4*2*4*120=23040

55的情况: 55* 6*32*120=23040

555的情况:有4*120=480

84480+215040+23040+23040+480=346080

41~9牌,不能同时满足情况1和情况2,但存在情况1和情况3,或者情况2和情况3同时成立。

证明:不能同时满足情况1和情况2

5)四张为1~9 4张中选2张和为10,或者3张和为10,20

情况12与情况3组合

118,19      118,28      226,28      226,46      334,46      442,28      442,46      992,28      992,19      334,37

884,28      884,46      776,37      776,46      668,28      668,46      127,19      127,28      127,37

136,19      136,37      136,46      145,19      145,46      145,55      235,28      235,37      235,55

983,19      983,28      983,37      974,19      974,37      974,46      965,19      965,46      965,55

875,28      875,37      875,55

共有40种重复。(6*4*4*20+4*4*4*4*20)*16=(1920+5120)*16=7040*16=112640

19,28     19,37     19,46     28,37     28,46     37,46

共有 4*4*4*4*6*16=1536*16=24576

55,19    55,28     55,37    55, 46

共有6*16*4*16=6144

全为19,1119,1199 有(4*4+6*6*4*16=208*16=3328

一个重复:119*199* 有(6*4+4*6*36-4*2*4*16=5376*16=86016

全部不重复:19** (16*28*27/2)*4*16=24192*16=387072

全为5555,1*16

555*  4*32*16=128*16=2048

55**  6*32*31/2*16=2976*16=47616

 

全为118, 1118,1188 有(4*4+36*8*16=412*16=6656

118* 6*4*28*8*16=5376*16=86016

全为127,1127,1227,1277 6*4*4*3*8*16=2304*16=36864

127* 4*4*4*24*8*16=12288*16=196608

共有  196608+36864+86016+6656+47616+2048+16+387072+86016+3328-24576-112640-6144=708880

1)    五张为1~9,五张中选3张和为10,20

五张牌都为1~9若选定5张牌并且有牛,则最多有2种组合为10,20

118,884  11884  118,668 11668  118,127  11278  118,136  11368  118,145  11458 

118,983  11389  118,875  11578  226,442  22446      226,668  22668      226,127  12267          226,677    

226,136  12236      226,235  22356      226,965  22569      334,442  23344      334,884  33488

334,145  13345      334,235  23345      334,389  33489      334,974  33479      442,992  24499

442,884  24488      442,127  12447      442,145  12445      442,974  24479      992,127  12799

992,235  23599      992,983  23899      992,974  24799      992,965  25699      884,668  46688

884,145  14588      884,983  34889      884,974  47889      884,875  45788      776,668  66778

776,136  13677      776,974  46779      776,965  56779      668, 136  13668     668, 965  56689

668, 983  36689     668, 875  56678     127,136  12367      127,145  12457      127,235  12357

127,974  12479      127,875  12578      136,145  13456      136,235  12356      136,983  13689

136,965  13569      145, 235  12345     145,974  14579      145,965  14569      145,875  14578

235, 983  23589     235, 965  23569     235, 875  23578     983,974  34789      983,965  35689

974,965  45679      974,875  45789      965,875  56789

共有64 36*4*11+4*4*4*4*4*21+6*4*4*4*32=35376

情况1

全为重复 118,11118,11188,11888 有(4+24+24*8=416

1张:118* 1118*1188* 有(16+36*28*8=11648

0张:118** 24*28*27/2*8=72576

情况2

全为:127,11127,12227,12777,11227,11277,12277有(64*3+36*4*3*8=4992

1张:127*1127*1227*1277* 96*24*3*8=6912*8=55296

0张:127** 64*24*23/2*8=141312

共有141312+55296+4992+72576+11648+416-35376=250864

综合所述:C5/16+ C4/16*C1/36+ C3/16*C2/36+346080+708880+250864

          =4368+65520+352800+1305824

=1728512/2598960=

晚上贴上代码版计算。修正后还是有错误。含代码

int[] BullArr = new int[11];//以次计数牛1至牛10、没有牛,
        int all1=0;
        private void button1_Click(object sender, EventArgs e)
        {
            IsBull();
            double all = 52 * 51 * 50 * 49 * 48 / 120;
            textBox12.Text = Convert.ToString(all);
            textBox11.Text = Convert.ToString(BullArr[0]);
            textBox10.Text = Convert.ToString(BullArr[1]);
            textBox9.Text = Convert.ToString(BullArr[2]);
            textBox8.Text = Convert.ToString(BullArr[3]);
            textBox7.Text = Convert.ToString(BullArr[4]);
            textBox6.Text = Convert.ToString(BullArr[5]);
            textBox5.Text = Convert.ToString(BullArr[6]);
            textBox4.Text = Convert.ToString(BullArr[7]);
            textBox3.Text = Convert.ToString(BullArr[8]);
            textBox2.Text = Convert.ToString(BullArr[9]);
            int niu = 0;
            for (int i = 0; i < 10; i++)
                niu += BullArr[i];
            textBox1.Text = Convert.ToString(niu);
            button1.Text = Convert.ToString( all1);
        }
        void IsBull()
        {
            bool[] cardArr = new bool[52];
            int[] posArr = new int[5];
            for (int i = 0; i < 52; i++)//初始化数组
            {
                if (i < 5)
                {
                    cardArr[i] = true;
                }
                else
                    cardArr[i] = false;
            }
            BullArr[10]++;//12345,最小的五张牌肯定无牛
            all1++;
            while (!(cardArr[51] && cardArr[50] && cardArr[49] && cardArr[48] && cardArr[47]))//当然最大的五张牌时退出循环
            {
                all1++;
                int j = 0;
                int i = 0;
                int count1 = 0;
                for (j = 0; j < 51; j++)
                {
                    if (cardArr[j] && cardArr[j + 1])//检查第一个相邻为真和假的J左边的真的个数
                    {
                        count1++;
                        cardArr[j] = false;
                    }
                    if (cardArr[j] && !cardArr[j + 1])//相邻为真和假的时候,互换
                    {
                        cardArr[j] = false;
                        cardArr[j + 1] = true;
                        break;//跳出for,后面的不需检索
                    }
                }
                for (int m = 0; m < count1; m++)//将第一个真和假的前面将所有真都移动到最左边
                {
                    cardArr[m] = true;
                }
                for (j = 0; j < 52; j++)
                {
                    if (cardArr[j])
                    {
                        if (j < 36)
                        {
                            posArr[i] = Convert.ToInt16(j / 4 + 1);//将5张牌对应的下标转换为点数,0~35 为1~9点
                            i++;
                        }
                        else
                        {
                            posArr[i] = 10;///将5张牌对应的下标转换为点数,36~51 为10点
                            i++;
                        }
                    }
                    if (i == 5)
                        break;//不需要检索全部位置,只需检索到5个真即可
                }
                bool[] p = new bool[5];
                p[0] = true;
                p[1] = true;
                p[2] = true;
                p[3] = false;
                p[4] = false;//初始化5张牌选前面3张。
                if ((posArr[0] + posArr[1] + posArr[2]) % 10 == 0)//选前3张牌的情况。有牛则跳出while
                {
 switch ((posArr[3] + posArr[4]) % 10)//个点数牛的累计器++
                    {
                        case 0:
                            BullArr[0]++;
                            break;
                        case 1:
                            BullArr[1]++;
                            break;
                        case 2:
                            BullArr[2]++;
                            break;
                        case 3:
                            BullArr[3]++;
                            break;
                        case 4:
                            BullArr[4]++;
                            break;
                        case 5:
                            BullArr[5]++;
                            break;
                        case 6:
                            BullArr[6]++;
                            break;
                        case 7:
                            BullArr[7]++;
                            break;
                        case 8:
                            BullArr[8]++;
                            break;
                        case 9:
                            BullArr[9]++;
                            break;
                    }
                    continue;
                }
                while (!(p[2] && p[3] && p[4]))//开始转换组合
                {
                    int x;
                    int count = 0;
                    for (x = 0; x < 4; x++)//检索相邻为真和假的J
                    {
                        if (p[x] && p[x + 1])//J左边的真的个数
                        {
                            count++;
                            p[x] = false;
                        }
                        if (p[x] && !p[x + 1])//互换J和J+1的值
                        {
                            p[x] = false;
                            p[x + 1] = true;
                            break;
                        }
                    }
                    for (int s = 0; s < count; s++)//让J左边所有真移到最左边
                    {
                        p[s] = true;
                    }
                    int piont = 0;
                    int piont1 = 0;
                    for (x = 0; x < 5; x++)
                    {
                        if (p[x])
                        {
                            piont += posArr[x];
                        }
                        else
                        {
                            piont1 += posArr[x];
                        }
                    }
                    if (piont % 10 == 0)
                    {
                        switch (piont1 % 10)
                        {
                            case 0:
                                BullArr[0]++;
                                break;
                            case 1:
                                BullArr[1]++;
                                break;
                            case 2:
                                BullArr[2]++;
                                break;
                            case 3:
                                BullArr[3]++;
                                break;
                            case 4:
                                BullArr[4]++;
                                break;
                            case 5:
                                BullArr[5]++;
                                break;
                            case 6:
                                BullArr[6]++;
                                break;
                            case 7:
                                BullArr[7]++;
                                break;
                            case 8:
                                BullArr[8]++;
                                break;
                            case 9:
                                BullArr[9]++;
                                break;
                        }
                        break;
                    }
                    BullArr[10]++;
                }
            }
        } 
 

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不断提升自己。 Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不断提升自己。 Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不断提升自己。Java语言游戏项目实战资源包 内容概览: 这次分享为你带来了丰富的Java语言游戏项目实战资源,让你在实践中深入掌握Java语言,并开启游戏开发之旅。资源包中包括: 游戏项目代码:精心挑选了多个经典的小游戏项目,如猜数字、坦克大战等,每个项目都有完整的代码实现。 项目文档:详细的项目文档,介绍了项目的背景、功能、架构以及实现细节,帮助你更好地理解项目。 操作手册与使用说明:针对每个游戏项目,都准备了详细的操作手册和使用说明,手把手教你如何运行和测试项目。 学习笔记:整理了Java语言在游戏开发中的核心知识点和常用技术,方便你随时查阅和学习。 适用人群: 这份资源包适用于所有对Java游戏开发感兴趣的朋友,无论你是计算机专业的学生,还是希望业余时间尝试游戏开发的爱好者,都可以从中受益。 使用建议: 由浅入深实践:建议先从简单的游戏项目开始,逐步深入,既能增强自信,也能逐步提升技术水平。 结合文档与代码:在实践过程中,结合项目文档和代码,理解每一行代码背后的意义和原理。 持续学习与探索:Java语言和游戏开发技术都在不断更新,建议你在实践中持续学习新的技术和工具,不
介绍美国桥牌协会标定标准体制 张英译 朱文极校   一九八七年三月在美国圣路易举行的春季北美桥牌冠军赛上,同时试办了“对式标准卡公开赛”(地区级、授予金分和红分)。参加者都用美国桥牌协会统一制订的约定卡,叫牌都只能有一种解释,牌手不得适用心理战术。参加此项比赛的约五百人。反应极好。这体制包括了一些最通行的约定,但与过去的A级约定内容不尽相同。该协会已根据一些建议修订后,确定为美国桥牌协会标准体制。协会估计一年以后,参加此种比赛的人数将超过同时进行的其他项目的参加人数。 兹据美国桥牌协会所发材料译出介绍:其一是协会一九八七年六月修订的标准约定卡。即在协会原发行的约定卡上填入标准体制,但将与此体制无关的项目删去。本文包括了原卡及其译卡。其二是“美国桥牌协会标准体制小册子”,为该体制的简要说明。它基本上只纳入其与经典的标准美国体制有出入的,也就是目前叫法不统一的内容。这意味着未提到的部分仍按经典体制,亦即戈伦体制处理。但这“小册子”并没有包括约定卡的全部,因而还要以约定卡的内容为准。 由于本体制的确立,可以结束对当前颇为模糊的美国标准体制即我国所谓“自然叫牌法”各有不同理解,采用约定不一致的局面。互不熟悉的同伴无须先作一番探讨,一般的和超级的牌手也能同桌打牌。如果我们也能确立起类似比赛,相信对我国桥牌活动的普及和提高会产生一个巨大的动力。 一、美国桥牌协会标准约定卡 二、美国桥牌协会ACBL标准体制 概说 我们的目标在于确立一种简单的标准体系,它可以使任何有经验的牌手之间不用商讨便可采用,而且,用起来十分简明,各种叫牌只赋予一确定的含意,不得有其它解释(例如:对1NT开叫,应叫2H是转移,不得用以表示红心长套)。牌手不允许有意造成使对手产生错觉的心理战术意向。 选择余地 在用美国桥牌协会标定标准体制的竞赛中,可供自由选择的只有两点,它们都仅限于防守和大牌方面。 基本方向 一律采用五张高花开叫。 5—5或6—6等长套开叫:先叫较高的花色。 低花色4—4时,开叫1D。 低花色3—3时,开叫1C。 开叫1NT表示均型牌,并可能有一高或低花五张套。 1NT=15—17大牌点。 2NT=20—21大牌点。 3NT=25—27大牌点。 2C开叫是强虚叫。 2D、2H和2S开叫都是弱二开叫。 对15—17点1NT开叫的应叫和随后的叫牌 2C是非逼叫性的Stayman约定,意味着可停在某花色二阶处。开叫人的高花为4—4时,叫2H。应叫人如再叫任何低花三阶,表明有至少五张套并有意打满贯。 持有高花五张套时,采用Jacoby转移叫:2D要求转移到2H,2H要求转移到2S。开叫人得按此转移,并且,有17点和所转叫的高花为四张时,可跳到三阶。 1NT—2D(译注:每行是一轮叫牌,只表示出你方所叫牌,如带有括号的,则为对手叫的。一下同此) 2H=正常地接受转移要求 3H=17点并四张红心 转移要求已被接受后,应叫者如再叫一新花色,则为自然叫并逼叫到局。例如下面的过程: 1NT—2H 2S—不叫=满足于打2S。 —2NT,3S=建设性的。对2NT,开叫者如系低限牌,可以不叫或回到3S;高限则叫3NT或4S。 —2C、3D、3H=自然叫并逼叫到局。 —3NT=要求开叫者在3NT和4S之间选择。 —4S=至少六张套,就是要打此定约。 应叫2S是要求1NT开叫者再叫3C,应叫人如只持有草花套且无实力牌时可以不叫,如为只有方块套的无实力牌时则再叫3D,且要求开叫者停叫。 1NT—2S 3C—不叫=只有草花花色的无实力牌。 —3D=只有方块花色的无实力牌。 对1NT开叫的其他应叫: 1NT—3C、3D=所叫至少六张,建议叫3NT。 —3H、3S=所叫至少六张,有意打满贯(否则,应叫者该用转移叫)。 —4C=Gerber约定,查询A。对同伴所作任何1NT或2NT叫,包括再叫1NT或2NT,4C都是Gerber约定。对此约定和对Blackwood 4NT一样,按所持A的数目答叫。(5C用作查询K。) 查询A 查询K 1NT—4C 1NT—4C 4D=0或4个A 4X—5C 4H=1个A 5D=0或4个K 4S=2个A 5H=1个K 4NT=3个A 5S=2个K 5NT=3个K 如用Gerber的牌予再叫出5C以外的任何叫品(包括4NT),都表示要打所叫定约)。 直接由1NT加叫到4NT是自然叫,建议打6NT。由于4C可用作Gerber查询约定,于是4NT可用来试探满贯。 对2NT或3NT开叫的应叫 高花色用Stayman约定和Jacoby转移叫转移叫。 2NT—3C=Stayman约定。 —3D,3H=分别为向红心和黑桃的Jacoby转移叫。 —4C=Gerber约定。 3NT—4C=Stayman约定。 —4D,4H=分别为向红心和黑桃的Jacoby转移叫。 对1H或1S开叫的应叫和随后的叫牌 开叫1H和1S保证五张或更长的花色套,其应叫如下: 1H—1S=至少四张黑桃,至少6点。有否定红心配合的意向。 —1NT=6—10点,没有四张黑桃或三张红心,不是逼叫。 —2C,2D=至少11点,所叫花色至少四张。 —2H =最少三张的红桃支持;6—10点明手点。 —2NT=13—15点,均型牌,逼叫到局。 —2S,3C,3D=强跳叫新花色,建议打满贯。 —3H=限制性的加叫(11—12明手点和至少三张红心)。 —3NT=逼叫性加叫,均型及非均型牌均适用。开叫人如对满贯有意则叫新花色。4NT为Blackwood约定 —4H=一般至少五张红心,有一单张或缺门花色,不到10大牌点。 开叫者的再叫都是自然的,并遵循标准体制。 低限牌(13—16点)的再叫: 在可能的最低阶叫无将; 在可能的最低阶加叫应叫花色(有三张好牌支持即可); 再叫一新花色(但不是逆叫); 在可能的最低阶再叫开叫花色。 中等牌(17—18点)的再叫: 跳加叫应叫花色或跳再叫开叫花色; 逆叫新花色; 非逆叫的新花色(其范围宽至13—18点); 高限牌(19—21或22点)时,开叫人必须作很强的再叫: 跳叫无将; 在应叫花色或开叫花色上跳叫两阶; 跳叫新花色。 应叫者后续的叫牌 如应叫者在一阶叫了花色,其下一目标则为其是否打算止叫在不成局处,或建议叫局,止叫在成局处,或逼叫到局并进一步了解开叫者的牌。决定后,即选择可能的最佳叫品。 止叫在不成局处可以采用:不叫,1NT,或曾被叫过的花色二阶。 1H—1S 2C—不叫,2H,2S=6—10点;在不成局处止叫。 建议叫局可叫:2NT,曾被叫过的花色三阶。 1H—1S 2D—2NT,3D,3H,3S=11—12点,建议打局。 第二轮逼叫:应叫新花色(除在开叫者再叫1NT后)是逼叫一轮。但如它是叫牌过程中的第四花色,则可能是虚叫一第四花色逼叫。 1H—1S 2C—2D=逼叫一轮,可以是虚叫。 ...但... 1H—1S 1NT—2C,2D=非逼叫。应叫者如要逼叫到局,必须跳叫到3C,3D。 开叫者再叫1NT后,应叫者在第二轮的逼叫: 逆叫或新花色跳叫都是到局。 作为停止在局处的叫牌有:3NT,4H,4S,5C,5D。 如应叫者在二阶叫一新花,上述原则不变;例外的只有加叫开叫者的高花到三阶为逼叫到局(应叫者有11—12点和三张将牌,则应在第一轮直接作限制性加叫): 1S—2C 2H—2NT,3C,3H=建议打局(11—12点)。 —2S=表示优先的选择,非逼叫。应叫者有11—12点及双张黑桃。 —3D=逼叫到局,可能是虚叫。 —3S=逼叫到局。 注:应叫者在二阶应叫新花时,表示了将再叫的承诺,除非开叫者的再叫已经到局。 1S—2C 2D=逼叫一轮。应叫者可叫2S,2NT,3C或3D以维持叫牌进程,因为开叫者有可能持有18点(只略逊于新花色跳再叫),应叫者不得不叫。 对1C或1D开叫的应叫 既然在必须以三张低花开叫时,首先选择1C,所以开叫1D表明其持有一至少四张套。只有4—4—3—2牌型,黑桃、红心各四张,方块三张,草花两张时例外,此种情况下必须开叫1D。 应叫及随后的叫牌一般遵循前节原则。然而应叫者加叫时应有更多的将牌(对1D加叫要有四张,对1C加叫要有五张;但在争叫时,被迫叫牌则可减少一张)。不存在低花的迫叫性加叫。 2C开叫,其应叫及随后的叫牌 2C开叫表示至少有22+点,或等值的牌力。应叫: 2C—2D=虚叫,可能有一手好牌,但不宜于作示强应叫,而暂时等待一下。 —2H,2S,3C,3D=自然叫,逼叫到局。至少有五张和8点牌。 —2NT=均型8点牌。 如开叫人开叫2NT(表示有22—24点),应叫方法与2NT时相同。 2C—2D 2NT—3C=Stayman约定叫。 —3D,3H=Jacoby转移叫高花。 —4C=Gerber约定,问A。 —4NT=建议打满贯。 对2D应叫,如开叫人作一花色再叫,是逼叫到开叫者的高花三阶或低花四阶。 2C—2D 2H—2S 3H=非逼叫。 2D,2H或2S弱二开叫后的叫牌 弱二开叫表示一尚可的六张套(极少情况下可以是很好的五张套)、并有5—11大牌点,也可能是相当差的七张套(不够开叫三阶)。应叫如下: 应叫2NT是逼叫,表示有意进局。开叫人持有低限牌(5—8点)时再叫原花色。持高限牌时叫一新花色来“亮相”(所叫花色有A或K);无相可亮时加叫3NT。由应叫人去作决定。 加叫开叫花色表示要打该花色并可能是关煞。 应叫3NT也是要打它。 约定卡上“RONF”的意思是“只有加叫是非逼叫性的”。应叫新花至少要有五张套,逼叫一轮。如应叫的是高花,开叫人有将牌三张或带大牌的两张,就应加叫。 与应叫花色配合不上时,开叫者再叫如下: 低限的弱二开叫(5—8点)时,在可能的低阶上再叫原花色。 高限时,叫一新花色或NT。 满贯叫牌 Blackwood 4NT用以问A。答叫以逐级加叫表示所持A数。然后5NT用以问K;确保同伴间有全部四个A时,才可叫5NT。 XX—XX XX—XX XX=4NT XX—4NT 5C=0或4个A 5X—5NT 5D=1个A 6C=0或4个K 5H=2个A 6D=1个K 5S=3个A 6H=2个K 6S=3个K 防守叫牌 花色盖叫表示8—16点(持有更强牌时,则先加倍,再叫长套)。对盖叫的唯一逼叫性应叫是扣叫开叫花色,询问盖叫者牌的强弱: (1D)—1S—(不叫)—2D (不叫)—2S=低限盖叫。 —其他=有多余的牌力(至少11或12点)。 1NT盖叫表示15—16点并为均型牌(一般在对手花色上有一个止张)。约定卡上“Systen on”一词意味着对1NT盖叫的应叫(对1NT盖叫对手不叫后)和对1NT的应叫相同。 2NT盖叫表示两个未叫过的较低花色至少是5—5。 跳盖叫是关煞性的,与在该级别开叫有同等牌力。 (1D)—2S=持有可开叫弱2S的牌。 —3C=持有该开叫3C的牌。 如盖叫是“Michaels扣叫”,表明有5—5(或更偏的)两色套。如开叫的是低花,扣叫表示有两高花;如开叫的是高花,扣叫表示有另一高花和一未指明的低花。 (1D)—2D=两高花至少5—5,至少8点。 (1S)—2S=红心和某低花色至少是5—5,至少10点。 对高花色的扣盖叫,应叫者可叫2NT来问同伴所持是哪一低花。 (1H)—2H—(不叫)—2NT:问是哪个低花。 (不叫)—3C=草花 —3D=方块 平衡席位的重开叫和直接席位叫牌表达的意义大体相同,然而在低限方面可略放放宽些。对手开叫后,1NT重开叫表示有10—15点。这范围较宽,但一般你方成不了局。 对不到局(4D或更低)的开叫加倍是技术性的;对到局(4H或更高)的开叫加倍是惩罚性的。同伴技术性加倍后,作不到局的跳应叫是建设性的。扣应叫开叫花色是逼叫。 竟叫 这方面有数不完的可能情况。因而来个简单的准则以避免误解是有益的: 各种叫牌都和没有插叫时的意义一样。然而有时有必要选择一如五插叫时是次佳的叫品。 1D—(不叫)—1S—(2C) 2S持有J43 A875 AQJ4 J3(如右上家未叫牌),则该叫1NT)。 扣叫右上家的花色表示有成局的牌力,但暂时尚无明确的方向。这常用以表示逼叫到局的加叫: 1S—(2C)—3C=逼叫到局;通常是用扣叫到局的办法。 否定性加倍一直用到对2S为止,它表明未叫过的高花都(至少)有四张。叫一高花二或更高阶表示至少11点和至少无张套。 1C—(1D)—加倍=高花至少4—4。 1D—(1H)—加倍=黑桃四张(五张时叫1S)。 1D—(1S)—加倍=红心四张、6+点,或红心五张、5—10点。 如右上家作技术性加倍: 1D—(加倍)—1H,1S=逼叫,牌点不限。 —2C=非逼叫(6—10点,一般为六张套)。 —2NT=对同伴花色的有限加叫(11—12明手点)。 —再加倍=至少10点,但如牌也适于叫1H,1S或2NT,则以作为表达得更清楚的叫品为宜。 被加倍后,应叫人跳叫新花色是要打他那一花色定约: 1D—(加倍)—2H,2S,3C=至少六张套,类似弱二或关煞三阶叫。 再加倍的意义可能是下列三者之一: 如为以下情况,就是要打这再加倍的定约。 当你方处于四阶或更高阶时 4S—(加倍)—再加倍=惩罚性的。 对手对你方虚叫叫加倍: 1NT—(不叫)—2D—(加倍) 再加倍=惩罚性的,有好方块花色套。 对手的加倍为技术性时,再加倍表示有一手好牌。 1S—(加倍)—再加倍=10+点。 如你方在三或低阶花色上被惩罚性加倍,再加倍是求援: 1D—(不叫)—不叫—(加倍) 不叫—(不叫)—再加倍=求援,应叫者至少能支持未叫花色中的两个。 受到任何争叫或加倍,则原来作为无争叫的约定叫无效 1NT—(2C)—2H=自然叫、非逼叫。不是Jacoby转移叫。 1NT—(加倍)—2C=自然叫、非逼叫。不是Stayman约定。 —再加倍=至少8点。 如对手在你方约定叫的基础上加倍,你随后的叫牌与未受干扰时的意义一样。例如: 作一叫牌说:“我是自愿叫牌的,真的能和你配合。” 1NT—(不叫)—2D—(加倍) 2H=有真的红桃配合(只有红桃两张时不叫)。 不叫是说:“此刻我无可叫的。” 加倍或再加倍是要打这些顶叶: 1NT—(不叫)—2D—(加倍) 再加倍=强方块花色,要打它。 如对手使用某一约定(如Michaels或异常NT)、你可加倍以表明至少10点,你也可扣叫对手叫过的花色以逼叫到局。 1S—(2S)—3H=逼叫到局。 —加倍=至少10点,可能是均型牌。 防守的首攻和信号 这是可提供选择的一个领域: 但以下各项已被确定: 首攻第四张大的牌。 首攻相邻大牌中的最大者(对A—K—X可自由选择)。 跟牌和垫牌时的防守信号:大牌是鼓励性的,小牌是劝阻性的。 同伴间必须选择从A—K—X中,以及三张小牌中首攻哪张,并在约定卡中圈出。 附注 如你在公开赛中使用美国桥牌协会约定卡,可加上对付对手约定叫的防御叫(例如):用异常约定对付异常无将约定,对大梅花用Mathe约定)。把这些约定——防御叫填在约定卡左侧下方的“对付对方约定的防御叫”栏被。
好的,斗牛游戏是一个非常经典的纸牌游戏,你可以使用 Python 语言来实现它。这里提供一个基本的框架,你可以在此基础上进行开发。 首先,你需要定义一组扑克牌。一副扑克牌共有 52 张牌,其中包括 4 种花色(方块、梅花、红心、黑桃)和 13 种点数(2、3、4、5、6、7、8、9、10、J、Q、K、A)。你可以使用列表来存储这些牌,例如: ``` suits = ['Diamonds', 'Clubs', 'Hearts', 'Spades'] ranks = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King', 'Ace'] deck = [(s, r) for s in suits for r in ranks] ``` 接着,你需要写一个函数来洗牌。洗牌可以使用 `random` 模块来实现,例如: ``` import random def shuffle_deck(deck): random.shuffle(deck) ``` 然后,你需要写一个函数来计算手牌的点数。斗牛游戏规定,点数大于 10 的牌都算作 10 点,A 可以算作 1 点或 11 点,具体取决于哪种取值更加优势。你可以使用以下代码来计算点数: ``` def calculate_points(hand): points = 0 num_aces = 0 for card in hand: if card[1].isdigit(): points += int(card[1]) elif card[1] in ['J', 'Q', 'K']: points += 10 elif card[1] == 'A': num_aces += 1 points += 11 while num_aces > 0 and points > 21: points -= 10 num_aces -= 1 return points ``` 最后,你需要编写游戏主程序。主程序中,你可以编写一个函数来模拟一次游戏,包括发牌、要牌、结算等操作。主程序还需要提示玩家输入命令,例如是否要牌、是否继续游戏等。这里给出一个简要示例: ``` def game(): deck = [(s, r) for s in suits for r in ranks] shuffle_deck(deck) player_hand = [deck.pop(), deck.pop()] dealer_hand = [deck.pop(), deck.pop()] player_points = calculate_points(player_hand) dealer_points = calculate_points(dealer_hand) while True: print(f'Your current hand is {player_hand}, with total points of {player_points}.') command = input('Do you want another card? (y/n)') if command == 'y': player_hand.append(deck.pop()) player_points = calculate_points(player_hand) if player_points > 21: print('You busted! Game over.') return -1 elif command == 'n': break while dealer_points < 16: dealer_hand.append(deck.pop()) dealer_points = calculate_points(dealer_hand) if dealer_points > 21: print('Dealer busted, you win!') return 1 elif dealer_points > player_points: print('Dealer wins, you lose!') return -1 elif player_points > dealer_points: print('You win!') return 1 else: print('Tie!') return 0 ``` 这就是一个简单的斗牛游戏的实现,你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值