C# 斗地主出牌算法 精华

C# 斗地主出牌算法 精华
C# 斗地主出牌算法 精华

C# 斗地主出牌算法精华

斗地主出牌算法

根据斗地主出牌规则.对玩家出的牌进行检验.判断是否符合出牌规则.

(关于斗地主的出牌规则网上有很多)

思路:将玩家的牌按升序排序.然后将牌进行拆分,分存在4个数组中.拆分规则如下:

假设有牌:333/444/555/789

则拆分后数组中的数据如下

arr[0]:345789

arr[1]:345

arr[2]:345

arr[3]:null

可以看出拆分规则是:如果遇到相同数字的牌则存到下一个数组的末尾.

拆分完后可以根据各数组的存储情况判定玩家出牌的类型,上面例子arr[3]为空.可以排除掉4带1(2).炸弹.的情况根据arr[2]为顺子且个数大于1,且arr[2]中存放的牌的张数乘以3刚好等于arr[0]的张数+arr[1]的张数.则可以判定是三带一的飞机.其他类型的牌也有相似的规律.以下是该算法的核心源代码.本算法用C#编写.

using System;

using System.Collections.Generic;

using System.Text;

namespace LordLibrary

{

/*

*以下程序版权由林奕霖所有,有兴趣的朋友可以用来交流和探讨.但请别用于商业用途.否则后果自负.

*您可以自由拷贝修改此源代码,但必须保留此注释.

*/

public class CheckType

{

private static int[][] DiffRow(int[] nums)

{

int[][] list = new int[4][];

for (int i = 0; i < list.Length; i++)

{

list = new int[20];

}

int[] rowIndex = new int[4];

int columIndex = 0;

for (int i = 0; i < nums.Length; i++)

{

if (i + 1 < nums.Length)

{

if (nums != 0)

{

list[columIndex][rowIndex[columIndex]] = nums;

rowIndex[columIndex]++;

}

if (nums == nums[i + 1])

{

columIndex++;

}

else

{

columIndex = 0;

}

}

else if (nums != 0)

list[columIndex][rowIndex[columIndex]] = nums;

}

return list;

}

private static int checkListCount(int[][] list, int rowIndex, int compStart, int rowMaxCount) {

/* LIST 代表单顺.

*DOUB 代表双顺.

*FEI0 代表三顺.

*FEI1 代表三带一的飞机

*FEI2 代表三带二的飞机

*FOR1 代表四带1

*FOR2 代表四带2

*ROCK 代表大小王

*/

int listCount = 1;

for (int i = compStart; i < rowMaxCount - 1; i++)

{

if (list[rowIndex] + 1 == list[rowIndex][i + 1])

listCount++;

else

listCount = 1;

}

return listCount;

}

public static string getCardType(int[] nums)

{

int[][] list = DiffRow(nums);

int[] counts = new int[4];

for (int k = 0; k < 4; k++)

counts[k] = Array.IndexOf(list[k], 0);

}

int MaxValue = 0;

int listCount = 0;

string type = string.Empty;

//当第4行牌的数量为1的时候

#region

if (counts[3] == 1)

{

int index = Array.IndexOf(list[2], list[3][0]);

switch (counts[2])

{

case 1:

MaxValue = list[3][0];

if (counts[0] == 1)

{

type = "BOMB:4:" + MaxValue;

}

else if (counts[0] + counts[1] == 4)

{

type = "FOR1:6:" + MaxValue;

}

else if (counts[0] == counts[1] && counts[0] == 3)

{

type = "FOR2:8:" + MaxValue;

}

break;

case 2:

if (list[2][0] + 1 == list[2][1] && counts[1] == counts[2] && counts[0] == 3)

{

MaxValue = list[2][counts[2] - 1];

type = "FEI1:" + counts[2] + ":" + MaxValue;

} break;

case 3:

if (checkListCount(list, 2, 0, counts[2]) == counts[2] && counts[0] + counts[1] + counts[3] == 3 * counts[2])

{

MaxValue = list[2][counts[2] - 1];

type = "FEI1:" + counts[2] + ":" + MaxValue;

}

else if (Array.IndexOf(list[2], list[3][0]) == 0 && counts[0] == counts[2])

{

if ((listCount = checkListCount(list, 2, 1, counts[2])) == counts[2] - 1)

MaxValue = list[2][counts[2] - 1];

type = "FEI2:" + listCount + ":" + MaxValue;

}

}

else if (Array.IndexOf(list[2], list[3][0]) == counts[2] - 1 && counts[0] == counts[2])

{

if ((listCount = checkListCount(list, 2, 0, counts[2] - 1)) == counts[2] - 1)

{

MaxValue = list[2][counts[2] - 2];

type = "FEI2:" + listCount + ":" + MaxValue;

}

}

break;

case 4:

if (index == 0 && counts[0] == counts[1] && counts[0] == 5)

{

if ((listCount = checkListCount(list, 2, 1, counts[2])) == counts[2] - 1)

{

MaxValue = list[2][counts[2] - 1];

type = "FEI2:" + listCount + ":" + MaxValue;

}

}

else if (index == counts[2] - 1 && counts[0] == counts[1] && counts[0] == 5)

{

if ((listCount = checkListCount(list, 2, 0, counts[2] - 1)) == counts[2] - 1)

{

MaxValue = list[2][counts[2] - 2];

type = "FEI2:" + listCount + ":" + MaxValue;

}

}

else if ((listCount = checkListCount(list, 2, 0, counts[2])) == counts[2] && counts[0] + counts[1] + counts[3] == 3 * counts[2])

{

MaxValue = list[2][counts[2] - 1];

type = "FEI1:" + listCount + ":" + MaxValue;

}

break;

case 5:

if (index == 0)

{

if ((listCount = checkListCount(list, 2, 0, counts[2])) == counts[2] && counts[0] + counts[1] + counts[3] == 3 * counts[2])

{

type = "FEI1:" + listCount + ":" + MaxValue;

}

else if (listCount == counts[2] - 1 && counts[0] == counts[1])

{

if (counts[0] + 1 == 2 * (counts[2] - 1))

{

MaxValue = list[2][counts[2] - 1];

type = "FEI2:" + listCount + ":" + MaxValue;

}

else if (2 * (counts[0] + 1) == 3 * (counts[2] - 1))

{

MaxValue = list[2][counts[2] - 1];

type = "FEI1:" + listCount + ":" + MaxValue;

}

}

}

else if (index == counts[2] - 1)

{

if ((listCount = checkListCount(list, 2, 0, counts[2])) == counts[2] && counts[0] + counts[1] + counts[3] == 3 * counts[2])

{

MaxValue = list[2][counts[2] - 1];

type = "FEI1:" + listCount + ":" + MaxValue;

}

else if ((listCount = checkListCount(list, 2, 0, counts[2] - 1)) == counts[2] - 1 && counts[0] == counts[1]) {

if (counts[0] + 1 == 2 * (counts[2] - 1))

{

MaxValue = list[2][counts[2] - 2];

type = "FEI2:" + listCount + ":" + MaxValue;

}

else if (2 * (counts[0] + 1) == 3 * (counts[2] - 1))

{

MaxValue = list[2][counts[2] - 2];

type = "FEI1:" + listCount + ":" + MaxValue;

}

}

}

else

{

if ((listCount = checkListCount(list, 2, 0, counts[2])) == counts[2] && counts[0] + counts[1] + counts[3] == 3 * counts[2])

{

type = "FEI1:" + listCount + ":" + MaxValue;

}

}

break;

case 6:

if ((listCount = checkListCount(list, 2, 0, counts[2])) == counts[2] && counts[0] + counts[1] + counts[3] == 3 * counts[2])

{

MaxValue = list[2][counts[2] - 1];

type = "FEI1:" + listCount + ":" + MaxValue;

}

else if (index == 0 && listCount == counts[2] - 1 && counts[0] + counts[1] + 2 == 3 * (counts[2] - 1)) {

MaxValue = list[2][counts[2] - 1];

type = "FEI1:" + listCount + ":" + MaxValue;

}

else if (index == counts[2] - 1 && (listCount = checkListCount(list, 2, 0, counts[2] - 1)) == counts[2] - 1 && counts[0] + counts[1] + 2 == 3 * (counts[2] - 1))

{

MaxValue = list[2][counts[2] - 2];

type = "FEI1:" + listCount + ":" + MaxValue;

}

break;

}

}

#endregion

//当第4行牌的数量为2的时候

#region

if (counts[3] == 2)

{

switch (counts[2])

{

default:

if (counts[2] >= 2 && counts[2] < 6)

{

if ((listCount = checkListCount(list, 2, 0, counts[2])) == counts[2] && counts[0] + counts[1] + counts[3] == 3 * counts[2])

{

MaxValue = list[2][counts[2] - 1];

type = "FEI1:" + listCount + ":" + MaxValue;

}

}

break;

case 6:

int firstIndex = Array.IndexOf(list[2], list[3][0]);

int secIndex = Array.IndexOf(list[2], list[3][1]);

if (secIndex == 1)

{

if ((listCount = checkListCount(list, 2, 2, counts[2])) == counts[2] - 2 && counts[0] == counts[1] && counts[0] + 2 == 2 * (counts[2] - 2))

{

MaxValue = list[2][counts[2] - 1];

type = "FEI2:" + listCount + ":" + MaxValue;

}

}

else if (secIndex == counts[2] - 1)

{

if (firstIndex == 0)

{

if ((listCount = checkListCount(list, 2, 1, counts[2] - 1)) == counts[2] - 2 && counts[0] == counts[1] && counts[0] + 2 == 2 * (counts[2] - 2))

{

MaxValue = list[2][counts[2] - 2];

type = "FEI2:" + listCount + ":" + MaxValue;

}

}

else if (firstIndex == secIndex - 1)

{

if ((listCount = checkListCount(list, 2, 0, counts[2] - 2)) == counts[2] - 2 && counts[0] == counts[1] && counts[0] + 2 == 2 * (counts[2] - 2))

{

MaxValue = list[2][counts[2] - 3];

type = "FEI2:" + listCount + ":" + MaxValue;

}

}

}

if ((listCount = checkListCount(list, 2, 1, counts[2])) == counts[2] - 1 && 2 * counts[0] + 3 == 3 * (counts[2] - 1))

{

MaxValue = list[2][counts[2] - 1];

type = "FEI1:" + listCount + ":" + MaxValue;

}

else if ((listCount = checkListCount(list, 2, 0, counts[2] - 1)) == counts[2] - 1 && 2 * counts[0] + 3 == 3 * (counts[2] - 1))

{

MaxValue = list[2][counts[2] - 2];

type = "FEI1:" + listCount + ":" + MaxValue;

}

break;

}

}

#endregion

//当第4行牌的数量大于2的时候

#region

if (counts[3] > 2)

{

if ((listCount = checkListCount(list, 2, 0, counts[2])) == counts[2] && counts[0] + counts[1] + counts[3] == 3 * counts[2])

{

MaxValue = list[2][counts[2] - 1];

type = "FEI1:" + listCount + ":" + MaxValue;

}

}

#endregion

//当第4行牌的数量为0,第三行牌的数量大于0

#region

if (counts[3] == 0 && counts[2] > 0)

{

if ((listCount = checkListCount(list, 2, 0, counts[2])) == counts[2])

{

if (counts[0] == counts[2])

{

MaxValue = list[2][counts[2] - 1];

type = "FEI0:" + listCount + ":" + MaxValue;

}

else if (counts[0] + counts[1] == 3 * counts[2])

{

MaxValue = list[2][counts[2] - 1];

type = "FEI1:" + listCount + ":" + MaxValue;

}

else if (counts[0] + counts[1] == 4 * counts[2] && counts[0] == counts[1])

{

MaxValue = list[2][counts[2] - 1];

type = "FEI2:" + listCount + ":" + MaxValue;

}

}

if ((listCount = checkListCount(list, 2, 1, counts[2])) == counts[2] - 1 && counts[0] + counts[1] + 1 == 3 * (counts[2] - 1))

{

MaxValue = list[2][counts[2] - 1];

type = "FEI1:" + listCount + ":" + MaxValue;

}

else if ((listCount = checkListCount(list, 2, 0, counts[2] - 1)) == counts[2] - 1 && counts[0] + counts[1] + 1 == 3 * (counts[2] - 1))

{

MaxValue = list[2][counts[2] - 2];

type = "FEI1:" + listCount + ":" + MaxValue;

}

}

#endregion

//当第3行牌的数量为0,第二行牌的数量大于0

#region

if (counts[2] == 0 && counts[1] > 0)

{

if (counts[0] == 1)

{

MaxValue = list[1][counts[1] - 1];

listCount = counts[1];

type = "DOUB:" + listCount + ":" + MaxValue;

}

else

{

if (counts[1] > 2 && counts[0] == counts[1] && (listCount = checkListCount(list, 1, 0, counts[1])) == counts[1])

{

MaxValue = list[1][counts[1] - 1];

type = "DOUB:" + listCount + ":" + MaxValue;

}

}

}

#endregion

//当第2行牌的数量为0

#region

if (counts[1] == 0)

{

if (counts[0] == 1)

{

MaxValue = list[0][counts[0] - 1];

listCount = counts[0];

type = "LIST:" + listCount + ":" + MaxValue;

}

else if (counts[0] == 2 && list[0][0] == 16 && list[0][1] == 17)

{

type = "ROCK:2:17";

}

else if (counts[0] >= 5 && (listCount = checkListCount(list, 0, 0, counts[0])) == counts[0])

{

MaxValue = list[0][counts[0] - 1];

listCount = counts[0];

type = "LIST:" + listCount + ":" + MaxValue;

}

}

#endregion

String[] cmd= type.Split(new char[]{':'});

int big = Array.IndexOf(nums, 16);

int small = Array.IndexOf(nums, 17);

if (cmd.Length > 0 && cmd[0]!=string.Empty)

{

if ((cmd[0]=="LIST" || cmd[0]=="DOUB" || cmd[0]=="FEI0" || cmd[0]=="FEI1"|| cmd[0]=="FEI2")&& (int.Parse(cmd[1]))>1)

{

type = int.Parse(cmd[2]) > 14 ? string.Empty : type;

}

else if (cmd[0] == "FOR1" || cmd[0] == "FOR2")

{

type = (big >0 && small>0) ? string.Empty : type;

}

}

return type;

}

}

}

https://www.360docs.net/doc/531922878.html,/fmpfantasy/article/details/4033392

C#网络版斗地主——出牌算法和规则

本文是对C#网络版斗地主的开发总结

大家知道,斗地主这个游戏是将一些特有的牌组合成牌组然后来比较牌组的大小,那么,就应该给PokerGroup 类定义一个属性type,即牌组的类型,type的值是一个枚举类型

1 public enum PokerGroupType

2 {

3 单张 = 1,

4 对子 = 2,

5 双王 = 3,

6 三张相同 = 4,

7 三带一 = 5,

8 炸弹 = 6,

9 五张顺子 = 7,

10 六张顺子 = 8,

11 三连对 = 9,

12 四带二 = 10,

13 二连飞机 = 11,

14 七张顺子 = 12,

15 四连对 = 13,

16 八张顺子 = 14,

17 飞机带翅膀 = 15,

18 九张顺子 = 16,

19 三连飞机 = 17,

20 五连对 = 18,

21 十张顺子 = 19,

22 十一张顺子 = 20,

23 十二张顺子 = 21,

24 四连飞机 = 22,

25 三连飞机带翅膀 = 23,

26 六连对 = 24,

27 //没有13

28 七连对 = 25,

29 五连飞机 = 26,

30 八连对 = 27,

31 四连飞机带翅膀 = 28,

32 //没有17

33 九连对 = 29,

34 六连飞机 = 30,

35 //没有19

36 十连对 = 31,

37 五连飞机带翅膀 = 32

38

39

40 //下面是各种牌组对应的牌的张数

41 //单张 = 1,

42 //对子 = 2,

43 //双王 = 2,

44 //三张相同 = 3,

45 //三带一 = 4,

46 //炸弹 = 4,

47 //五张顺子 = 5,

48 //六张顺子 = 6,

49 //三连对 = 6,

50 //四带二 = 6,

51 //二连飞机 = 6,

52 //七张顺子 = 7,

53 //四连对 = 8,

54 //八张顺子 = 8,

55 //飞机带翅膀 = 8,

56 //九张顺子 = 9,

57 //三连飞机 = 9,

58 //五连对 = 10,

59 //十张顺子 = 10,

60 //十一张顺子 = 11,

61 //十二张顺子 = 12,

62 //四连飞机 = 12,

63 //三连飞机带翅膀 = 12,

64 //六连对 = 12,

65 ////没有13

66 //七连对 = 14,

67 //五连飞机 = 15,

68 //八连对 = 16,

69 //四连飞机带翅膀 = 16,

70 ////没有17

71 //九连对 = 18,

72 //六连飞机 = 18,

73 ////没有19

74 //十连对 = 20,

75 //五连飞机带翅膀 = 20

76 }

当玩家出牌时,首先应判断玩家的牌组类型。

我判断牌组类型的方法是根据玩家所出牌组张数的不同来做出不同的处理。比如,玩家出的牌只有一张,那么肯定是个子。如果有两张肯定是对子。如果有三张,肯定是三个。如果有6张呢?就有三种情况了:1、顺子。2、连对。、3、飞机。由于顺子,连对,飞机这三种牌可以有很多组合,顺子可以有6张顺子或者7张顺子,连对可以有4连对或者5连对。飞机可以有2连飞机,三连飞机。所以就需要写几个方法分别判断牌组是否为顺子,连对,飞机了。

顺子和对子很好判断,飞机就麻烦点了,由于飞机可以随便带一张或几张牌,如果带的牌的点数比飞机本身的点数大,那么大的那张牌就被排序到飞机前面了,这样对比较牌组的大小很不方便。所以还要有一个对飞机带翅膀这样的牌组进行排序的方法。

判断牌组类型的代码如下:

///

/// 验证所出牌组是否符合游戏规则

///

public static bool IsRules(PokerGroup leadPokers) //判断所出牌组类型以及其是否符合规则 {

bool isRule = false;

Player.sort(leadPokers);

switch (leadPokers.Count)

{

case 0:

isRule = false;

break;

case 1:

isRule = true;

leadPokers.type = PokerGroupType.单张;

break;

case 2:

if (IsSame(leadPokers,2))

{

isRule = true;

leadPokers.type = PokerGroupType.对子;

}

else

{

if (leadPokers[0] == PokerNum.大王 && leadPokers[1] == PokerNum.小王)

{

leadPokers.type = PokerGroupType.双王;

isRule = true;

}

else

{

isRule = false;

}

}

break;

case 3:

if (IsSame(leadPokers,3))

{

leadPokers.type = PokerGroupType.三张相同;

isRule = true;

}

else

{

isRule = false;

}

break;

case 4:

if (IsSame(leadPokers, 4))

{

leadPokers.type = PokerGroupType.炸弹;

isRule = true;

}

else

{

if (IsThreeLinkPokers(leadPokers))

{

leadPokers.type = PokerGroupType.三带一; isRule = true;

}

else

{

isRule = false;

}

}

break;

case 5:

if (IsStraight(leadPokers))

{

leadPokers.type = PokerGroupType.五张顺子; isRule = true;

}

else

{

isRule = false;

}

break;

case 6:

if (IsStraight(leadPokers))

{

leadPokers.type = PokerGroupType.六张顺子; isRule = true;

}

else

{

if (IsLinkPair(leadPokers))

{

leadPokers.type = PokerGroupType.三连对; isRule = true;

}

else

if (IsSame(leadPokers, 4))

{

leadPokers.type = PokerGroupType.四带二; isRule = true;

}

else

{

if (IsThreeLinkPokers(leadPokers))

{

leadPokers.type = PokerGroupType.二连飞机; isRule = true;

}

else

{

isRule = false;

}

}

}

}

break;

case 7:

if (IsStraight(leadPokers))

{

leadPokers.type = PokerGroupType.七张顺子; isRule = true;

}

else

{

isRule = false;

}

break;

case 8:

if (IsStraight(leadPokers))

{

leadPokers.type = PokerGroupType.八张顺子; isRule = true;

}

else

{

if (IsLinkPair(leadPokers))

{

leadPokers.type = PokerGroupType.四连对; isRule = true;

else

{

if (IsThreeLinkPokers(leadPokers))

{

leadPokers.type = PokerGroupType.飞机带翅膀; isRule = true;

}

else

{

isRule = false;

}

}

}

break;

case 9:

if (IsStraight(leadPokers))

{

leadPokers.type = PokerGroupType.九张顺子; isRule = true;

}

else

{

if (IsThreeLinkPokers(leadPokers))

{

leadPokers.type = PokerGroupType.三连飞机; }

else

{

isRule = false;

}

}

break;

case 10:

if (IsStraight(leadPokers))

{

leadPokers.type = PokerGroupType.十张顺子; isRule = true;

}

else

{

if (IsLinkPair(leadPokers))

{

leadPokers.type = PokerGroupType.五连对;

isRule = true;

}

else

{

isRule = false;

}

}

break;

case 11:

if (IsStraight(leadPokers))

{

leadPokers.type = PokerGroupType.十一张顺子;

isRule = true;

}

else

{

isRule = false;

}

break;

case 12:

if (IsStraight(leadPokers))

{

leadPokers.type = PokerGroupType.十二张顺子;

isRule = true;

}

else

{

if (IsLinkPair(leadPokers))

{

leadPokers.type = PokerGroupType.六连对;

isRule = true;

}

else

{

if (IsThreeLinkPokers(leadPokers))

{

//12有三连飞机带翅膀和四连飞机两种情况,所以在IsThreeLinkPokers中做了特殊处理,此处不用给type赋值. isRule = true;

}

else

{

isRule = false;

}

}

break;

case 13:

isRule = false;

break;

case 14:

if (IsLinkPair(leadPokers))

{

leadPokers.type = PokerGroupType.七连对;

isRule = true;

}

else

{

isRule = false;

}

break;

case 15:

if (IsThreeLinkPokers(leadPokers))

{

leadPokers.type = PokerGroupType.五连飞机;

isRule = true;

}

else

{

isRule = false;

}

break;

case 16:

if (IsLinkPair(leadPokers))

{

leadPokers.type = PokerGroupType.八连对;

isRule = true;

}

else

{

if (IsThreeLinkPokers(leadPokers))

{

leadPokers.type = PokerGroupType.四连飞机带翅膀; isRule = true;

}

else

{

isRule = false;

}

break;

case 17:

isRule = false;

break;

case 18:

if (IsLinkPair(leadPokers))

{

leadPokers.type = PokerGroupType.六连对;

isRule = true;

}

else

{

if (IsThreeLinkPokers(leadPokers))

{

leadPokers.type = PokerGroupType.六连飞机;

isRule = true;

}

else

{

isRule = false;

}

}

break;

case 19:

isRule = false;

break;

case 20:

if (IsLinkPair(leadPokers))

{

leadPokers.type = PokerGroupType.十连对;

isRule = true;

}

else

{

if (IsThreeLinkPokers(leadPokers))

{

leadPokers.type = PokerGroupType.五连飞机带翅膀; isRule = true;

}

else

{

isRule = false;

}

break;

}

return isRule;

}

///

/// 判断一个牌组指定数量相邻的牌是否两两相同

///

/// 牌组对象

/// 指定数量的相邻牌组

/// 指定数量的相邻牌是否两两相同

public static bool IsSame(PokerGroup PG, int amount)

{

bool IsSame1 = false;

bool IsSame2 = false;

for (int i = 0; i < amount - 1; i++) //从大到小比较相邻牌是否相同

{

if (PG[i] == PG[i+1])

{

IsSame1 = true;

}

else

{

IsSame1 = false;

break;

}

}

for (int i = PG.Count - 1; i > PG.Count - amount; i--) //从小到大比较相邻牌是否相同 {

if (PG[i] == PG[i - 1])

{

IsSame2 = true;

}

else

{

IsSame2 = false;

break;

}

}

if (IsSame1 || IsSame2)

{

return true;

}

else

斗地主比赛方案

“厦门市恒力公司宁德项目部棋牌大赛”比赛实施方案 一、活动目的及意义 为了丰富全体公司员工业余生活,展现我们公司员工精湛牌技,厦门市恒力公司宁德项目部特别展开益智扑克竞技比赛,斗地主比赛,下象棋比赛、升级。活动旨在锻炼全体公司员工缜密的思维能力,勇谋兼具的运筹能力,从而调动全体公司员工的活动激情,营造浓郁的体育竞技氛围。 二、活动宗旨 “以牌交友,以牌会友”,并本着“竞技与娱乐相融、智慧与激情齐放”的活动精神,给广大在校学生献上一份精美的体育竞技大餐。 三、实施方案 举办时间:2015年02月24日 活动地点:恒力食堂(具体地点再通知) 比赛赛制:淘汰赛和决赛 人数:48人 奖项设置: 参与奖:32人 优胜奖:13人 特等奖:3人 【斗地主简介】 游戏使用两副牌,四个玩家同时游戏,一队为地主,另外三个人为另一队,先出完牌的一队获胜。 【斗地主游戏规则】 1. 发牌和决定地主 发牌:游戏开始后发牌,留8张底牌,每人发25张牌。 叫分:随机选择一个玩家开始依次叫分,玩家可以选择叫“1分”、“2分”、“3分”或者不叫分,所叫的分数必须比上一家高。

叫3分的玩家成为地主。 如果没有玩家叫3分,则一轮下来叫分最高的玩家成为地主。 如果没有任何一个玩家叫分,则重新发牌,三轮都没有人叫地主,则解散游戏。 底牌:决定地主后,底牌发给成为地主的玩家,其他玩家可见。 2. 牌型 单张:任意一张单牌。 顺子:任意五张或者五张以上点数相连的牌,2和王不能出现在顺子中。 对子:任意两张点数相同的牌,两个小王或两个大王也算对子牌型。 连对:三对或三对以上点数相连的牌,如:556677。2和王不能出现在连对中。 三张:任意三张点数相同的牌。 三顺:两组或两组以上点数相连的三张牌,如:555666;555666777888。2和王不能出现在三顺中。 三带二:点数相同的三张牌+一对牌,如55577 飞机带翅膀:三顺+数量相同的对牌,如555666777+99JJKK 炸弹:四张或四张以上点数相同的牌,如:66666,999999 天王炸弹:四张王牌 3. 牌型的比较 天王炸弹大于所有其他的牌型。 炸弹牌型大于除天王炸弹外的所有其他牌型。炸弹的牌型相互比较时,牌张数多的大,牌数相同的情况,则比较点数,点数大的炸弹大。 非炸弹的牌型,牌型、张数相同才能相互比较,点数大的则大。三带二、飞机带翅膀的牌型比较牌型中张数最多的牌的点数即可。 点数大小,从大到小依次为:大王、小王、2、A、K、Q、J、10、9、8、7、6、5、4、3。 4. 胜负条件 地主为一队,其他三个玩家为另一队,先出完牌的玩家所属的队伍获胜。 5. 积分计算 底分:叫牌的分数,可以叫1分、2分、3分。 倍数:初始为1倍。 一局结束后,基本分的计算方法: 地主胜:地主得分为3×底分×倍数;其余玩家各得:-底分×倍数

最经典的斗地主技巧--超级详细篇!

一、天时 主要指你应有充分游戏时间,他人也应有充分时间,否则人心不稳,情绪波动打不好。当然天气好坏对心情也有影响。 二、地利 主要指你在三人中的坐位,弱上家、强下家是你的最佳位置,强上家会破坏你做地主的机会,弱下家会守门无力。当然好的地理环境有利于你的水平发挥。 三、人和 主要指他人和你,他人应不是同伙,你应身体、心情良好,周围无多嘴闲杂人。以下几种人不与之赌: 1、无钱者:输几把即欠帐者很无趣,你输给他的概率却高。 2、技太差者:享受不到斗智的乐趣,还常受其气。 3、技太好者:指超出你一大截者,与之久赌你必输,却是好的学习对象。 4、输赢看得过重者:与之赌输赢你都不会愉快的。 5、无牌品者:常搞小动作(作弊)。 6、你厌恶之人:如过于急躁者(这种人输钱时更烦躁,不断催你,也许是他的心理战)、废话过多者(干扰你的情绪、打断你的思路,对付办法:他说他的,你打你的)、你仇家(你可能会意气用事)。 7、与你财力不相称的赌场不参与(要么因输不起而压力过大影响水平发挥,要么财大气粗不在乎而掉以轻心致大输)。

四、战略:对游戏的总体认识 1、胜负机制 ①突围论:一副牌54张原为一家,正副统帅+4路大军,一分为二后为两军对垒(两人打),一分为三后为三国大战,各为其主,互相掩护突围(大带小),最先完全撤出者胜。非进攻型游戏,仁者游戏啊--大顾小嘛! 注意: ●大带小只能做到一大带一小,勿幻想一拖二会成功,如地主一套天牌+二轮小牌必输,想胜必须做到大小完全匹配。 ●中间牌属自己突围出去(顺牌自救),运气好坏看别人,故中间牌为挡牌重点,对手也不会指望过小牌的。天牌不用帮,但需机会。 天牌:指某牌型中的最大牌。 ●天牌是动态概念,随着双方互耗,猴子会称大王,故有当前天牌、潜在天牌之分,学问大。 ●天牌牌型中张数越少者越好,如单牌一般较多,易接牌。 ●一般每家有天牌1-3套。 ●也有不知不觉中扔掉天牌的。 ●农民手中牌只需在地主手中为天牌即可。 ●相对而言,地牌是永远无法自己出去的牌,看作小牌即可。

堆排序算法的基本思想及算法实现示例

堆排序算法的基本思想及算法实现示例 堆排序 1、堆排序定义 n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ ) 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。 【例】关键字序列(10,15,56,25,30,70)和(70,56,30,25,15,10)分别满足堆性质(1)和(2),故它们均是堆,其对应的完全二叉树分别如小根堆示例和大根堆示例所示。 2、大根堆和小根堆 根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆。 根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆。 注意: ①堆中任一子树亦是堆。 ②以上讨论的堆实际上是二叉堆(Binary Heap),类似地可定义k叉堆。 3、堆排序特点 堆排序(HeapSort)是一树形选择排序。 堆排序的特点是:在排序过程中,将R[l..n]看成是一棵完全二叉树的顺序存储结构,利用完全二叉树中双亲结点和孩子结点之间的内在关系【参见二叉树的顺序存储结构】,在当前无序区中选择关键字最大(或最小)的记录。 4、堆排序与直接插入排序的区别 直接选择排序中,为了从R[1..n]中选出关键字最小的记录,必须进行n-1次比较,然后在R[2..n]中选出关键字最小的记录,又需要做n-2次比较。事实上,后面的n-2次比较中,有许多比较可能在前面的n-1次比较中已经做过,但由于前一趟排序时未保留这些比较结果,所以后一趟排序时又重复执行了这些比较操作。 堆排序可通过树形结构保存部分比较结果,可减少比较次数。5、堆排序 堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。 (1)用大根堆排序的基本思想

关于3人斗地主比赛规

关于3人斗地主比赛规则 关于3人斗地主的比赛规则 1、参加比赛的人根据现场人数抽签组队,三个人一组。 2、组队后每人发给15颗豆子,在规定时间内(一小时)进行斗地主比赛,比赛结束后每个队中获得豆子数量最多者获胜,获胜者参加决赛。 3、如在比赛过程中,时间没到,但该比赛队其中一人自己拥有的豆子已经输完,那么整个对结束比赛,获得豆子数量最多者获胜。 4、相关规则如下; 1、三人斗地主使用一副54张的扑克牌,包括两张怪(王),即大怪和小怪。牌面从大到小依次是:大怪、小怪、 2、A、K、Q、J、10、9、8、7、6、5、4、3,花色是没有区别的。 2、比赛时发牌规则由比赛小组自己决定。 3、比赛时出牌规则: (1) 单张:前面提到过,大小顺序从3(最小)到大怪(最大); (2) 一对:两张大小相同的牌,从3(最小)到2(最大);

(3) 三张:三张大小相同的牌; (4) 三带一:三张并带上任意一张牌,例如6-6-6-8,根据三张的大小来比较,例如9-9-9-3盖过8-8-8-A; (5) 顺子:至少5张连续大小(从3到A,2和怪不能用)的牌,例如8-9-10-J-Q; (6) 连对:至少3个连续大小(从3到A,2和怪不能用)的对子,例如10-10-J-J-Q-Q-K-K; (7) 飞机:每个三张都带上额外的一个单张,例如7-7-7-8-8-8-3-6,尽管三张2不能用,但能够带上单张2和怪; (8) 炸弹:四张大小相同的牌,炸弹能盖过除火箭外的其他牌型,大的炸弹能盖过小的炸弹; (9) 王炸:一对怪,这是最大的组合,能够盖过包括炸弹在内的任何牌型; (10) 四带二:有两种牌型,一个四张带上两个单张,例如6-6-6-6-8-9,或一个四张带上一对,例如J-J-J-J-9-9,四带二只根据四张的大小来比较,只能盖过比自己小的同样牌型的四带二【四张带二张和四张带一对属于不同的牌型,不能彼此盖过】,不能盖过其他牌型,四带二能被比自己小的炸弹盖过。

斗地主游戏规则白话版

【游戏规则】 一、发牌 一副牌54 张,一人17 张,留3 张做底牌,在确定地主之前边个都唔可以睇底牌。 二、叫牌 叫牌按出牌噶顺序轮流进行,叫牌噶时候可以选择“叫地主” 、“ 唔叫” 。如果有人选择“叫地主” 则立即结束叫牌,哩个人就系地主;如果都“唔叫”,则重新发牌,重新叫牌,直到有人“叫地主”为止。 三、第一个叫牌噶人 1 、第一轮叫牌噶人就系分牌噶时候,有一张系反转来果个咯。 四、牌型 火箭:即双王(大王和小王),大王系最大牌,小王系第二大,跟住其它就系同锄大地一样喇。 炸弹:四张同数值牌(如四个1,四个2,四个3.。。。。。。上面讲噶火箭都算系一个炸弹,但距特别D,两只牌就可以炸,其它就要四只牌先可以炸)。 单牌:姐出一只牌(如一只 5 )。 对牌:姐出一对牌,(如两只5 )。 三张牌:数值相同的三张牌(如三只5 )。 三带一:数值相同的三张牌+ 一张单牌(是但一张就得喇)。例如:333+6 或555+7 单顺:五张或更多的连续单牌(如:45678 或78910JQK )。不过就系无12345。 双顺:三对或更多的连续对牌(如:334455 、33445566778899、JJQQKKAA )。不包括2 同埋双王。 三顺:二个或更多的连续三张牌(如:333444 、555666777888 )。不包括2 同埋双王。 飞机:三顺+同数量的单牌(如333444+67、666777888+345)。后面加乜任你咯,不过要同前面噶三顺数量相同,姐前面333444,后面咪加两只咯,前面333444555咪加3只咯,依此类推。 四带二:四张牌+两张牌。(注意:四带二唔咪炸弹来噶喔)。 如:5555 + 3 +8 。后面加两只乜,任你咯。换句话来讲系炸弹+两只牌,不过火箭唔可以甘用。 五、玩法 好简单喇,人地出几多只,你咪出几多只咯,格式相同就OK,不过仲系要讲下,人地出一只或者出一对噶时候,你唔可以出翻同一只或者同一对啊,姐话你唔可以罗只5仔来打人地噶5仔,要出比5仔大噶牌!人地出一对6,你又唔可以用一对6去打人啊,要出一对大过

迪杰斯特拉算法的基本思想

迪杰斯特拉算法的基本思想 算法的基本思想是:设置并逐步扩充一个集合S,存放已求出其最短路径的顶点,则尚未确定最短路径的顶点集合是V-S,其中V为网中所有顶点集合。按最短路径长度递增的顺序逐个以V-S中的顶点加到S中.直到S中包含全部顶点,而V-S为空。 具体做法是:设源点为vl,则S中只包含顶点vl,令W=V-S,则W中包含除v1外图中所有顶点,vl对应的距离值为0,W中顶点对应的距离值是这样规定的:若图中有弧,则vj顶点的距离为此弧权值,否则为 (一个很大的数),然后每次从W中的顶点中选—个其距离值为最小的顶点vm加入到S中,每往S中加入一个顶点vm,就要对W中的各个顶点的距离值进行一次修改。若加进vm做中间顶点,使+的值小于值,则用+代替原来vj的距离,修改后再在W中选距离值最小的顶点加入到S 中,如此进行下去,直到S中包含了图中所有顶点为止。 下面以邻接矩阵存储来讨论迪杰斯特拉算法的具体实现。 为了找到从源点到其他顶点的最短路径,引入两个辅助数组dist[n],s[n],数组dist记录从源点到其他各顶点当前的最短距离,其初值为dist[i]=cost[v0][i], i=2,...,n.其中v0表示源点。从S之外的顶点集合V-S中选出一个顶点w,使dist[w]的值最小。于是从源点到达w只通过S中的顶点,把w加入集合S中调整dist中记录的从源点到V-S中每个顶点v的距离:从原来的dist[v]和dist[w]+cost[w][v]中选择较小的值作为新的dist[v],重复上述过程,直到S中包含V中其余各顶点的最短路径。

斗地主大赛游戏规则

活动类型: 朋友聚会 开始时间: 12-9-23 13:30:00 至 12-9-23 17:30 商定 活动地点: 通州区上都茗居茶楼(通州区北杨洼观音庙东侧30米) 性别: 不限 已报名人数: 27人 剩余名额: 0 人 报名截止: 12-9-22 17:40 在众多网友还在驻足观望的时候,八通杯第一届斗地主大赛结束了,网友班得瑞、cux、飘雪无寒最终赢得苹果3剑客大奖。很多网友也多次在QQ群中咨询,什么时候可以开启第二届斗地主大赛。八通斗地主大赛第二届开热开赛了。线下纸牌斗地主,全新体验,更少环节,让你玩得更加尽兴。当然,我们还为参赛的网友准备了千元大礼。赶快报名吧,让我们9月23日,共聚上都茗居茶楼,一绝高下。 活动主题:斗地主赢大奖,好礼赢不停——上都茗居斗地主赢大奖竞技赛 活动时间: 9月23日13:30-17:30 活动地点:通州区上都茗居茶楼(通州区北杨洼观音庙东侧30米)八通线梨园站或贵友大厦向北300米观音庙向东30米即到 乘车路线:647路668路806路通州三间房西下车

一)预选赛注意事项 比赛时间:下午14:00-15:00,共计60分钟 比赛形式:以常规3人斗地主打法为准,打法见附件。 比赛分组:以所有选手在签到时的抽签分组为准每组3人共分9组 比赛规则: 每人预先发放200个虚拟积分,每把以10分和20分叫牌; 如选手拿到双王或四个2的牌型;必须叫满20分 如无人叫牌,视为流局; 地主输,需付另外两人每人10分或20分;地主赢,另外两人需付地主每人10分或20分。 有炸弹,一个翻一倍,以此类推,上不封顶。 输赢界定: 比赛时间内,若一人输净积分,则剩下两人按所剩积分多的胜出; 比赛结束,三人均留有积分,则以所剩最多积分的人胜出。 若积分数量相同则进入加时赛,以3局为限,每组只能产生一名冠军。 每组的冠军晋级半决赛,其他选手淘汰。凭奖品券去吧台领取纪念品。 预赛结束后所有晋级选手休息20分钟,并同时进行抽签分组

斗地主技巧大全

斗地主心得斗地主攻略 第一层心法:悟性高者七天可成,次者十四天可成。记牌与算牌是斗地主的基本功。一是要根据自己手里的牌,记住没有的牌,时刻关注别人的出牌情况,记住是否出过这些牌。这点很重要,到牌局的中后段就可推算出别人手里有无炸;二是要记住地主是否出过亮在牌面上的三张底牌;三是要记住别人手里还有几张"王"、"2"、" A",并要根据各人的出牌情况推算出这些牌分别在哪一家的手里,准确率要达到90%以上。在记牌与算牌的基础上决定自己的出牌顺序。出牌对于地主下家的要求不高,对于处在这个阶段的牌手来说,只要把自己的牌走顺即可,抓住机会跑光手里的牌。地主上家的出牌是很有讲究的,要做到"压多攻少"。1."压多"——首先估计地主的牌型,如果地主单牌多,就要坚决顶住,甚至不惜破开对"A"或对"K"来压制地主,建议按" K"、"A"、"Q"、"2"、" J"的顺序顶牌。出" K"是很有学问的,一、可以试探地主有无单"A"和单"2",二、有时候可以破开地主的对"A"和对"2",这对后续在对子上对地主进行攻击是很有利的,三、如果地主出" A",地主下家就可以出" 2"取得出牌权。 2."攻少"——如果地主单牌比较弱或者比较少,而己方(自己与盟友)比较强,可以采取连续出单牌的战术,来打乱地主的牌型,建议不要放跑地主小于" 10"的单牌(大多数情况这都是成败的关键)。地主出牌建议"借力打力,后发制人",在这个阶段就是要做到"压下家放上家",利用上家出小牌把自己的牌走顺。 第二层心法:第二层心法悟性高者七天可成,次焉者十四天可成,如练至二十一天而无进展,则不可再练第三层,以防走火入魔,无可解救。1.记牌——再记"K"、"Q"、"10"、"7"。记住出过的"10"与"7"的张数,如果"10"和"7"出光,就可以断定别人手里没有顺子。2.算牌——通过几轮的出牌,迅速推算出各人剩余牌的大致牌型,确定主攻手与主攻方向。3.出牌——如果自己不是主攻手,就要全力配合盟友进行防守与反击,无论自己是地主的上家还是下家,如果形势需要就要对地主进行疯狂的压制(就算自己剩余的牌型七零八落也在所不惜),关键时刻还要给盟友绝妙的"喂牌",比如出一串致命的顺子或者葫芦。如果自己是主攻手,就要对地主进行冷静、无情的打击,这个时候切不可因自己的牌比较强而得意忘形,要善于借力打力,后发制人,有时候让地主或者盟友多大一把牌也是很有必要的。地主出牌口诀还是"借力打力,后发制人"这八个字。怎样"借力打力,后发制人",这里技巧性非常强。首先出牌要具有迷惑性,让别人错估你的牌型。如果单牌比较弱,预计别人会连续攻击单牌,可先一步拆开对子,比如先出"J",再出"Q",又出"J"。如果单牌比较多,手里有一张小"王"和一对"2",可先出一张"2"管一把牌,再出单张时可出小"王"把别人的大"王"骗下来,手里剩余的一张 "2"可在关键时刻再管一把牌。有时候不仅仅是出牌顺序可以骗对手,出牌的节奏也可以骗对手。比如对方出一对"8",你快速的点击"不要",等其再出对 "7"时,可把手里的对"8"跑掉。又比如对方出了一手你管不起的牌,这时候可以稍微停顿一下,让对手以为你还有大牌或者炸弹。再说说“借力”。首先要判断出哪家的牌比较强,哪一家是在顶你牌,基本上是放顶你牌的那家走,一般来说他(她)很难走的光。要特别注意这种情况,你抓了一个或者一对“王”,你一出单牌,有一家就出“2”,这个时候一定要吃掉“2”,因为这一家很有可能抓了一手的绝牌(不一定是大牌,比如说有一个很长的顺子)。如果不能一气把牌走完,就要留着大牌“后发制人”。 第三层心法:斗地主最高境界,若无绝顶智慧与惊人毅力者万万不可轻易尝试。首先必须身具大智慧,能记住绝大部分出过的牌,整个牌局都在掌控之中,出牌神出鬼没,使对手觉得一切尽在其算中,毫无反抗能力。赢牌于无形之中,就算不能赢牌,也要在气势上压倒对手,使对手神为之夺。并且心智非常坚定,不被对手之种种假象所迷惑,不因对手之挑衅而方寸

斗地主趣味赛活动方案

关于公司员工斗地主比赛方案的申请 一、活动目的: 为丰富公司员工业余文化生活,增进员工之间的沟通交流,调动员工工作的积极性,缓解工作压力,实现劳逸结合,增加团队凝聚力,同时体现企业对员工的关爱,特制定以下活动方案。 二、比赛时间: 本次活动比赛时间暂定为6月8日16:30开始,18:00结束 三、比赛地点:员工食堂 四、参赛人员 公司员工 五、比赛流程 1、比赛前一天确定参赛人数及名单 2、 16:25选手及观众入场,主持人宣读比赛规则 3、 16:30参赛选手以抽签形式定组、定轮次(一轮三组、一组三人) 4、 16:45第一轮开始(以15分钟为例,每组胜出一名,第一轮共3人) 5、 17:00第二轮开始(以15分钟为例,每组胜出一名,第二轮共3人) 6、 17:20第三轮开始(前两轮胜出者再次抽签定组) 7、 17:30决赛开始 8、 17:50给予最后胜出者颁奖及奖金 9、 18:00比赛结束 六、比赛规则 以常规3人斗地主规则为准(南川本地“斗地主”规则)。 个别规矩说明: 1、三个必须只能带一个(脱手时可以三个不带), 2、最后出的“炸弹”不能计算“翻倍”; 3、每次的基本单位是“1”(出牌前无加翻); 4、首局将由翻牌决定先发谁的牌,以后依次将先从上一把地主方发牌开始; 5、洗牌和抽地主均由裁判来执行,发牌规则为2、3、3,最后发地主牌; 6、本次活动不带“花”牌; 7、“翻”的数量上不封顶; 8、三个人不“抓地主”即可放弃该局; 9、如果遇其他有规矩不清楚者,,由现场总裁判所决策的规则为准。 七、晋升规则

1、筹码制 每人每局参赛时,将发放20个筹码,每次的基本单位为1个筹码。如果在规定局数内一个输完20个筹码,则自动淘汰出局。其中筹码最多的一名选手参加下一轮赛局。 2、局数限制 每一轮对决为6局制。到6局开始如果出现有人的筹码比其他两人筹码多即可胜出入下轮比赛,其他两名选手淘汰。 3、总决赛晋升条件 前二轮胜出的6名重新定组,获取筹码最多者即可进入总决赛资格。 八、活动费用预算 每一轮胜出者均有一份小礼品(***元/份*6)合计***元,最后决出第一名(现金***元/人),第二名(现金***元/人)荣誉证书费用***元,总计费用:****元。 以上妥否?请批示! --------------------------------------- 拟文/日期:

斗地主得出的哲理 太精辟了

斗地主得出的哲理太精辟了! 1.小王一出,基本上都会被大王拍死。说明老大在,老二最好不要发话! 2.没有一张大牌开路,再顺的小牌都出不去。说明领导很重要! 3.无论你多会记牌、打牌,都抵不过人家手中的一把好牌。说明实力比能力重要! 4.如果一堆小牌连不起来,即使拿个双王也未必会赢。说明再牛的领导也需一个好团队! 5.为了斗败地主,一会儿我们结成同盟,一会儿我们“反目成仇”。说明没有永远的敌人,也没有永远的朋友! 6.必要的时候,即使拆散自己的牌也要送走搭档。说明一个团队里关键时刻要懂得自我牺牲,才能取得大家最终的胜利! 太精了,一根稻草,扔在街上,就是垃圾,与白菜捆在一起就是白菜价,如果与大闸蟹绑在一起就是大闸蟹的价格,我们与谁捆绑在一起,这很重要!一个人与不一样的人在一起也会出现不一样的价值!一个人与不一样的平台也会体现不同的价值! 结交有正能量的人会影响您一生!能帮助您提高您的正能量的平台!选择比努力更重要!什么叫人生的规划没规划的人生叫拼图,有规划的人生叫蓝图; 没目标的人生叫流浪,有目标的人生叫航行!蜜蜂忙碌一天,人见人爱;蚊子整日奔波人人喊打!多么忙不重要,忙什么才重要!一次重要的抉择胜过千百次的努力! 今天的生活是由三、五年前选择决定的,而三、五年后的生活是由今天决定。生活的抉择,要有智慧!古人云:富不学,富不长;穷不学,穷不尽!要想改变口袋,先要改变脑袋!问心做事。旅游需要导游,人生也需要导师! 读万卷书,不如行万里路,行万里路,不如阅人无数,阅人无数,不如名师指路,名师指路不如跟随成功者的脚步!虽然未必每一个教练都能教出冠军,但每一个冠军都有教练!你有人生教练吗?如果没有请第一时间找到他!人生要交的四位朋友: ~~交一个欣赏你的朋友,在你穷困潦倒的时候安慰你帮助你。 交一个有正能量的朋友,在你情绪低落的时候陪伴你鼓励你。交一个为你领路指路的朋友,当你迷茫,迷失方向时带你走过泥泞,迷雾。交一个肯批评你的朋友,时刻提醒你,监督你,让你时刻发现自己的不足。有了这样的朋友,你的生活会充满阳光,事业才会蒸蒸日上。财富不是永远的朋友,朋友却是永远的财富!其道仁易、其道自然!

斗地主的规则方法

斗地主的规则方法 那么下面一起来看看为大家精心推荐的斗地主比赛规则,希望能够对您有所帮助。 斗地主比赛规则1、该游戏由三人玩一副牌,地主为一方,其余两家为另一方,双方对战,先出完手中牌的一方胜。 2、一副牌54张,一人17张,留3张做底牌,在确定地主之前玩家不能看底牌。 3、叫牌按出牌的顺序轮流进行,每人只能叫一次。 叫牌时可以叫“1分,“2分,“3分,“不叫。 后叫牌者只能叫比前面玩家高的分或者不叫。 叫牌结束后所叫分值最大的玩家为地主;如果有玩家叫“3分则立即结束叫牌,该玩家为地主;如果都不叫,则重新发牌,重新叫牌。 4、第一轮叫牌的玩家抽签决定,以后每一轮首先叫牌的玩家按出牌顺序轮流担任。 5、将三张底牌交给地主,并亮出底牌让所有人都能看到。 地主首先出牌,然后按逆时针顺序依次出牌,轮到用户跟牌时,用户可以选择“不出或出比上一个玩家大的牌。 某一玩家出完牌时结束本局。 6、牌型火箭:即双王(大王和小王),最大的牌。 炸弹:四张同数值牌(如四个7)。 单牌:单个牌(如红桃5)。

对牌:数值相同的两张牌(如梅花4+方块4)。 三张牌:数值相同的三张牌(如三个J)。 三带一:数值相同的三张牌+ 一张单牌或一对牌。 例如:333+6或444+99单顺:五张或更多的连续单牌(如:45678或78910JQ)。 不包括2点和双王。 炸弹比火箭小,比其他牌大。 都是炸弹时按牌的分值比大小。 除火箭和炸弹外,其他牌必须要牌型相同且总张数相同才能比大小。 单牌按分值比大小,依次是大王>小王>2>A>K>Q>J>10>9>8>7>6>5>4>3,不分花色。 对牌、三张牌都按分值比大小。 顺牌按最大的一张牌的分值来比大小。 飞机带翅膀和四带二按其中的三顺和四张部分来比,带的牌不影响大小。 8、任意一家出完牌后结束游戏,若是地主先出完牌则地主胜,否则另外两家胜。 9、底分:叫牌的分数;倍数:初始为1,每出一个炸弹或火箭翻一倍。 (火箭和炸弹留在手上没出的不算)一局结束后:地主胜:地主得分

算法习题

算法设计与分析试卷 一、填空题(20分,每空2分) 1、算法的性质包括输入、输出、确定性、有限性。 2、动态规划算法的基本思想就将待求问题分解成若干个子问题、先求解子问题,然后 从这些子问题的解得到原问题的解。 3、设计动态规划算法的4个步骤: (1)找出最优解的性质,并刻画其结构特征。 (2)递归地定义最优值。 (3)以自底向上的方式计算出最优值。 (4)根据计算最优值得到的信息,构造最优解。 4、流水作业调度问题的johnson算法: (1)令N1={i|ai=bj}; (2)将N1中作业依ai的ai的非减序排序;将N2中作业依bi的非增序排序。 5、对于流水作业高度问题,必存在一个最优调度π,使得作业π(i)和π(i+1)满足Johnson不等式min{bπ(i),aπ(i+1)}≥min{bπ(i+1),aπ(i)}。 6、最优二叉搜索树即是最小平均查找长度的二叉搜索树。 二、综合题(50分) 1、当(a1,a2,a3,a4,a5,a6)=(-2,11,-4,13,-5,-2)时,最大子段和为∑ak(2<=k<=4)=20(5分) 2、由流水作业调度问题的最优子结构性质可知,T(N,0)=min{ai+T(N-{i},bi)}(1=sum){ sum=thissum; besti=i; bestj=j;} } return sum; } 4、设计最优二叉搜索树问题的动态规划算法OptimalBinarysearchTree? (15分) Void OptimalBinarysearchTree(int a,int n,int * * m, int * * w) { for(int i=0;i<=n;i++) {w[i+1][i]=a[i]; m[i+1][i]= 0;} for(int r=0;r

企业“欢乐斗地主”比赛活动方案

“欢乐斗地主”比赛活动方案 一、活动目的 为丰富XX文化生活,进一步增强团队意识与竞争意识,提升凝聚力、向心力,促进员工交流沟通,特举办本次欢乐斗地主比赛。 二、活动时间 10月起,暂定每周一、三晚18:30-19:30,择机选择周五下午适时开展;年会当天举行决赛。 三、活动地点 XX职工活动室 四、参与人员 XX全体职工自愿报名 五、活动组织 (一)组织架构 1、组织委员会:XX工会 组长:XXX 成员:各工会委员 2、裁判委员会 组长:XXX 成员:熟知比赛规则且与当局比赛无竞赛利益关联的XX职工 3、协办单位:综合办公室、团总支 (二)职责及分工 活动组委会主要负责比赛的整体组织、统筹与活动时

间、人员安排、积分统计等工作; 裁判组主要负责比赛中的裁判工作及比赛中问题的仲裁; 协办单位负责在必要时予以人力、物力、财力支持。 六、活动形式 (一)比赛规则 比赛采用“公平、公正、公开”诚实守信的原则,参赛形式为每组3人(1名地主,2名贫农);采用积分制,“抢地主”翻倍,至多抢3次;每局比赛若地主胜出积6分,贫农不积分;若贫农胜出,每人积3分,地主不积分。在该过程中,遇“炸”则翻倍。最终积分多者胜出。 (二)具体流程 1、各参赛选手以抽签方式分组比赛,抽到相同号码的为一组,每组3人,不分男女。 2、比赛设A、B、C、D、E、F、G 、H、E等若干小组(依报名人数确定),每轮每组共三局比赛,积分最多者晋级下一轮,积分最少者淘汰;积分相同时,在裁判安排下进行加赛。 3、比赛共分若干轮,直至选出3名选手进入决赛,产生冠亚季军。 七、活动奖励 本次比赛设冠、亚、季军及参与奖。

一副牌斗地主的游戏规则技巧知识介绍

一副牌斗地主的游戏规则技巧知识介绍 一副牌斗地主的游戏知识介绍名词术语地主:在发牌之前系统随机亮明一张牌得到该牌的人为地主可获得底牌;朋友:手中持有地主选定的牌的玩家;暗牌:是指地主手上的牌不开放给农民看底牌:是指发牌结束剩于到最后的三张牌,底牌无需亮出;万能牌:是指可替代任何牌的牌,中途不能单独打出火箭:即双王(双鬼牌),结算翻一倍双炸:万能牌+火箭,结算翻两倍;炸弹:四张大小相同的牌,结算翻一倍单牌(一手牌):单个牌;对牌(一对牌):两张大小相同的牌;三张牌:三张大小相同的牌,不可单独出,只能在最后三张时,方可出三带一手:三张大小相同的牌+一张单牌单顺:四张或更多的连续单牌(不包括2点和双王,不分花色)双顺:二对或更多的连续对牌(不包括2点和双王);飞机带翅膀:三顺+同数量的单牌(可为对牌);例如双飞机带翅膀就带2 张单牌,(双飞机可以带1对牌)三飞机就带3张单牌,地主有可能4飞机,就带4张单牌(也可以带2对牌)动作术语加倍:某玩家获得地主资格之后,所有玩家可以根据自己手牌的好坏,选择是否加倍,选择加倍之后桌上所有玩家输赢都增加1倍,多人加倍时以累加的方式增加倍数。 只加注一轮打骰子:玩家加倍环节结束,系统自动在桌子中央打骰子(2颗6面骰)。 选花色:打完骰子,由地主从“黑红梅方四个花色中选一个花色,结合系统骰子的点数确定一张牌,拥有该张牌的玩家自动为地主的朋友,不立马表明朋友身份。

(朋友牌有特殊标示)(朋友牌没打现之前,仅朋友自己能看见这个标示,打现后所有人可见)如:系统骰子点数6,地主选花色方片,则拥有方片6的玩家为地主的朋友,若地主选的牌在底盘中或在自己手中,则地主一打三。 炸:玩家出炸弹,则称之为炸。 玩家分组开始前地主会有一个找朋友的过程,之后地主与朋友一组,其他二人为一组,两组相互对抗;没有朋友则地主一人一组,其他三人一组。 牌型比较万能牌+火箭> 万能牌+炸弹>火箭> 炸弹>一般牌型(单牌、对牌、三张牌、三带一手、单顺、双顺、飞机带翅膀、飞机);一般牌型:牌型且张数相同才可以按牌点比较大小;其中三带一、飞机带翅膀、组合牌型,比较其相同张数最多的牌点数大小;只能出大于上家的牌,没有则过,直到一方出完牌,则游戏结束。 特殊说明:三张牌一般情况下是不允许单独用的,除了最后只剩三张牌时可直接出;万能牌一般情况是不允许单独出的,若最后只剩一张万能牌时,万能牌最小(万能牌用“皮子标示)一般来说,平时生活中大家玩的"斗地主"都是2副牌四人合打。 即三家斗一家地主。 在网上,还多出了一种一幅牌三人大打,两家斗一家地主的玩法。 因为这种一幅牌的玩法玩起来显得比较方便,而且打起来比较快,因此比传统的四人斗地主更受欢迎,也流行开来。

教你成为斗地主的高手

1、将手上的牌打成单双不过(单双不过指人家不管打单还是双都是你大)。单双不过很重要,要多考虑。如对A、 2、单自己上手,如打对A,是错误的。应该打单,因为可排除对方用对2接打对A后全把对、连、三带打完。 2、K或Q + 一对先打K/Q报双(别人会误以为你会用2收回去,便会上2打对子,正好投起来);单2、对、单。别人打出比你单大的牌,则不用考虑马上用2打然后发单报双。 3、在地主上一家如双王没有走自己剩三张牌有一张2另外一对或两单,都应该先打2。(除非地主基本上没有过单牌才能发最小单)。 4、两个人配合时,只要算准自己手上能打完就自己打不要放任何人。如果自己拿到了炸弹且在地主下家,就要留一手小单、对。如果在地主上家就要留小对子,好在关键时候炸掉放牌。 5、打牌七分运气三分级别,斗的是心情注意观察打牌的人的心理变化,不要树敌,打牌不要太狂了。(有的人毕竟比较小心眼的,你打的太狂了或者言语伤人,说不定人家拿着好牌也不抓就要整你呢,明枪易挡,暗箭难防)。 6、被忽略的算牌关键:算准地主单牌过到几;地主下家单牌过到几;地主手上没有过的小对(地主手上有小对子没有过,那就可以报双(哪怕是在地主上一家)); 7、打牌要注意抢先上手,很多时候输赢就在于关键的一张牌。是哪张呢?(枪先上手指的就是你比别人先出那张2、也就是你手上多了一张单牌,但你不过单而打2,上手后改打对,如果你不先上2,人家上2就打完了,高手应该看的懂的:)), 8、拿到双王,牌不好时一定要拆开来打而且要拆的及时。建议决定拆王时,对方上2、不用考虑马上打大王,然后打一手别人要不起的关牌,然后再打对,这时别人多半会以为你会用一对收回去然后打完了所以他会浪费一大对封住你然后发单,那时你要停顿后过单、别人上2你如果还打不赢便停顿会后不要,多半别人还会发单来,那你就可能赢了。 9、地主手上无大牌,外面可能有炸弹时,要先打脱手牌手上打的越少越好,(但手上剩下的牌很小也可打偷跑牌,剩很长一串,一次跑掉)。 10、打牌不要情绪化,不要乱抓,打错了牌不要影响心情,后面好好打就行了。 11、做地主拿上牌来不要慌着出,看清了牌分析好了再出。 12、不到最后千万不要认输只要有一丝机会就要努力。 13、逗炸弹的打法:做地主,双王以走,自己上手后手上剩下22、单。外面还有牌没有出现(可能有炸弹),这个时候千万不要反应(不要停顿)直接出一张2报双,要是有炸弹,嘿嘿你会怎么样呢?肯定炸掉发单吧?出2观察别人的反应一般来说两家很快都pass了话那么就再出2,剩一张。这种方法很有用的哟,屡试屡爽。 14、暗示(停顿)的运用:如果不是地主,两家配合的时候,自己摸到了炸弹,在自己伙伴上手的时候可以比平时多停顿一些时间,特别是自己是地主下一家的时候,地主上家上手后,自己要停顿5--10秒(一般高手都会明白,不会把牌打完了);另外,如果不是地主,当地主打2你的同伙打小王,而大王又在你手上时,这时也要停顿几秒代表大王在你手上。做地主无王,其中一家走出一个小王,也可故意停顿,让他以为大王在你那点而不敢再放单。15、打牌的时候,地主还应该注意打牌的势头,也就是谁在使劲的打自己的牌,打的很猛就要在适当的时候敲死他。如地主走一张单,地主下家直接就走一个2,这个时候就要非常小心,代表他没有单牌,而且牌形很整,这个时候最好还是打死的好,如自己有对2一个大王,或者对2一个小王,就要用大/小王打他的2,不要给他可乘之机。如果是双王,自己的牌又不是很好,还是拆开打的好,如果自己牌好,那就不用管,在适当的时候把他炸掉就好了。 2、要牌的时候,最值得关注的是什么?无非就是头子和牌型了。 什么是头子?头子就是指大小王和四个2。这六张牌是很关键的,大多数情况下都得靠他们来占牌,多一张输,少一张赢,这些情况相信玩家都遇到过不少,所以头子的数量与此

[斗地主的游戏规则]斗地主的规则方法

[斗地主的游戏规则]斗地主的规则方法 斗地主比赛规则 1、该游戏由三人玩一副牌,地主为一方,其余两家为另一方,双方对战,先出完手中牌的一方胜。 2、一副牌54张,一人17张,留3张做底牌,在确定地主之前玩家不能看底牌。 3、叫牌按出牌的顺序轮流进行,每人只能叫一次。叫牌时可以叫“1分”,“2分”,“3分”,“不叫”。后叫牌者只能叫比前面玩家高的分或者不叫。叫牌结束后所叫分值最大的玩家为地主;如果有玩家叫“3分”则立即结束叫牌,该玩家为地主;如果都不叫,则重新发牌,重新叫牌。 4、第一轮叫牌的玩家抽签决定,以后每一轮首先叫牌的玩家按出牌顺序轮流担任。 5、将三张底牌交给地主,并亮出底牌让所有人都能看到。地主首先出牌,然后按逆时针顺序依次出牌,轮到用户跟牌时,用户可以选择“不出”或出比上一个玩家大的牌。某一玩家出完牌时结束本局。 6、牌型 火箭:即双王(大王和小王),最大的牌。 炸弹:四张同数值牌(如四个7)。 单牌:单个牌(如红桃5)。

对牌:数值相同的两张牌(如梅花4+方块4)。 三张牌:数值相同的三张牌(如三个j)。 三带一:数值相同的三张牌 + 一张单牌或一对牌。例如:333+6或444+99 单顺:五张或更多的连续单牌(如:45678或78910jq)。不包括2点和双王。 双顺:三对或更多的连续对牌(如:334455、7788991010jj)。不包括2点和双王。 三顺:二个或更多的连续三张牌(如:333444、555666777888)。不包括2点和双王。 飞机带翅膀:三顺+同数量的单牌(或同数量的对牌)。 如:444555+79 或333444555+7799jj 四带二:四张牌+两手牌。(注意:四带二不是炸弹)。 如:5555+3+8或4444+55+77。 7、牌型的大小 火箭最大,可以打任意其他的牌。 炸弹比火箭小,比其他牌大。都是炸弹时按牌的分值比大小。 除火箭和炸弹外,其他牌必须要牌型相同且总张数相同才能比大小。 单牌按分值比大小,依次是大王>小王>2>a>k>q>j>10>9>8>7>6>5>4>3,不分花色。 对牌、三张牌都按分值比大小。 顺牌按最大的一张牌的分值来比大小。 飞机带翅膀和四带二按其中的三顺和四张部分来比,带的牌

欢乐斗地主大赛活动方案定稿

Xx欢乐斗地主大赛活动方案 一、活动目的: 为方便xx休闲会所全体成员沟通认识,促进思想交流,加强团队意识,提高综合素质,丰富公司文化生活。特举办“沟通合作团结”主题斗地主比赛。 二、活动安排: 活动主题:欢乐斗地主礼赢不停——xx斗地主竞技赛 活动时间:5月1日13:00-17:30,五一节期间 活动地点:xxx 参与人员:会所内所有岗位新老员工 活动内容:邀请所有管理层及员工到现场打扑克“斗地主”, 同时当天,现场准备茶水、饮料、点心,提高全民参与性。 赛程安排: 【1】总经理致辞; 【2】抽签分组; 【3】斗地主比赛; 【4】颁奖; 【5】活动参与者合影。 工作人员安排: 负责人/主持人:xx 记分员/监督员/客服:xx 四、活动流程:

注:可根据活动人气现场调整活动时间及决赛时间,邀请若干专业裁判进行规则讲解及判定胜负。 三、比赛规则: 一)预选赛注意事项 比赛时间:下午13:30-14:00,共计30小时 比赛形式:以常规3人斗地主打法为准,打法见附件。 比赛规则: 每人预先发放30个虚拟筹码,每把以2个为基础开局; 地主输,需付另外两人每人2个;地主赢,另外两人需付地主每人2个。 有炸弹,一个翻一倍,需付4个,以此类推,上不封顶。 输赢界定: 比赛时间内,若一人输净筹码,则剩下两人按所剩筹码多的胜出; 比赛结束,三人均留有筹码,则以所剩最多筹码的人胜出。 若筹码数量相同则进入加时赛,每桌只能产生一名冠军,不设并列奖。 二)半决赛注意事项 比赛时间:下午14:10-14:40,共计30分钟 比赛形式:以常规3人斗地主打法为准,打法见附件。 比赛规则: 每人预先发放30个虚拟筹码,每把以2个为基础开局;

斗地主心算之基本技巧

斗地主心算之基本技巧 斗地主,地主上一家一定要顶牌,地主下家要跑牌,最最基本的方法是地主发单时,下家挨着过单,地主上家一定要顶大单,顶牌优先选择顺序是KAQ2J(也就是你的单牌中优先考虑的出牌顺序),地主上家如果没有单牌,拆开对子打(或是顶2)才是高手的思路,有时地主下家走了个10,地主上家都不要,这样打牌不死才怪,这是菜鸟爱犯的错误。 一般来说,地主输的情况70%以上都是由地主下家把牌打完的,地主上家顶大牌上手后改打对子,因为这样地主手中的单牌就没有过,但是有些菜鸟一改打对子就知道发小对子象对3呀对4呀,这样也是笨蛋行为,因为你打这么小的对子,地主手上的小对子就不用浪费他的大牌去上手后再走掉了,他的小对便直接就可以过了,这样打小对子就相当于帮助地主来打自己,所以正确的方法是打对7、8以上,而且如果有对7对8的话要先打对8,这样地主手上的小对和小单都没有过,地主下家用大对子上手后,地主下家手里有单牌一定要发单,地主上家再用大牌顶,如上手,再发对7,如不上手则可以浪费地主手上的大牌,这是最基本的一种斗地主的方法。(简称为顶大单,改方向打中对打发)。地主下家用对子接过来发单,当单牌也发完了便发小对子,这时地主上家应该注意卡住地主手上较小的对子。那么要是地主下家的对子不多或者不大,拼不过地主又该怎么样配合呢?地主发单,下家顺过,上家顶牌顶牌顺序(KAQ2J)如打了张K,

地主没有要,如果地主下家的对子不强,这个时候就该拆开对子拆开对A用A接过来,如果地主这时要了(也就浪费了他一张大牌)如果地主不要,再发手上的单,这样通过地主上家顶牌使得地主下家单牌过掉,而地主确没有过。这两种方法是斗赢地主必须学会的,两种方法要结合起来用。象地主走单,下家顺过,上家顶K,上手,如果下家有单A一定要接对方的K,不接的是菜鸟,因为地主上家任务是顶牌,别人顶起了你又不接,那就怎么也斗不赢了。地主上家怎么都要顶牌,除非自己手上的牌好的很,只需要过一两张,那么就可以尽管过,如地主3下家4则自己过6、7。这个时候地主的下家就该聪明点了,一般来说地主上家是高手又不顶牌,那么就只又一种可能,也就是地主上家的牌很好,所以当地主上家打了6或者7(小牌)时,地主过一张牌,这个时候地主下家都不该要牌,而因该让同伴过。 再说说打牌时应该算的牌,首先要算炸弹,不会那么傻吧?这个也记不住?自己拿上牌后看自己缺的牌,一般都只缺5张左右,在心里一直念着这些牌如357JQ(缺的牌),等别人出了自己缺的牌便排除,如别人走出34567那么自然可能的炸弹只会是JQ在心里默念着就行了,不用太费经历去思考,只要默念着就行了,简单塞(注意大小王,最容易成炸弹);其次要算大牌,本人一般都算(王2AK)只算到了K有时也只算到A(不算厉害),如果自己大牌多也可以多算点(更好算),这是算牌其中一种;(比如自己有对2那么有人出了个2,外面自然就只有个2,在别人走2的时候便在心里想还有一个2,并可以大致分析一下剩下的2大概在谁手里。)另外还又一种算法就是算

相关文档
最新文档