好得很程序员自学网

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

Java实现斗地主的发牌功能

斗地主是全国范围内的一种桌面游戏,尽管全国各种类型,但大同小异,今天我们先来实现一下斗地主中的发牌功能,为了程序的可读性以及可拓展性,此次我们使用面向对象的方法来实现此功能。

首先,斗地主要求有扑克和玩家才能开始游戏,所以这里我们首先要创建一个扑克牌实体类和一个玩家实体类,具体代码如下:

首先是Poker类,含点数,花色和排序属性,大小王之后额外添加,这里我们必须实现一个Comparable接口,方便之后进行排序:

?

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

public class Poker implements Comparable<Poker>{

 

  private String flower;

  private String pointer;

  private int sort;

 

  public Poker() {

 

  }

 

  public Poker(String flower, String pointer, int sort) {

   super ();

   this .flower = flower;

   this .pointer = pointer;

   this .sort = sort;

  }

 

  public String getFlower() {

   return flower;

  }

 

  public void setFlower(String flower) {

   this .flower = flower;

  }

 

  public String getPointer() {

   return pointer;

  }

 

  public void setPointer(String pointer) {

   this .pointer = pointer;

  }

 

  public int getSort() {

   return sort;

  }

 

  public void setSort( int sort) {

   this .sort = sort;

  }

 

  @Override

  public String toString() {

   return flower + "-" + pointer;

  }

 

  @Override

  public int compareTo(Poker a) {

   return this .getSort() - a.getSort();

  }

 

}

然后就是Player类,这里我们定义属性有id,玩家名字以及玩家手牌和是否地主:

?

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

import java.util.ArrayList;

 

public class Player {

 

  private int id;

  private String name;

  private ArrayList<Poker> pokers = new ArrayList<>();

  private boolean boss;

  public Player() {

 

  }

  public Player( int id, String name) {

   super ();

   this .id = id;

   this .name = name;

  }

  public int getId() {

   return id;

  }

  public void setId( int id) {

   this .id = id;

  }

  public String getName() {

   return name;

  }

  public void setName(String name) {

   this .name = name;

  }

  public ArrayList<Poker> getPokers() {

   return pokers;

  }

  public void setPokers(ArrayList<Poker> pokers) {

   this .pokers = pokers;

  }

  public boolean isBoss() {

   return boss;

  }

  public void setBoss( boolean boss) {

   this .boss = boss;

  }

 

}

实体类建完之后,我们就要开始实现功能了,首先我们将要实现的功能简单叙述一下,首先我们要求有一副54张的完整牌,然后洗牌(此处我们用Collections里的静态shuffle方法实现),然后开始按洗好的牌发牌51张,发完随机地主,将剩余的三张牌给地主,并将三名玩家的牌均按大小显示出来。

?

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

69

70

71

72

73

74

75

76

77

78

79

80

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Collections;

import java.util.List;

import java.util.Random;

 

 

public class PokerGame {

 

  /**定义为静态以简化代码量*/

  static List<Player> players;

  static ArrayList<Poker> list = new ArrayList<>();

  static String[] flowers = { "梅花" , "黑桃" , "方块" , "红桃" };

  static String[] pointers = { "3" , "4" , "5" , "6" , "7" , "8" , "9" , "10" , "J" , "Q" , "K" , "A" , "2" };

  int bossIndex;

 

  static {

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

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

     Poker p = new Poker(flowers[i],pointers[j],j);

     list.add(p);

    }

   }

   list.add( new Poker( "小" , "王" , 13 ));

   list.add( new Poker( "大" , "王" , 14 ));

  

   players = Arrays.asList(

     new Player( 1 , "胡灿" ),

     new Player( 2 , "戴豪杰" ),

     new Player( 3 , "马涛" )

     );

  }

 

  /**随机地主*/

  public void pushBoss(){

   /**随机一个索引,随到的为地主*/

   Random r = new Random();

   bossIndex = r.nextInt(players.size());

   players.get(bossIndex).setBoss( true );

  }

 

  /**洗牌功能*/

  public void XiPai(){

   /**用Collections中的一个静态方法实现随机顺序集合*/

   Collections.shuffle(list);

  }

 

  /**发牌功能*/

  public void FaPai(){

   /**每次按顺序给每人发一张牌直到51张牌发完*/

   for ( int i = 0 ;i < 51 ;i+= 3 ){

    players.get( 0 ).getPokers().add(list.get(i));

    players.get( 1 ).getPokers().add(list.get(i+ 1 ));

    players.get( 2 ).getPokers().add(list.get(i+ 2 ));

   }

   /**将剩余的三张牌发给地主*/

   for ( int j = 51 ;j < 54 ;j++){

    players.get(bossIndex).getPokers().add(list.get(j));

   }

  }

 

  /**排序功能*/

  public void PaiXu(){

   /**用Collections的sort方法实现排序功能*/

   Collections.sort(players.get( 0 ).getPokers());

   Collections.sort(players.get( 1 ).getPokers());

   Collections.sort(players.get( 2 ).getPokers());

  }

 

  /**开始游戏*/

  public void start(){

   pushBoss();

   XiPai();

   FaPai();

   PaiXu();

   for (Player p:players){

    System.out.println(p.getPokers());

   }

  }

}

下面我们来看看具体实现:

?

1

2

3

4

5

6

7

public class Test {

 

  public static void main(String[] args) {

   new PokerGame().start();

  }

 

}

结果如下:

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

原文链接:https://blog.csdn.net/weixin_45416065/article/details/97431378

查看更多关于Java实现斗地主的发牌功能的详细内容...

  阅读:15次