当前位置: 首页 > article >正文

斗地主小游戏练习

测试类

package com.itheima.demo4test;



public class Game {
    public static void main(String[] args) {
        //目标: 开发斗地主游戏
        // 1、准备牌,每张牌都是一个对象,所以需创建牌类
        // 2、需进入房间,所以需要创建房间类,房间也是对象
        Room r = new Room();
        r.start();
    }
}

牌类

package com.itheima.demo4test;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Card {
    private String size;
    private String color;
    private int num;

    @Override
    public String toString() {
        return size + " " + color;
    }
}

房间类 (重点)

package com.itheima.demo4test;

import java.util.*;

// shift+f6:批量重命名
public class Room {
    // 1、准备好54张牌,定义一个集合容器,用来存储54张牌
    private List<Card> allCards = new ArrayList<>();
    // 2、初始化54张牌
    {  //实例代码块
        // 3、准备点数
        String[] sizes = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        // 4、准备花色
        String[] colors = {"红心", "方片", "草花", "黑桃"};
        // 5、组合点数和花色成为牌对象,添加到集合中
        int num = 0;
        for (String size : sizes) {
            num++;
            for (String color : colors) {
                //6、创建牌对象,并添加到集合中
                allCards.add(new Card(size, color, num));
            }
        }
        //        allCards.add(new Card("", "小王"));
        //        allCards.add(new Card("", "大王"));
        Collections.addAll(allCards, new Card("", "小王", ++num), new Card("", "大王", ++num));
        System.out.println("新牌是:"+allCards);
    }

    public void start() {
        //8、洗牌,随机打乱集合中元素的顺序
        Collections.shuffle(allCards);
        System.out.println("洗牌后:"+allCards);

        //9、发牌:定义三个玩家,令狐冲=[],令狐白=[],令狐紫=[]
        Map<String, List<Card>> players = new HashMap<>();
        List<Card> lhc = new ArrayList<>();
        List<Card> lhb = new ArrayList<>();
        List<Card> lhz = new ArrayList<>();
        players.put("令狐冲", lhc);
        players.put("令狐白", lhb);
        players.put("令狐紫", lhz);

        //只发出51张牌,因为最后三张牌是底牌
        for (int i = 0; i < allCards.size() - 3; i++) {
            //获得当前遍历到的牌
            Card card = allCards.get(i);
            if (i < 51) {
                if (i % 3 == 0) {
                    //第一个人接牌
                    lhc.add(card);
                } else if (i % 3 == 1) {
                    //第二个人接牌
                    lhb.add(card);
                }else if(i % 3 == 2){
                    //第三个人接牌
                    lhz.add(card);
                }
            }
        }

        //10、拿最后三张牌: subList方法,获取集合中指定范围的子集合。包左不包右
        List<Card> lastCards = allCards.subList(51, 54);
        System.out.println("底牌是:"+lastCards);

        //抢地主: 把这个集合直接扔给玩家
        lhz.addAll(lastCards);

        //11、对牌 排序
        sortCards(lhc);
        sortCards(lhb);
        sortCards(lhz);



        //12、看牌,遍历Map集合
        for (Map.Entry<String, List<Card>> entry : players.entrySet()) {
            // 获取玩家名称,也就是键
            String name = entry.getKey();
            //获取玩家牌,也就是值
            List<Card> cards = entry.getValue();
            //遍历玩家牌
            System.out.println(name + "的牌是" + cards);
        }


    }

    private void sortCards(List<Card> cards) {
        //        Collections.sort(cards, new Comparator<Card>() {
        //            @Override
        //            public int compare(Card o1, Card o2) {
        //                return o2.getNum() - o1.getNum();
        //            }
        //        });
        Collections.sort(cards, ( o1,  o2) -> o2.getNum() - o1.getNum());
    }
}

http://www.kler.cn/a/533018.html

相关文章:

  • 蓝桥杯刷题DAY3:Horner 法则 前缀和+差分数组 贪心
  • 4 前端前置技术(上):AJAX技术(前端发送请求)
  • AnswerRocket:通过 AI 辅助简化分析
  • 框架与代码的形状
  • centos stream 9 安装 libstdc++-static静态库
  • Deep Crossing:深度交叉网络在推荐系统中的应用
  • 解决Mac安装软件的“已损坏,无法打开。 您应该将它移到废纸篓”问题
  • 基于微信小程序的绘画学习平台的设计与开发
  • LeetCode 1800. Maximum Ascending Subarray Sum
  • Ubuntu下Tkinter绑定数字小键盘上的回车键(PySide6类似)
  • 在C#中,什么是多态如何实现
  • 有限单元法的相关概念
  • 全栈开发:使用.NET Core WebAPI构建前后端分离的核心技巧(二)
  • 使用 Axios 获取用户数据并渲染——个人信息设置
  • Java BIO详解
  • Assembly语言的正则表达式
  • 【MySQL】常用语句
  • PHP安全防护:深度解析htmlspecialchars绕过与防御策略
  • 版本控制的重要性及 Git 入门
  • Linux iostat 命令使用详解
  • Linux 信号机制
  • 【Python深入浅出】Python 开启机器学习之旅:项目实战指南
  • 分库分表技术方案选型
  • Spring理论知识(Ⅴ)——Spring Web模块
  • java-(Oracle)-Oracle,plsqldev,Sql语法,Oracle函数
  • 2.4学习记录