C#实现斗地主洗牌

C#棋牌游戏(如斗地主) C#控制台卡牌游戏中的卡牌、牌库和玩家模拟 阅读详情
来自Asp.net精英论坛: bbs.1aspx.com 

这是我自己定义的一个关于牌的数据结构.
     public   class  Poker
    
{
        
public Int32 PokerIndex;//这张牌在整副牌中的索引.
        public Int32 PokerValue;//这张牌的字面大小.
        public Poker() { }
        
public Poker(Int32 PokerIndex, Int32 PokerValue)
        
{
            
this.PokerIndex = PokerIndex;
            
this.PokerValue = PokerValue;
        }

    }
然后将牌分成四部分.即三个玩家在未成为地主的时候,手上的17张牌.另外是三张地主牌.
         protected  Poker[] pk  =   new  Poker[ 54 ]; // 所有的牌
         protected  Poker[] pk1  =   new  Poker[ 17 ]; // 发给第一个人的牌
         protected  Poker[] pk2  =   new  Poker[ 17 ]; // 发给第二个人的牌
         protected  Poker[] pk3  =   new  Poker[ 17 ]; // 发给第三个人的牌
         protected  Poker[] pkTemp  =   new  Poker[ 3 ]; // 最后三张
然后产生整副牌
         // 产生牌
         public   void  InitPk()
        
{
            
for (Int32 index = 0; index < pk.Length; index++)
            
{
                pk[index] 
= new Poker();
                pk[index].PokerIndex 
= index;
                pk[index].PokerValue 
= index;
            }

        }

进行洗牌.主要是对牌进行一种随机的交换
         // 洗牌
         public   void  Random_Sequence()
        
{
            
int m, n;
            Random ram 
= new Random();
            
for (int i = 0; i < 1000; i++)
            
{
                m 
= ram.Next(0, 54);
                n 
= ram.Next(0, 54);
                
if (m != n)
                
{
                    
this.Permute(m, n);
                }

            }

        }

        
// 置换牌
         public   void  Permute(Int32 a, Int32 b)
        
{
            Poker temp;
            temp 
= pk[a];
            pk[a] 
= pk[b];
            pk[b] 
= temp;
        }
然后将牌分成四份.
         // 发牌
         public   void  Deal_cards()
        
{
            
for (int i = 0; i < 17; i++)
            
{
                pk1[i] 
= pk[i * 3];
                pk2[i] 
= pk[i * 3 + 1];
                pk3[i] 
= pk[i * 3 + 2];
            }

            pkTemp[
0] = pk[51];
            pkTemp[
1] = pk[52];
            pkTemp[
2] = pk[53];
        }
对生成的牌进行排序.
        // 发牌
         public   void  Deal_cards()
        
{
            
for (int i = 0; i < 17; i++)
            
{
                pk1[i] 
= pk[i * 3];
                pk2[i] 
= pk[i * 3 + 1];
                pk3[i] 
= pk[i * 3 + 2];
            }

            pkTemp[
0] = pk[51];
            pkTemp[
1] = pk[52];
            pkTemp[
2] = pk[53];
        }

        
// 对牌排序
         public  Poker[] Order_cards(Poker[] arr)
        
{
            Int32 c;
            
for (Int32 index = 0; index < arr.Length; index++)
            
{
                Math.DivRem(arr[index].PokerIndex, 
13, out c);
                
if (arr[index].PokerIndex == 53)
                
{
                    arr[index].PokerValue 
= 16;
                }

                
else if (arr[index].PokerIndex == 52)
                
{
                    arr[index].PokerValue 
= 15;
                }

                
else
                
{
                    
if (c == 0)
                    
{
                        arr[index].PokerValue 
= 13;
                    }

                    
else if (c == 1)
                    
{
                        arr[index].PokerValue 
= 14;
                    }

                    
else
                    
{
                        arr[index].PokerValue 
= c;
                    }

                }

            }

            Sort(arr, arr.Length);
            
return arr;
        }

        
// 排序
         public   void  Sort(Poker[] arr, Int32 n)
        
{
            Int32 i, j, k;
            Poker temp;
            
for (i = 0; i < n; ++i)
            
{
                j 
= i;
                
for (k = i + 1; k < n; ++k)
                
{
                    
if (arr[j].PokerValue < arr[k].PokerValue)//如果前个数比后个数大,则交换位置。
                    {
                        temp 
= arr[k];
                        arr[k] 
= arr[j];
                        arr[j] 
= temp;
                    }

                }

            }

        }

        
public   void  AfterSort()
        
{
            pk1 
= Order_cards(pk1);
            pk2 
= Order_cards(pk2);
            pk3 
= Order_cards(pk3);
        }

在写的过程中,参考了这个贴子. http://www.cnblogs.com/blackzh/archive/2006/07/13/450036.html
大一用C#编写的斗地主程序 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Sy 阅读详情

相关推荐

C#斗地主 创建一副牌,洗牌,发牌

创建一副牌 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 斗地主终端模式 { class CreatePai { public string[] CreatePaiFunc() { //创建牌 char[]

m0_46426259的博客 390

[cocos2dx]斗地主制作之洗牌算法

做斗地主项目,洗牌算法是一个很重的一步,怎样“洗”的均匀,“洗”的随机,这是非常考究的,算法的优劣就直接会影响效果的好坏。这里我给出一个算法,将0-53这54个数字直接排序,经测试还挺随机的。这里要感谢@灰太龙的指导!这个算法是服务器端用于返回给客户端牌的算法,主要的思想就是不断的换牌,两牌交换位置,如果循环次数增大的话,随机性也会更强,洗牌的效果更好! Code: ...

weixin_34074740的博客 353

关于分阶段的斗地主程序处理

牌型从大到小(牌型相同情况下按照牌面点数比较)为:火箭(大王+小王),炸弹(四张相同点数的牌),单牌,对子,三张牌,三带一,三带二,顺子(至少五张连续的牌),连对(至少三个连续的对子),飞机(两个或多个连续的三张牌),飞机带翅膀(飞机和同数量的单牌或对子)。牌型:斗地主使用一副54张扑克牌(包括两个鬼牌),按照大小顺序为大王、小王、2、A、K、Q、J、10、9、8、7、6、5、4、3。发牌:首先将一副牌洗混,然后由一名玩家担任发牌员,从这副洗好的牌中依次发牌,每人发17张牌,剩余3张作为底牌。

百锦再的博客 1万+

斗地主算法的终极思路及伪代码实现

分阶段在C#中,你可以使用枚举(Enum)来表示斗地主游戏的四个阶段。枚举用于定义一个具有一组命名常量的类型。在这种情况下,我们可以定义一个名为GamePhase的枚举来表示游戏的四个阶段。

百锦再的博客 1万+

C# 斗地主算法核心代码

网上发现很多C#学的斗地主算法,看了之后自我感觉很Low,影响效率,就自己写了一套,里面只有核心代码。

c#斗地主c#斗地主c#斗地主

c#斗地主c#斗地主c#斗地主c#斗地主

(地主源代码)求解! 做的不够好,求大神指点

(地主源代码)求解! 做的不够好,求大神指点

C#斗地主实例

C#斗地主实例

python斗地主游戏源码_Java写的斗地主游戏源码

源码下载在最后我们的前年的课设要求做一个斗地主程序,当时正在愁如何做界面,当时刚好在学习C#,于是就用C#完成了这个程序。一方面,当时我C#功底还很差(其实现在也不怎么样),很多地方用了“笨办法”,实现的比较幼稚,程序效率很低,另一方面感觉很对不起老师,因为做这个程序的本意是研究斗地主程序的AI出牌等等算法相关的东西,而我却几乎忽略了这些内容。(我会好好学习算法的……^-^)最可怕的是,由于当时时...

weixin_39599830的博客 712

C#斗地主算法(绝对精华)

本算法用C#编写,根据斗地主出牌规则.对玩家出的牌进行检验.判断是否符合出牌规则。

c#版 winform 单机版斗地主 源码

c#版 winform 单机版斗地主 源码.欢迎下载 人机对战。

一个纸牌发牌的完整类

参照http://www.cnblogs.com/hawking106123/archive/2007/06/14/783202.html,对其中一些繁琐的内容进行删节,整理后发布这个完整的代码: using System;using System.Collections.Generic;using System.Text; namespace CPoker{ /// <summa...

weixin_34150224的博客 148

CSharp斗地主随机发牌程序

C#语言实现的斗地主游戏的随机发牌程序,有运行程序,可直接应用到设计当中

斗地主AI算法之发牌,洗牌

斗地主游戏的基本算法实现 by -wojiushi3344 QQ:513670524 转载请说明出处 源代码下载 PS:首先祝朋友们5,1节快乐!!闲来无事,今天来写一下斗地主游戏的基本实现,写得不好,大家别喷哈!!具体实现还得参见源代码。朋友们如果你有更好的建议可以到我博客留言讨论。谢谢!

棋牌游戏开发 4万+

斗地主 C#.NET VS2013 源码

斗地主单机游戏源码,C#所有源码都分享了,可以机器人配合玩。VS2013开发环境.NET2.0框架编写的。

保姆级教程:在Rockchip RK3588 SDK中,如何为你的新硬件板子创建第一个DTS文件

本文提供在Rockchip RK3588 SDK中为自定义硬件创建首个DTS文件的详细教程。通过分析DTS在RK3588开发中的角色、快速定位参考设计、实操步骤及调试验证方法,帮助开发者高效完成硬件板级配置,特别适合嵌入式Linux系统开发者参考。

weixin_28678831的博客 283
上一篇: C#斗地主出牌部分算法(绝对精华)
下一篇: 扑克牌的随机发牌程序
fmpfantasy
博客等级 码龄20年 27粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值