纸牌游戏(基于集合,和自定义排序实现)

寻找需要的类

1.房间类,用来控制游戏的开始

2.纸牌类,包含花色,大小,用来排序的value值。

流程:创建54张牌,51张随机发三个玩家(创建一个集合存牌),最后三张随机发个一个玩家当地主,创建排序方法对牌进行排序。

card类

复制代码
package com.jjt.game_an_li;

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

@Data
@NoArgsConstructor
@AllArgsConstructor
public class card {
    private String size;
    private String color;
    private int value;
    //重写打印方式
    @Override
    public String toString() {
        return  color + size;
    }
}

//运行的主函数

复制代码
package com.jjt.game_an_li;

public class an_li_dou_di_zhu {
    public static void main(String[] args) {
      //目标开发斗地主游戏
      //1.每张牌都是一个对象,定义牌类
        //游戏房间也是一个对象

        //三个玩家一个房间
        room_card room = new room_card();
        room.start();//启动房间
    }
}

房间类

复制代码
package com.jjt.game_an_li;

import java.util.*;
import java.util.stream.Collectors;

public class room_card {
    //启动游戏,准备54张牌,给房间使用
    //定义容器装牌
    private List<card> cards=new ArrayList<>();

 
    

}

初始化:我们需要准备54张牌,方法构造器,代码块

代码块初始化

复制代码
   //初始化54张排牌,(与创建对象时候一起调用,比构造器快)利用示例代码块,初始化
    {
        //准备点数
        String[] sizes={"3","4","5","6","7","8","9","10","J","Q","K","A","2",};
        //准备花色
        String[] colors={"♥","♠","♣","♦"};
        //准备牌
        //indexd代表牌的价值方便排序
        int index=1;
        for(String size:sizes)
        {
            for(String color:colors)
            {
                cards.add(new card(color,size,index));

            }
            index++;
        }
//        cards.add(new card("","大王"));
//        cards.add(new card("","小王"));

        //高级写法,Collections的方法
        Collections.addAll(cards, new card("","大王",index+2),new card("","小王",index+1));
    }

start开始方法

复制代码
public void start()
    {
        //打乱顺序
        Collections.shuffle(cards);
        System.out.println("洗牌后:"+cards);

        //发牌:定义三个玩家 令狐冲、令狐白、令狐黄,每个人都有17张牌,利用map容器
        Map<String,List<card>> players=new HashMap<>();
        List<card> player1=new ArrayList<>();
        players.put("令狐冲",player1);
        List<card> player2=new ArrayList<>();
        players.put("令狐白",player2);
        List<card> player3=new ArrayList<>();
        players.put("令狐黄",player3);
        //只发51张牌,剩余3张牌当底牌
        for(int i=0;i<cards.size();i++)
        {
            //随机发牌
            card card = cards.get(i);
            //发牌规则
            switch (i%3)
            {
                case 0:
                    player1.add(card);
                    break;
                case 1:
                    player2.add(card);
                    break;
                case 2:
                    player3.add(card);
                    break;
            }
            //
        }

        //拿三张底牌
        List<card> lastcards=cards.subList(cards.size()-3,cards.size());
        //三张底牌随机给一个玩家
        int index1=new Random().nextInt(3);
        switch (index1)
            {
                case 0:
                    player1.addAll(lastcards);
                    break;
                case 1:
                    player2.addAll(lastcards);
                    break;
                case 2:
                    player3.addAll(lastcards);
                    break;
            }
        //对排排序(实现类的自定义排序)
        //Collections自定义排序
        //写一个排序方法
        sortcard(player1);
        sortcard(player2);
        sortcard(player3);
        //使用Stream流对玩家List<card> player1=new ArrayList<>();的牌进行排序
        //排完序后需要返回集合利用collect,不建议,最好用Collectors。sort自定义排序



        //看牌遍历map集合
        for(Map.Entry<String,List<card>> entry:players.entrySet())
        {
            String name = entry.getKey();
            List<card> value = entry.getValue();
            System.out.println(name+"的牌:"+value);
        }

    }
    //牌排序方法
    public void sortcard(List<card> cards)
    {
        Collections.sort(cards, new Comparator<card>() {
            public int compare(card o1, card o2)
            {
               //牌里面有很多排序规则,不好写怎么办,重新写一个排序规则,给每个牌设置一个大小判断数字
                return o2.getValue()-o1.getValue();
            }
        });
    }
相关推荐
IT教程资源1 小时前
(免费分享)基于python的飞机大战游戏
python·游戏·pygame
2501_929382652 小时前
ES-DE 前端模拟器最新版 多模拟器游戏启动器 含游戏ROM整合包 最新版
大数据·elasticsearch·游戏
wanhengidc2 小时前
云手机ARM架构都具有哪些挑战
运维·服务器·安全·游戏·智能手机
金山电脑医生1 天前
植物大战僵尸融合版下载安装教程【PC/安卓/iOS 完整攻略 + 常见问题解决】
游戏·植物大战僵尸·植物大战僵尸融合版
Swift社区1 天前
LeetCode 390 消除游戏
算法·leetcode·游戏
AA陈超1 天前
虚幻引擎UE5专用服务器游戏开发-21 连招技能动画蒙太奇播放
c++·游戏·ue5·游戏引擎·虚幻
gopyer2 天前
180课时吃透Go语言游戏后端开发3:Go语言中其他常用的数据类型
开发语言·游戏·golang·游戏后端开发
wanhengidc2 天前
云手机和网盘之间的关系
网络·游戏·智能手机·架构·云计算
点金石游戏出海2 天前
每周资讯 | 腾讯《三角洲行动》周年庆登双榜TOP1;腾讯首款生活模拟游戏《粒粒的小人国》曝光
游戏·腾讯·网易·游戏资讯·米哈游·三角洲行动·星布谷地
高山有多高2 天前
C语言实战项目:贪吃蛇(2)
c语言·开发语言·数据结构·c++·算法·游戏·游戏设计