Java_17_斗地主游戏思想

斗地主游戏思想

创建新牌

要创建一个牌组数组

public class Cards {
    private String number;
    private String color;
    private int index;
    public Cards() {
    }
    public Cards(String number, String color, int index) {
        this.number = number;
        this.color = color;
        this.index = index;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public int getIndex() {
        return index;
    }
    public void setIndex(int index) {
        this.index = index;
    }
    public String toString() {
        return  number + color;
    }
}

牌组加入新牌

 public static List<Cards> All_Cards = new ArrayList<>();
    static{
        // 1.定义一个数组存储牌的点数,类型确定,个数确定请用数组存储!
        String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        // 2.定义一个数组存储牌的花色,类型确定,个数确定请用数组存储!
        int index = 0;
        String[] colors = { "♠", "♥", "♣", "♦" };
        for (String number : numbers) {
            for (String color : colors) {
                Cards card = new Cards(number,color,index ++);
                All_Cards.add(card);
            }
        }
        Collections.addAll(All_Cards,new Cards("","🃏",index ++),new Cards("","👲",index ++));
    }

洗牌

/*洗牌*/
        System.out.println("洗牌前" + All_Cards);
        Collections.shuffle(All_Cards);
        System.out.println("洗牌后" + All_Cards);

发牌

 /* 定义三个玩家*/
        List<Cards> zhangwuji = new ArrayList<>();
        List<Cards> zhaomin = new ArrayList<>();
        List<Cards> zhouzhiruo = new ArrayList<>();
        /*发牌*/
        for(int i = 0;i < All_Cards.size() - 3;i ++){
            Cards ca = All_Cards.get(i);
            switch (i % 3) {
                case 0 -> zhangwuji.add(ca);
                case 1 -> zhaomin.add(ca);
                case 2 -> zhouzhiruo.add(ca);
            }
        }

发牌排序

private static void sortCards(List<Cards> cards){
        cards.sort(Comparator.comparingInt(Cards::getIndex));
    }
/*对牌排序*/
        sortCards(zhangwuji);
        sortCards(zhouzhiruo);
        sortCards(zhaomin);

看牌

/*看牌*/
        System.out.println("张无忌" + zhangwuji);
        System.out.println("赵敏" + zhaomin);
        System.out.println("周芷若" + zhouzhiruo);
        List<Cards> LastCards = All_Cards.subList(All_Cards.size() - 3,All_Cards.size());
        System.out.println("底牌" + LastCards);

总体代码

牌组类

public class Cards {
    private String number;
    private String color;
    private int index;
    public Cards() {
    }
    public Cards(String number, String color, int index) {
        this.number = number;
        this.color = color;
        this.index = index;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public int getIndex() {
        return index;
    }
    public void setIndex(int index) {
        this.index = index;
    }
    public String toString() {
        return  number + color;
    }
}

牌的操作

public class Main_Demo {
    public static List<Cards> All_Cards = new ArrayList<>();
    static{
        // 1.定义一个数组存储牌的点数,类型确定,个数确定请用数组存储!
        String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        // 2.定义一个数组存储牌的花色,类型确定,个数确定请用数组存储!
        int index = 0;
        String[] colors = { "♠", "♥", "♣", "♦" };
        for (String number : numbers) {
            for (String color : colors) {
                Cards card = new Cards(number,color,index ++);
                All_Cards.add(card);
            }
        }
        Collections.addAll(All_Cards,new Cards("","🃏",index ++),new Cards("","👲",index ++));
    }
    //对分的牌排序   降序  "3","4","5","6","7","8","9","10","J","Q","K","A","2","🃏","👲"
    private static void sortCards(List<Cards> cards){
        cards.sort(Comparator.comparingInt(Cards::getIndex));
    }
    public static void main(String[] args){
        /*洗牌*/
        System.out.println("洗牌前" + All_Cards);
        Collections.shuffle(All_Cards);
        System.out.println("洗牌后" + All_Cards);
        /* 定义三个玩家*/
        List<Cards> zhangwuji = new ArrayList<>();
        List<Cards> zhaomin = new ArrayList<>();
        List<Cards> zhouzhiruo = new ArrayList<>();
        /*发牌*/
        for(int i = 0;i < All_Cards.size() - 3;i ++){
            Cards ca = All_Cards.get(i);
            switch (i % 3) {
                case 0 -> zhangwuji.add(ca);
                case 1 -> zhaomin.add(ca);
                case 2 -> zhouzhiruo.add(ca);
            }
        }
        /*对牌排序*/
        sortCards(zhangwuji);
        sortCards(zhouzhiruo);
        sortCards(zhaomin);
        /*看牌*/
        System.out.println("张无忌" + zhangwuji);
        System.out.println("赵敏" + zhaomin);
        System.out.println("周芷若" + zhouzhiruo);
        List<Cards> LastCards = All_Cards.subList(All_Cards.size() - 3,All_Cards.size());
        System.out.println("底牌" + LastCards);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
开发一个Java地主游戏需要掌握以下技术: 1. Java基础知识:了解Java基本语法和面向对象编程思想。 2. Swing界面开发:使用Swing组件进行游戏界面的设计和实现。 3. 面向对象设计思想和设计模式:使用面向对象的方式设计游戏逻辑,如牌局、玩家、出牌、抢地主等。 4. 网络编程:使用Socket或者Netty进行客户端和服务端之间的通信。 5. 多线程编程:使用多线程技术实现游戏逻辑,如自动出牌、倒计时等。 6. 数据库:使用数据库存储游戏数据,如玩家信息、战绩等。 下面是一个简单的地主游戏开发流程: 1. 设计游戏界面,包括玩家头像、手牌区域、出牌区域、底牌区域等。 2. 设计游戏逻辑,包括洗牌、发牌、抢地主、出牌等。 3. 实现游戏界面和逻辑之间的交互,如点击出牌按钮后,将出牌信息发送给服务端,由服务端进行判断。 4. 实现客户端和服务端之间的通信,如使用Socket或者Netty进行通信。 5. 实现自动出牌、倒计时等功能,使用多线程技术实现。 6. 使用数据库存储游戏数据,如玩家信息、战绩等。 在开发过程中需要注意以下问题: 1. 游戏逻辑需要仔细设计,考虑各种情况,如玩家出牌不符合规则等。 2. 网络通信需要考虑网络延迟和通信安全等问题。 3. 多线程编程需要注意线程安全问题,如使用同步锁等技术保证线程安全。 4. 数据库需要注意数据的一致性和安全性等问题。 以上是一个简单的Java地主游戏开发流程,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐鑫本鑫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值