扑克牌游戏(斗地主)
文章目录
- 扑克牌游戏(斗地主)
- 题目
- 公共类Commons
- 扑克牌类Puke
- 操作类Operation
- 玩牌者Player
- 测试类
- 运行截图
题目
题目:创建一幅扑克牌(含有大小王),里面实现洗牌,发牌功能,按照斗地主的方式发牌,有三个玩家(身份为两个农民和一个地主)
公共类Commons
1、新建一个公共类Commons,里面有两个静态数组变量
class Commons{//点色组public static String[] ranks={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};//花色组public static String[] suits={"方块","梅花","红桃","黑桃","王"};
}
扑克牌类Puke
2.新建一个扑克牌类Puke,有属性String rank,String suit
- rank表示一个数点,suit表示一个花色
- 提供get/set 构造方法
- 改写toString,输出一张扑克牌的信息如:方块A…大王
/*** Puke类*/
class Puke{private String rank;private String suit;public Puke(){}public Puke(String rank, String suit) {this.rank = rank;this.suit = suit;}public String getRank() {return rank;}public void setRank(String rank) {this.rank = rank;}public String getSuit() {return suit;}public void setSuit(String suit) {this.suit = suit;}@Overridepublic String toString() {return "Puke{" +this.suit+"-"+this.rank+"}";}
}
操作类Operation
3.新建一个操作类Operation
- a.有生成一副扑克牌的方法createPuke(),参数int cards,表示一副扑克的数量,返回生成好的一副牌
- b.有打乱牌的方法washPuke(),参数为一副牌Puke ps[],使用随机数对牌的顺序进行打乱
- c.有发牌的方法sendPuke(),参数Player p[],Puke u[]
- p为打牌人数组 u为一副牌,按照斗地主的方式进行发牌给3人,然后随机选取一位作为地主
- 把地主派给地主
/*** 操作类Operation*/
class Operation{public Puke[] createPuke(int cards){Puke[] ps=new Puke[cards];int k=0;for (int i=0;i<Commons.ranks.length;i++){String rank=Commons.ranks[i];//一个点色for(int j=0;j<Commons.suits.length-1;j++){String suits=Commons.suits[j];//一个花色//一个点色有4种花色ps[i*4+j]=new Puke(rank,suits);
// Puke p=new Puke();
// p.setRank(Commons.ranks[i]);
// p.setSuit(Commons.suits[j]);
// ps[k++]=p;}}//大小王独立设置if(cards==54){ps[52]=new Puke(Commons.suits[Commons.suits.length-1],"小");ps[53]=new Puke(Commons.suits[Commons.suits.length-1],"大");}//复杂的做法
// Puke p=new Puke();
// int len=Commons.suits.length;
// p.setSuit(Commons.suits[len-1]);
// p.setRank("小");
// ps[ps.length-2]=p;
// Puke p1=new Puke();
// p1.setSuit(Commons.suits[len-1]);
// p1.setRank("大");
// ps[ps.length-1]=p1;return ps;}//洗牌操作方法public void washPuke(Puke ps[]){Random r=new Random();for(int i=0;i<ps.length;i++){int Index=r.nextInt(ps.length-1);Puke temp=ps[Index];ps[Index]=ps[ps.length-1];ps[ps.length-1]=temp;}}//发牌操作方法public void sendPuke(Player p[],Puke u[]){int j=0;for(int i=2;i<u.length;i++){Puke k=u[i];Player pl=p[j++%3];pl.addPuke(k);
// j++;
// if(j==3){
// j=0;
// }}//用随机数来确定地主的身份Random r=new Random();int a=r.nextInt(p.length);p[a].setName(p[a].getName()+"地主");p[a].addPuke(u[0],u[1],u[2]);}
}
玩牌者Player
4.新建一个玩牌者Player ,属性有name,Puke ps[]
- name为称呼,ps为派到手上的牌
- get/set 构造方法,改为toString输出 如玩家-moumou,手上的牌:方块A,红桃2…
- a.有一个添加牌的方法addPuke(),参数是Puke …p,
/*** 玩家类*/
class Player {private String name;Puke ps[]=new Puke[0];public Player(){}public Player(String name, Puke[] ps) {this.name = name;this.ps = ps;}public Puke[] getPs() {return ps;}public void setPs(Puke[] ps) {this.ps = ps;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "\nPlayer{" +"玩家'" + name + '\'' +", 手上的牌" + Arrays.toString(ps) +'}';}//每个玩家手上加入牌的操作方法public void addPuke(Puke... p){if (this==null){this.ps=new Puke[0];}for(Puke pj:p){this.ps=Arrays.copyOf(this.ps,this.ps.length+1);this.ps[this.ps.length-1]=pj;}}
}
测试类
5.利用测试类生成3个玩家,且生成一副54张的牌,打乱派发给3个玩家,完成后,输出每一个玩家的信息
public class Exercise02 {public static void main(String[] args) {Operation ot=new Operation();Puke[] packs=ot.createPuke(54);ot.washPuke(packs);int i=1;for (Puke puke:packs){System.out.print(puke+(i++%10==0?"\n":","));}Player[] player=new Player[]{new Player("小明",new Puke[0]),new Player("小红",new Puke[0]),new Player("小蓝",new Puke[0])};ot.sendPuke(player,packs);for (Player player1:player){System.out.println(player1);}}
}
运行截图
有需要的小伙伴可以玩一下哦,欢迎留言交流