好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

java实现斗地主游戏

感想:

第一次写博客,感觉编辑器挺复杂厉害的,感觉自己的内容挺简单的。有什么问题请多多指教!

思路:

1、创建一个扑克牌的实体类poker,设置了四个参数:花色、数字、牌值(判断大小)、是否地主牌,实现getset方法和构造方法;
2、创建一个玩家的实体类player,设置了四个参数: 初始牌集合,排序后牌集合,牌值集合,是否地主,实现getset方法和构造方法;
3、洗牌:循环嵌套花色数组跟数字数组生成52个poker,手动加入大小王poker,放进map(int,poker)里面,利用collections.shuffle随机排序map的key,再根据key生成排序后的poker集合
4、发牌:生成3个玩家对象,拿到洗牌后的集合,前51张牌为玩家牌,后3张为地主牌,在51张牌中随机一张为地主牌,遍历玩家牌分配个每一个player,同时根据玩家牌的牌值生成集合grades存进player对象中,将grades转为int数组并进行升序排序,根据grade取得新poker集合分配给玩家。

poker类:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

package com测试数据pany;

 

public class poker {

   private string color;

   private string number;

   private int grade;

   boolean islandowners;

 

  public boolean islandowners() {

   return islandowners;

  }

 

  public void setlandowners( boolean landowners) {

   islandowners = landowners;

  }

 

  public int getgrade() {

   return grade;

  }

 

  public void setgrade( int grade) {

   this .grade = grade;

  }

 

  public string getcolor() {

   return color;

  }

 

  public void setcolor(string color) {

   this .color = color;

  }

 

  public string getnumber() {

   return number;

  }

 

  public void setnumber(string number) {

   this .number = number;

  }

 

  public poker() {

  }

 

  public poker(string color, string number , int grade, boolean islandowners) {

   this .color = color;

   this .number = number;

   this .grade=grade;

   this .islandowners=islandowners;

  }

 

 

  public string tostring() {

   return this .getcolor()+ this .getnumber();

  }

}

player类:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

package com测试数据pany;

 

import java.util.arraylist;

import java.util.linkedlist;

 

public class player {

  private arraylist<poker> pokers;

  private boolean islandower;

  private arraylist<poker> newpokers;

  private linkedlist<integer> grades;

 

  public linkedlist<integer> getgrades() {

   return grades;

  }

 

  public void setgrades(linkedlist<integer> grades) {

   this .grades = grades;

  }

 

  public arraylist<poker> getnewpokers() {

   return newpokers;

  }

 

  public void setnewpokers(arraylist<poker> newpokers) {

   this .newpokers = newpokers;

  }

 

  public boolean islandower() {

   return islandower;

  }

 

  public void setlandower( boolean landower) {

   islandower = landower;

  }

 

  public player() {

  }

 

  public arraylist<poker> getpokers() {

   return pokers;

  }

 

  public void setpokers(arraylist<poker> pokers) {

   this .pokers = pokers;

  }

}

洗牌:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

/*洗牌*/

  public static linkedlist<poker> getpokerlist() {

   linkedlist<poker> pokers = new linkedlist<poker>();

   linkedlist<poker> newpokers = new linkedlist<poker>();

   arraylist<integer> arraylist = new arraylist<>();

   int[] arr;

 

   /*生成54张扑克牌(poker对象)*/

   /*用嵌套循环生成从方块3到黑桃2的poker对象,放进poker的linkedlist保证顺序*/

   string[] colors = {"♦", "♣", "♥", "♠"};

   string[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "j", "q", "k", "a", "2"};

   for (int i = 0; i < numbers.length; i++) {

    for (int j = 0; j < colors.length; j++) {

     poker p = new poker(colors[j], numbers[i], (4 * i) + j + 1, false);

     pokers.add(p);

    }

   }

   /*添加大小王*/

   pokers.add(new poker("black", "☆", 53, false));

   pokers.add(new poker("red", "☆", 54, false));

 

   /*将生成的54张扑克牌从1到54放进map*/

   for (int z = 1; z <= pokers.size(); z++) {

    map.put(z, pokers.get(z - 1));

   }

   /*遍历map,将每个poker对应的key放进 arraylist<integer> arraylist */

   set<map.entry<integer, poker>> set = map.entryset();

   iterator it = set.iterator();

   while (it.hasnext()) {

    map.entry<integer, poker> e = (map.entry<integer, poker>) it.next();

    arraylist.add(e.getkey());

   }

   /*利用collections.shuffle随机排序key*/

   collections.shuffle(arraylist);

   /*将乱序后的key对于的poker放进newpokers里面 */

   for (integer i : arraylist) {

    newpokers.add(map.get(i));

   }

 

   return newpokers;

  }

发牌:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

/*发牌*/

  /*根据玩家人数生成player,默认num=3*/

  private static void sentpoker(int num) {

   /*获取洗牌后的linkedlist,保证顺序*/

   linkedlist<poker> allpokers = getpokerlist();

   arraylist<poker> pokers = new arraylist<>();

   arraylist<poker> bottompokers = new arraylist<>();

 

   /*生成玩家对象*/

   for (int i = 0; i < num; i++) {

    player p = new player();

    players.add(p);

   }

   /*前50张牌为玩家牌,后三张为底牌*/

   for (int p = 0; p < allpokers.size(); p++) {

    if (p <= 50) {

     pokers.add(allpokers.get(p));

    } else {

     bottompokers.add(allpokers.get(p));

    }

   }

   /*玩家牌中随机一张为地主牌*/

   random rand = new random();

   int s = rand.nextint(51);

   pokers.get(s).setlandowners(true);

   system.out.println("地主牌: " + pokers.get(s));

 

   /*根据num生成player对象*/

   for (int j = 0; j < num; j++) {

    /*玩家的牌值集合*/

    linkedlist<integer> grades = new linkedlist<>();

    /*玩家的手牌集合*/

    arraylist<poker> playerpokers = new arraylist<poker>();

 

    /*根据玩家个数分配玩家牌*/

    for (int z = j; z < pokers.size(); z = z + num) {

     playerpokers.add(pokers.get(z));

     grades.add(pokers.get(z).getgrade());

     players.get(j).setpokers(playerpokers);

     players.get(j).setgrades(grades);

    }

    /*根据玩家牌中的地主牌设置玩家是否地主*/

    for (poker p : players.get(j).getpokers()) {

     if (p.islandowners() == true) {

      players.get(j).setlandower(true);

     }

    }

    /*根据玩家的牌值集合生成数组*/

    integer[] gs = new integer[players.get(j).getgrades().size()];

    grades.toarray(gs);

    /*排序数组,由低到高*/

    arrays.sort(gs);

 

    /*排序后的玩家牌*/

    arraylist<poker> newpokers = new arraylist<>();

    for ( int g = 0 ; g < gs.length; g++) {

     poker p = map.get(gs[g]);

     newpokers.add(p);

    }

    players.get(j).setnewpokers(newpokers);

    system.out.println( "玩家" + (j + 1 ) + ": " + players.get(j).getnewpokers() + " 是否地主:" + players.get(j).islandower());

   }

 

   system.out.print( "底牌为: " );

   for (poker p : bottompokers) {

    system.out.print(p + " " );

   }

  }

效果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:https://blog.csdn.net/zzm0707/article/details/83540242

查看更多关于java实现斗地主游戏的详细内容...

  阅读:16次