java实现斗地主发牌

说明

这是之前学习java时关于面向对象的一个实验,对面向对象思想的掌握有一定的帮助,刚好整理到了,就写出来。

斗地主发牌

要显示出底牌;以及同一轮中,当一张牌已经被发给第一个人时,再发牌给下一个人这张牌不可以再出现。

设计

首先考虑一个斗地主游戏中有什么对象,我认为斗地主中应该会有玩家,还有牌,另外还需要一个发牌的人,我比较懒,觉得玩家负责玩就好了,发牌,洗牌这种事就不自己动手了。所以分为Player,Dealer,Poker,另外还有一个主类,这里命名为Game。
直接看代码吧,代码中会有注释。

实验环境

JDKSE-1.8
eclipse2017

当时用的是JDK1.8版本,后来因为Android改用1.7版本了,相应的eclipse也不一样了。现在我又想把1.7卸了,下载1.8,但是不舍得动手,看看哪个节点能逼得我动手吧。

代码

首先看一下Poker类,可以看成就是一副扑克牌,那么扑克牌有什么,一副扑克牌当然有54张牌啦。本来花色是可以用图形显示的,但是因为我的eclipse没有设置好,所以花色会出现乱码,不过其他小伙伴还是可以试一下的。

package deal;

public class Poker {

   String[] numbers= {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};       //点数

   String[] colors= {"黑桃","红桃","方块","梅花"};                                     //花色

   String[] cards=new String[54];

   int[] array=new int[54];                                  //编号

   void setCards(String numbers[],String colors[],int array[])

   {

      for(int i=0;i

然后看看Dealer类,把这个类看成一个洗牌的人,那么首先他需要有一副牌,然后需要洗牌,发牌,所以具有3个方法。注意:我这里的洗牌不是把牌数组给打乱,当然数组有打乱以及排序的功能,但是当时我还没有学到这里,所以用到的知识都是最简单的知识,希望能帮助到入门的人。我洗牌的过程其实是给了每张牌一个编号,从1到54,然后把这个编号打乱,再通过编号来取牌。数组中就是用另一个数组存储每张牌的下标,然后打乱这个数组,再通过这个下标数组来取牌,就像我发牌时不从第一个开始发,而是随机从牌中间抽一张发一样。


package deal;

import java.util.*;

public class Dealer {

   int[] hand=new int[3];

   void shuffleCard(int array[])               //洗牌

   {

      int temp=0;

      int rd1,rd2;

      for(int i=0;i

下面就是玩家类了,这里只给玩家两个方法,就是排序还有显示自己的牌。牌发下来了,当然是先把牌排好了。所以玩家得到的牌应该只有17张,共3个玩家,还剩3张牌作为底牌。说一下,排序算法有很多,这里采用的是冒泡排序法,更多方法可以看一下这篇文章排序算法

package deal;


public class Player {

   int[] card=new int[17];

   void sortCards(int card[])                       //将牌排序

   {

      int temp;

      for(int i=0;icard[j+1])

           {

              temp=card[j];

              card[j]=card[j+1];

              card[j+1]=temp;

           }

        }

   }

   

   void showCards(int card[],String cards[])        
//将牌展示出来

   {

      for(int i=0;i

最后看一下主类,看在斗地主游戏中是怎么发牌的。

package deal;


public class Game {

   public static void main(String[] args) {

      // TODO 自动生成的方法存根

      Poker pk=new Poker();             //实例化一个Poker对象

      Player pl1,pl2,pl3;               //实例化3个Player对象

      pl1=new Player();

      pl2=new Player();

      pl3=new Player();

      Dealer de=new Dealer();          //实例化一个Dealer对象

      pk.setCards(pk.numbers, pk.colors,pk.array);        
//拿出一副扑克牌

      de.shuffleCard(pk.array);                            //发牌人洗牌

      de.sendCards(pk.array, pl1.card, pl2.card, pl3.card);  //发牌人发牌

      pl1.sortCards(pl1.card);                           //玩家1将牌排序

      pl2.sortCards(pl2.card);                           //玩家2将牌排序

      pl3.sortCards(pl3.card);                           //玩家3将牌排序

      System.out.println("\n玩家1的牌是:");

      pl1.showCards(pl1.card, pk.cards);

      System.out.println("\n玩家2的牌是:");

      pl2.showCards(pl2.card, pk.cards);

      System.out.println("\n玩家3的牌是:");

      pl3.showCards(pl3.card, pk.cards);

      System.out.println("\n底牌是:");

      de.showHand(de.hand, pk.cards);

   }

}

结果

java实现斗地主发牌_第1张图片
java实现斗地主发牌_第2张图片

你可能感兴趣的:(java)