首页 > 其他分享 >单列集合综合案例-斗地主

单列集合综合案例-斗地主

时间:2024-02-02 21:44:38浏览次数:27  
标签:String 斗地主 单列 face 案例 suit cards public size

这个Java代码是实现了一个简单的扑克牌游戏逻辑框架,包括创建扑克牌类(Card)、房间类(Room)以及游戏主入口类(Game)。

Card 类:

Card 类代表一张扑克牌,包含三个属性:face(牌面,如"3", "K"等)、suit(花色,如♠, ♥等)和size(大小,用于排序或比较牌的大小)。
提供了相应的getter/setter方法来获取和设置这些属性值,并且提供了一些链式调用的方法(如face(String face)、suit(String suit)、size(int size)),这样可以连续设置属性后直接返回当前对象自身以支持更简洁的初始化方式。
toString() 方法重写为了显示牌的花色和牌面。

点击查看代码
package com.itcq.landlord_Fighting;
//扑克牌

public class Card {

  
  private String face; //牌面
  private String suit; //花色
  private int size;//大小



  public Card() {
  }

  public Card(String face, String suit, int size) {
    this.face = face;
    this.suit = suit;
    this.size = size;
  }

  public String getFace() {
    return this.face;
  }

  public void setFace(String face) {
    this.face = face;
  }

  public String getSuit() {
    return this.suit;
  }

  public void setSuit(String suit) {
    this.suit = suit;
  }

  public int getSize() {
    return this.size;
  }

  public void setSize(int size) {
    this.size = size;
  }

  public Card face(String face) {
    setFace(face);
    return this;
  }

  public Card suit(String suit) {
    setSuit(suit);
    return this;
  }

  public Card size(int size) {
    setSize(size);
    return this;
  }

  @Override
  public String toString() {
    return suit + face;
  }
  
  
}

Room 类:

Room 类代表一个游戏房间,主要负责处理一副牌的操作,包括生成扑克牌、洗牌、发牌、显示底牌及玩家手牌等。
在构造函数中初始化了一副完整的扑克牌(54张,含大小王),并使用了遍历数组的方式组合出所有可能的牌。
start() 方法执行游戏流程:首先洗牌,然后按顺序给三个玩家发牌,并留下三张作为底牌。最后对每个玩家的手牌按照牌的大小进行排序,并显示各玩家的手牌和底牌。

点击查看代码
package com.itcq.landlord_Fighting;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Room {
    List<Card> cards = new ArrayList<>();


    public Room() {
        initCards(cards);
    }

    private void initCards(List<Card> cards) {
        // "Queen", "King"
        //牌面值
        String[] faces = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};

        //花色
        String[] suits = {"♠", "♥", "♣", "♦"};

        //牌面值大小
        int size = 0;


        for (String face : faces) {
            for (String suit : suits) {
                Card card = new Card(suit, face, ++size);
                cards.add(card);
            }
        }


        //大小王单独添加
        Card queenCard = new Card("", "Queen", ++size);

        Card kingCard = new Card("", "King", ++size);


        Collections.addAll(cards, queenCard, kingCard);

        //一副新牌

        System.out.print("一副新牌:");
        traverseCards(cards);

    }

    public void start() {

        System.out.print("洗牌:");
        Collections.shuffle(cards);

        traverseCards(cards);

        //定义三个玩家
        List<Card> Tom = new ArrayList<>();
        List<Card> Jerry = new ArrayList<>();
        List<Card> Juddy = new ArrayList<>();

        //发牌
        for (int i = 0; i < cards.size() - 3; i++) {
            Card card = cards.get(i);
            if (i % 3 == 0)
                Tom.add(card);
            else if (i % 3 == 1)
                Jerry.add(card);
            else if(i%3==2)
                Juddy.add(card);
        }

        //底牌
        List<Card> lastCards = this.cards.subList(this.cards.size() - 3, this.cards.size());

        System.out.println("底牌:"+lastCards);

        //给牌排序
        sortCards(Tom);
        sortCards(Jerry);
        sortCards(Juddy);

        //看牌
        System.out.print("\nTom:");
        traverseCards(Tom);
        System.out.print("\nJerry");
        traverseCards(Jerry);
        System.out.print("\nJuddy");
        traverseCards(Juddy);
    }

    private void sortCards(List<Card> cards) {
        Collections.sort(cards, (o1, o2) -> o2.getSize()-o1.getSize());
    }

    private void traverseCards(List<Card> cards) {
        System.out.println(cards + "\n");
    }

    public Room(List<Card> cards) {
        this.cards = cards;
    }

    public List<Card> getCards() {
        return this.cards;
    }

    public void setCards(List<Card> cards) {
        this.cards = cards;
    }

    public Room cards(List<Card> cards) {
        setCards(cards);
        return this;
    }


}

Game 类:

Game 类包含了程序的主入口main方法,在这里创建了一个Room实例并启动游戏流程。
整体来看,这段代码实现了扑克牌游戏的基本元素构建与操作逻辑,但并未涵盖具体的游戏规则(比如斗地主的具体玩法)。它更多地展示了如何通过面向对象的方式来组织和管理游戏中的实体和行为,为后续实现具体的斗地主或其他扑克游戏奠定了基础结构。

点击查看代码
package com.itcq.landlord_Fighting;

public class Game {

  public static void main(String[] args) {
    Room room = new Room();

    room.start();
  }
  
}

标签:String,斗地主,单列,face,案例,suit,cards,public,size
From: https://www.cnblogs.com/itcq1024/p/18004077

相关文章

  • NLP自然语言处理—主题模型LDA案例:挖掘人民网留言板文本数据|附代码数据
    全文链接:http://tecdat.cn/?p=2155最近我们被客户要求撰写关于NLP自然语言处理的研究报告,包括一些图形和统计输出。随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带。领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的时......
  • 【数据库数据恢复】Oracle数据库ASM磁盘组掉线,ASM实例不能挂载的数据恢复案例
    oracle数据库故障&分析:oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。oracle数据库数据恢复过程:1、将oracle数据库所涉及磁盘以只读方式备份。后续的数据分析和数据恢复操作都基于镜像文件进行,避免对原始磁盘数据造成二次破坏。2、基于......
  • 前端必学-40个精选案例实战-案例5-首页单屏案例实战
    经典背景图文列表案例分析与思路图文背景如何设定<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport......
  • 智能制造-案例汇总
    小米北京智能工厂05绿色低碳智能能源管理建设智能厂务系统,将工厂内的空调、空气压缩机等机电系统全部接入工业数智平台,通过对能耗数据和环境数据进行分析挖掘,实现能耗优化和智能调度。创新做法不断突破、创新生产技术领先01工艺智能闭环调优技术针对制造工艺精细且机理复杂、工......
  • 华为WLAN FIT AC+AP 模式配置案例-1
    配置流程:1.带外管理配置:设备名称、http、ssh、ntp、snmp、dns、自动上传配置以备份等。2.vlan配置:业务vlan、AP管理vlan、vrrpvlan。3.网络配置:管理IP、hsbIP、上下联端口、路由。4.WLAN业务配置:ssid模板、认证模板、vap模板,AP上线5.认证配置:802.1x认证配置6.VRRP配置7.......
  • 阿里云参编业内首个代码大模型标准,通义灵码获 2023 AI4SE “银弹” 案例
    日前,中国人工智能产业发展联盟智能化软件工程工作组(AIforSoftwareEngineering,下文简称AI4SE)在京召开首届“AI4SE创新巡航”活动。阿里云作为AI4SE首批成员单位,与中国信息通信研究院等组织联合发起的《智能化软件工程技术和应用要求第一部分:代码大模型》(标准编号AIIA/PG0110......
  • Cesium - Entity 案例01
    constviewer=newCesium.Viewer("cesiumContainer");constblueBox=viewer.entities.add({name:"Bluebox",//位置:(经度,维度)position:Cesium.Cartesian3.fromDegrees(-114.0,40.0,300000.0),box:{//尺寸:长度、宽度和高度的属性。di......
  • 前端必学-40个精选案例实战-案例3-仿QQ邮箱登陆实战
    案例分析:QQ邮箱登录框分析与思路完成这样一个登陆的实现input标签input标签是网页中最常见的输入文字的标签input有很多种类型:例如:密码、文字、数字、颜色、复选等<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Comp......
  • 【独立开发案例分享】我们如何通过开源来获得流量增长?
    【案例背景】本案例的作者是【NevoDavid】,他目前在Novu公司负责业务增长。Novu本来是一家B2B的SaaS公司,但是创业初期,没有获得多少客户。后来,由于偶然的因素,他们打算把项目开源,发布到GitHub,然后,不可思议的事情发生了。他们项目在4天内,获得了2000个Star,并且一......
  • 前端必学-40个精选案例实战-案例4-仿B站导航条案例【基础样式】
    交互方式:CSS样式和HTML的交互方式CSS是控制html的,我们需要选中元素再进行控制CSS的常见使用方式分别是行间式、内嵌式与外链式<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE......