• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

奋斗的软件工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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

这个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();
  }
  
}

posted on 2024-02-02 21:39  周政然  阅读(33)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3