因为工作原因,好久没来了,最近在弄××方面的游戏,分享下×××算法
晕死了,标题也不能为laohuji???代码太长,不好贴,完整版的看下面链接吧
http://blog.csdn.net/yubangqi/archive/2010/05/23/5618720.aspx
//初始化玩牌游戏
public void PlayCardsInit()
{
if (iMaskedCardsType[0] == 0)//服务器从新启动后的初始化
{
iMaskedCardsType[0] = -1;
iMaskedCardsType[Convert.ToInt16(Single)] = 1;
iMaskedCardsType[Convert.ToInt16(Pair)] = 1;
iMaskedCardsType[Convert.ToInt16(TwoPair)] = 0;
iMaskedCardsType[Convert.ToInt16(Straight)] = 0;
iMaskedCardsType[Convert.ToInt16(Flush)] = 0;
iMaskedCardsType[Convert.ToInt16(ThreeOfAKind)] = 0;
iMaskedCardsType[Convert.ToInt16(FullHouse)] = 0;
iMaskedCardsType[Convert.ToInt16(FourOfAKind)] = 0;
iMaskedCardsType[Convert.ToInt16(StraightFlush)] = 0;
}
}
//检查出触发时间
public void CheckTrigger()
{
String sDateAndTimeBuf = System.DateTime.Now.Date.ToString("yyyy-MM-dd");//系统当前日期
String[] sSplitBufDate = sDateAndTimeBuf.Split(' ');//去空--------------------------------------------系统时间里有空格么? String[] sSplitBufTime = System.DateTime.Now.TimeOfDay.ToString().Split(':');//取出今天的时间并分割,精确到小数点后面六位 //此代码一天执行一次
if (sSplitBufDate[0] != sDateBuf)//缓存日期不是今天日期,即今天还没有执行过此代码
{
sDateBuf = sSplitBufDate[0];//缓存日期=今天日期,即标记今天此代码已经被执行过
if (sSplitBufTime[0] == iOnTimeTrigger8.ToString())//每晚8点触发三张加对子(概率,下同)
{
iMaskedCardsType[Convert.ToInt16(FullHouse)] = 1;//触发加对子
}
} //此代码一小时执行一次
if (sSplitBufTime[0] != sHourBuf)//另一个小时开始
{
sHourBuf = sSplitBufTime[0];//缓存小时数=当前小时数
if (--ThreeOfAKindCount <= 0)//一个小时倒计时结束
{
ThreeOfAKindCount = iHoursPerTrigger;//ThreeOfAKiindCount=2
iMaskedCardsType[Convert.ToInt16(ThreeOfAKind)]++;//每2小时触发三张
}
} //此代码一分钟执行一次
if (sSplitBufTime[1] != sMinuteBuf)//另一分钟开始
{
sMinuteBuf = sSplitBufTime[1];//缓存分钟数=当前分钟数
if (--FlushCount <= 0)//30分钟倒计时结束
{
FlushCount = iMinutesPerTrigger30;//FlushCount=30
iMaskedCardsType[Convert.ToInt16(Flush)]++;//每30分钟触发同花
}
if (--StraightCount <= 0)//5分钟倒计时结束
{
StraightCount = iMinutesPerTrigger5;//StraightCount=5
iMaskedCardsType[Convert.ToInt16(Straight)]++;//每5钟触发顺子
}
if (--TwoPairCount <= 0)//一分钟倒计时结束
{
TwoPairCount = iMinutesPerTrigger1;//TwoPairCount=1
iMaskedCardsType[Convert.ToInt16(TwoPair)]++;//每1分钟触发两对半
}
}
}
//更新触发时间
public void UpdateTrigger(String sCurrentCards)
{
String sCurrentHand = GetCardsType(sCurrentCards);//返回 牌类型,牌1数字~牌2数字~牌3数字~牌4数字~牌5数字
String[] sSplitBuf = sCurrentHand.Split(',');
if (sSplitBuf[0] != Single && sSplitBuf[0] != Pair)//牌类型不是单张或者对子
iMaskedCardsType[Convert.ToInt16(sSplitBuf[0])]--;//重新将其他牌类型初始化为0
}
//返回:计算机发的5张牌。例:牌1的ImageUrl~牌2的ImageUrl~牌3的ImageUrl~牌4的ImageUrl~牌5的ImageUrl。
public String GetNewHand()
{
String sNewHand = ""; while (sNewHand == "")
{
Random NewType = new Random();
Random NewNumber = new Random(); Int32[] iCardsType = new Int32[iNumOfCards];
Int32[] iCardsNumber = new Int32[iNumOfCards]; //牌的类型
iCardsType[0] = NewType.Next(1, 5);//1-5之间的一个随机数
iCardsType[1] = NewType.Next(1, 5);
iCardsType[2] = NewType.Next(1, 5);
iCardsType[3] = NewType.Next(1, 5);
iCardsType[4] = NewType.Next(1, 5);
//牌号
iCardsNumber[0] = NewNumber.Next(1, 14);//1-14之间的随机数
iCardsNumber[1] = NewNumber.Next(1, 14);
iCardsNumber[2] = NewNumber.Next(1, 14);
iCardsNumber[3] = NewNumber.Next(1, 14);
iCardsNumber[4] = NewNumber.Next(1, 14); sNewHand = CheckNewHand(iCardsType, iCardsNumber);//组合五张牌成一个字符串 花色_牌号~花色_牌号……
}
return sNewHand;
}
//返回5张牌如2_3~2_3~2_3~2_3~2_3
public String CheckNewHand(Int32[] iCardType, Int32[] iCardsNumber)
{
if (lxFile_String.CheckDepurecatedNum(iCardsNumber))//几张牌的数字要完全不相同
return "";
else if (CheckDepurecatedCardType(iCardType))
{
return iCardType[0].ToString() + "_" + iCardsNumber[0].ToString() + "~" +
iCardType[1].ToString() + "_" + iCardsNumber[1].ToString() + "~" +
iCardType[2].ToString() + "_" + iCardsNumber[2].ToString() + "~" +
iCardType[3].ToString() + "_" + iCardsNumber[3].ToString() + "~" +
iCardType[4].ToString() + "_" + iCardsNumber[4].ToString();
}
return "";
}
晕死了,标题也不能为laohuji???代码太长,不好贴,完整版的看下面链接吧
http://blog.csdn.net/yubangqi/archive/2010/05/23/5618720.aspx
//初始化玩牌游戏
public void PlayCardsInit()
{
if (iMaskedCardsType[0] == 0)//服务器从新启动后的初始化
{
iMaskedCardsType[0] = -1;
iMaskedCardsType[Convert.ToInt16(Single)] = 1;
iMaskedCardsType[Convert.ToInt16(Pair)] = 1;
iMaskedCardsType[Convert.ToInt16(TwoPair)] = 0;
iMaskedCardsType[Convert.ToInt16(Straight)] = 0;
iMaskedCardsType[Convert.ToInt16(Flush)] = 0;
iMaskedCardsType[Convert.ToInt16(ThreeOfAKind)] = 0;
iMaskedCardsType[Convert.ToInt16(FullHouse)] = 0;
iMaskedCardsType[Convert.ToInt16(FourOfAKind)] = 0;
iMaskedCardsType[Convert.ToInt16(StraightFlush)] = 0;
}
}
//检查出触发时间
public void CheckTrigger()
{
String sDateAndTimeBuf = System.DateTime.Now.Date.ToString("yyyy-MM-dd");//系统当前日期
String[] sSplitBufDate = sDateAndTimeBuf.Split(' ');//去空--------------------------------------------系统时间里有空格么? String[] sSplitBufTime = System.DateTime.Now.TimeOfDay.ToString().Split(':');//取出今天的时间并分割,精确到小数点后面六位 //此代码一天执行一次
if (sSplitBufDate[0] != sDateBuf)//缓存日期不是今天日期,即今天还没有执行过此代码
{
sDateBuf = sSplitBufDate[0];//缓存日期=今天日期,即标记今天此代码已经被执行过
if (sSplitBufTime[0] == iOnTimeTrigger8.ToString())//每晚8点触发三张加对子(概率,下同)
{
iMaskedCardsType[Convert.ToInt16(FullHouse)] = 1;//触发加对子
}
} //此代码一小时执行一次
if (sSplitBufTime[0] != sHourBuf)//另一个小时开始
{
sHourBuf = sSplitBufTime[0];//缓存小时数=当前小时数
if (--ThreeOfAKindCount <= 0)//一个小时倒计时结束
{
ThreeOfAKindCount = iHoursPerTrigger;//ThreeOfAKiindCount=2
iMaskedCardsType[Convert.ToInt16(ThreeOfAKind)]++;//每2小时触发三张
}
} //此代码一分钟执行一次
if (sSplitBufTime[1] != sMinuteBuf)//另一分钟开始
{
sMinuteBuf = sSplitBufTime[1];//缓存分钟数=当前分钟数
if (--FlushCount <= 0)//30分钟倒计时结束
{
FlushCount = iMinutesPerTrigger30;//FlushCount=30
iMaskedCardsType[Convert.ToInt16(Flush)]++;//每30分钟触发同花
}
if (--StraightCount <= 0)//5分钟倒计时结束
{
StraightCount = iMinutesPerTrigger5;//StraightCount=5
iMaskedCardsType[Convert.ToInt16(Straight)]++;//每5钟触发顺子
}
if (--TwoPairCount <= 0)//一分钟倒计时结束
{
TwoPairCount = iMinutesPerTrigger1;//TwoPairCount=1
iMaskedCardsType[Convert.ToInt16(TwoPair)]++;//每1分钟触发两对半
}
}
}
//更新触发时间
public void UpdateTrigger(String sCurrentCards)
{
String sCurrentHand = GetCardsType(sCurrentCards);//返回 牌类型,牌1数字~牌2数字~牌3数字~牌4数字~牌5数字
String[] sSplitBuf = sCurrentHand.Split(',');
if (sSplitBuf[0] != Single && sSplitBuf[0] != Pair)//牌类型不是单张或者对子
iMaskedCardsType[Convert.ToInt16(sSplitBuf[0])]--;//重新将其他牌类型初始化为0
}
//返回:计算机发的5张牌。例:牌1的ImageUrl~牌2的ImageUrl~牌3的ImageUrl~牌4的ImageUrl~牌5的ImageUrl。
public String GetNewHand()
{
String sNewHand = ""; while (sNewHand == "")
{
Random NewType = new Random();
Random NewNumber = new Random(); Int32[] iCardsType = new Int32[iNumOfCards];
Int32[] iCardsNumber = new Int32[iNumOfCards]; //牌的类型
iCardsType[0] = NewType.Next(1, 5);//1-5之间的一个随机数
iCardsType[1] = NewType.Next(1, 5);
iCardsType[2] = NewType.Next(1, 5);
iCardsType[3] = NewType.Next(1, 5);
iCardsType[4] = NewType.Next(1, 5);
//牌号
iCardsNumber[0] = NewNumber.Next(1, 14);//1-14之间的随机数
iCardsNumber[1] = NewNumber.Next(1, 14);
iCardsNumber[2] = NewNumber.Next(1, 14);
iCardsNumber[3] = NewNumber.Next(1, 14);
iCardsNumber[4] = NewNumber.Next(1, 14); sNewHand = CheckNewHand(iCardsType, iCardsNumber);//组合五张牌成一个字符串 花色_牌号~花色_牌号……
}
return sNewHand;
}
//返回5张牌如2_3~2_3~2_3~2_3~2_3
public String CheckNewHand(Int32[] iCardType, Int32[] iCardsNumber)
{
if (lxFile_String.CheckDepurecatedNum(iCardsNumber))//几张牌的数字要完全不相同
return "";
else if (CheckDepurecatedCardType(iCardType))
{
return iCardType[0].ToString() + "_" + iCardsNumber[0].ToString() + "~" +
iCardType[1].ToString() + "_" + iCardsNumber[1].ToString() + "~" +
iCardType[2].ToString() + "_" + iCardsNumber[2].ToString() + "~" +
iCardType[3].ToString() + "_" + iCardsNumber[3].ToString() + "~" +
iCardType[4].ToString() + "_" + iCardsNumber[4].ToString();
}
return "";
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货