Java集合案例:斗地主游戏开发

  • 斗地主游戏的开发
  • 业务需求分析
  • 业务:共有54张牌
  • 点数:“3”,“4”,“5”,“6”,“7”,“8”,“9”,“10”,“J”,“Q”,“K”,“A”,“2”
  • 花色:“♠”,“❤”,“♣”,“♦”
  • 大小王:“👲”,“🃏”
    *点数分别要组合成4种花色,大小王各一张
  • 斗地主:发出51张牌,剩下3张作为底牌

主程序

/**
 * 斗地主游戏的开发
 * 业务需求分析
 * 业务:共有54张牌
 * 点数:"3","4","5","6","7","8","9","10","J","Q","K","A","2"
 * 花色:"♠","❤","♣","♦"
 * 大小王:"👲","🃏"
 *点数分别要组合成4种花色,大小王各一张
 * 斗地主:发出51张牌,剩下3张作为底牌
 */
public class Gamedome {
    public static void main(String[] args) {
        //1.牌类
        //2.房间
        Room m = new Room();
        //3.启动游戏
        m.start();
    }
}

先创建一个牌类

public class Card {
    private String number;
    private String color;
    //每张牌是存在大小的
    private int size;//可以用0  1  2.......来比较大小

    public Card() {
    }

    public Card(String number, String color, int size) {
        this.number = number;
        this.color = color;
        this.size = size;
    }

    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 getSize() {
        return size;
    }

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

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

创建房间类

import java.util.*;

public class Room {
    //必须要有一副牌
    private List<Card> allCards =new ArrayList<>();

    public Room(){
        //1.做出54张牌,存入到集合allCards
        //a.点数:个数确定了,类型确定了
        String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        //b:花色
        String[] colors ={"♠","❤","♣","♦"};
        int size =0;//表示每张牌的大小
        //c.遍历点数,再遍历花色,组织牌
        for (String number : numbers) {
            //number = "3"
            size++;//没遍历一次 size+1,来控制大小
            for (String color : colors) {
                //得到一张牌
                Card c = new Card(number,color,size);
                allCards.add(c);//存入牌
            }
        }
        //单独存入小  大  王 ,先创建两个牌对象
        Card c1 = new Card("","🃏",++size);//小王
        Card c2 = new Card("","👲",++size);//大王
        Collections.addAll(allCards,c1,c2);//将牌放入集合中去
        System.out.println("新牌"+allCards);
    }

    //开始游戏
    public void start() {
        //1.洗牌
        Collections.shuffle(allCards);
        System.out.println("洗牌后"+ allCards);

        //2.发牌,首先要定义三个玩家 选用 List(ArrayList) 集合
        List<Card> L = new ArrayList<>();
        List<Card> C = new ArrayList<>();
        List<Card> T = new ArrayList<>();

        //3.正式发牌给三个玩家 ,依次发出51张牌,剩余三张要作为底牌
        for (int i = 0; i < allCards.size()-3; i++) {
                Card c = allCards.get(i);
                //判断发牌
            if (i % 3==0){
                //请L摸牌
                L.add(c);
            }else if (i % 3==1){
                //请C摸牌
                C.add(c);
            }else if (i % 3==2){
                //请T摸牌
                T.add(c);
            }
        }

        //3.对三个玩家的牌进行排序
        sortCards(L);
        sortCards(C);
        sortCards(T);
        //4.看牌
        System.out.println("L的牌"+L);
        System.out.println("C的牌"+C);
        System.out.println("T的牌"+T);
        List<Card> lastThreeCards = allCards.subList(allCards.size()-3,allCards.size());//51 52 53
        System.out.println("底牌" + lastThreeCards);
        C.addAll(lastThreeCards);
        sortCards(C);//抢到地主后还要再排序
        System.out.println("C抢到地主后"+ C);
        }

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


}


在这里插入图片描述

  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值