扑克牌游戏(斗地主)

news/2024/12/2 22:27:18/

扑克牌游戏(斗地主)

文章目录

    • 扑克牌游戏(斗地主)
  • 题目
    • 公共类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);}}
}

运行截图

在这里插入图片描述
有需要的小伙伴可以玩一下哦,欢迎留言交流


http://www.ppmy.cn/news/387944.html

相关文章

斗地主练习(按照斗地主的规则,完成洗牌发牌的动作。)

按照斗地主的规则&#xff0c;完成洗牌发牌的动作。 具体规则&#xff1a; 使用54张牌&#xff1b; 打乱顺序&#xff1b; 三个玩家参与游戏&#xff0c;三人交替摸牌&#xff0c;每人17张牌&#xff0c;最后三张留作底牌&#xff1b; 手中的牌按从小到大的顺序排列 import …

斗地主不算花色算大小王,起初发到的17张牌有多少种?

2015-02 初写 用动态规划算法来求&#xff0c;设 d p [ j ] dp[j] dp[j]表示选了 j j j张牌的种类数 起初 d p [ j ] 0 ( j > 0 ) &#xff0c; d p [ 0 ] 1 dp[j]0(j>0)&#xff0c;dp[0]1 dp[j]0(j>0)&#xff0c;dp[0]1 第一层枚举牌的种类 A − K A-K A−K&a…

实现斗地主发牌

斗地主 1、完成一个控制台程序 知识点&#xff1a; srand(time(NULL))&#xff1a;这是两个函数&#xff0c;一个是srand函数&#xff0c;这是在调用rand&#xff08;&#xff09;这个函数之前使用的&#xff0c;rand&#xff08;&#xff09;是一个产生随机数的函数&#x…

斗地主(^-^)发牌程序

有很多朋友斗想编一个自己的小游戏&#xff0c;今天我为大家带来的是&#xff0c;如何用java封装对象写斗地主的发牌程序。 首先我们知道一副牌一共有54张&#xff0c;其中大小王是特殊的没有4个花色&#xff0c;其余牌都是有是个花色的。 所以我们根据面向对象的思想&#x…

Qgis2threejs

three.js是JavaScript编写的一个开源的3D图形库&#xff0c;它可以用于创建各种各样的交互式3D应用程序和动画。该库提供了一系列的工具和功能&#xff0c;使得在Web浏览器中创建高质量的3D图形变得更加容易。 使用three.js&#xff0c;您可以轻松地创建3D场景&#xff0c;包括…

awk, sed, grep学习笔记

grep -v ^$ xx.txt 排除空行 egrep 或者 grep -E 是一个意思&#xff0c;都表示拓展正则 egrep -o [abc] xx.txt 其中-o表示只打印匹配到的内容 egrep -w abc xx.txt 单词模式&#xff0c;只匹配拥有完整单词的行 egrep -n abc xx.txt 匹配含有abc的行&#xff0c;-n…

I2C与I3C

Improved Inter Integrated Circuit &#xff0c;是 MIPI&#xff08;Mobile Industry Processor Interface&#xff09;移动产业处理器接口联盟推出的改进型 i2c (Inter-Integrated Circuit Bus)总线接口。 I3C Introduction I3C &#xff1a;Improved Inter Integrated Cir…

Web实验三 CSS基本网页布局实验

实验原理 通过定义css样式&#xff0c;理解css属性以及页面真整体结构布局的方法及设计思想。 实验目的 理解并掌握多种css选择器的使用方法 理解并掌握后代选择器的作用及使用设计方法 理解并掌握伪类的作用、意义及使用方法 理解并掌握基于div容器页面布局的方法 理解并掌握…