综合项目-【斗地主】小游戏基于Java

前言

一、源头

        想玩斗地主但手边没有牌,怎么办,所以写个扑克牌吧。

二、设计思路

准备牌:花色与数字对应+大王小王

String[] color = {"♦", "♥", "♠", "♣"};
String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2",};
    static ArrayList<String> list = new ArrayList<>();
    String[] color = {"♦", "♥", "♠", "♣"};
    String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2",};
    list.add("大王");
    list.add("小王");

洗牌:随机排序

//洗牌
        Collections.shuffle(list);

发牌:底牌?玩家1?2?3?

//发牌
        ArrayList<String> lord = new ArrayList<>();
        ArrayList<String> player1 = new ArrayList<>();
        ArrayList<String> player2 = new ArrayList<>();
        ArrayList<String> player3 = new ArrayList<>();
        //遍历牌盒得到每一张牌
        for (int i = 0; i < list.size(); i++) {
            String poker = list.get(i);
            if (i <= 2) {
                lord.add(poker);
                continue;
            }
            if(i % 3 == 0){
                player1.add(poker);
            }else if(i % 3 == 1){
                player2.add(poker);
            }else{
                player3.add(poker);
            }
        }

看牌:遍历输出

//看牌
        lookPoker("底牌",lord);
        lookPoker("玩家1",player1);
        lookPoker("玩家2",player2);
        lookPoker("玩家3",player3);


    }
    public  void lookPoker(String name, TreeSet<Integer>treeS){
        System.out.print(name + ": ");
        for(int hsnumber : treeS){
            String poker = hm.get(hsnumber);
            System.out.print(poker + " ");
        }
        System.out.println(" ");
    }
}

排序:利用什么规则来排序?

static HashMap<Integer, String> hm = new HashMap<>();
int hsnumber = 1;
        for (String n : number) {
            //n表示数字
            for (String c : color) {
                //c表示花色
                list.add(hsnumber);
                hm.put(hsnumber, c + n);
                hsnumber++;
            }
        }
        hm.put(hsnumber, "小王");
        list.add(hsnumber);
        hsnumber++;
        hm.put(hsnumber, "大王");
        list.add(hsnumber);
    }

三、遇到的问题

不同的花色对应不同得牌大小,怎么来分辨呢。

        我们只需要把牌和序号产生对应关系就可以了,不需按照序号进行排序,所以只用HashMap就可以了。

四、完整代码

package doudizhu2;

import java.util.*;

/**
 * @author: liutao
 * @data 2024年06月21日 20:30
 */
public class Pokergame {
    static HashMap<Integer, String> hm = new HashMap<>();
    static ArrayList<Integer> list = new ArrayList<>();


    //准备牌
    //静态代码块,特点:随着类的加载而加载,并且只执行一次
    // 牌盒


    static {
        String[] color = {"♦", "♥", "♠", "♣"};
        String[] number = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2",};
//        {1=♦3, 2=♥3, 3=♠3, 4=♣3, 5=♦4, 6=♥4, 7=♠4, 8=♣4, 9=♦5, 10=♥5, 11=♠5, 12=♣5, 13=♦6, 14=♥6, 15=♠6, 16=♣6, 17=♦7, 18=♥7, 19=♠7,
//                20=♣7, 21=♦8, 22=♥8, 23=♠8, 24=♣8, 25=♦9, 26=♥9, 27=♠9, 28=♣9, 29=♦10, 30=♥10, 31=♠10, 32=♣10, 33=♦J, 34=♥J,
//                35=♠J, 36=♣J, 37=♦Q, 38=♥Q, 39=♠Q, 40=♣Q, 41=♦K, 42=♥K, 43=♠K, 44=♣K, 45=♦A, 46=♥A, 47=♠A, 48=♣A, 49=♦2, 50=♥2,
//                51=♠2, 52=♣2, 53=小王, 54=大王}


        int hsnumber = 1;
        for (String n : number) {
            //n表示数字
            for (String c : color) {
                //c表示花色
                list.add(hsnumber);
                hm.put(hsnumber, c + n);
                hsnumber++;
            }
        }
        hm.put(hsnumber, "小王");
        list.add(hsnumber);
        hsnumber++;
        hm.put(hsnumber, "大王");
        list.add(hsnumber);
    }

    //洗牌
    public Pokergame() {
        Collections.shuffle(list);


        //发牌
        TreeSet<Integer> lord = new TreeSet<>();
        TreeSet<Integer> player1 = new TreeSet<>();
        TreeSet<Integer> player2 = new TreeSet<>();
        TreeSet<Integer> player3 = new TreeSet<>();
        //遍历牌盒得到每一张牌

        for (int i = 0; i < list.size(); i++) {
            int a = list.get(i);
            if (i <= 2) {
                lord.add(a);
                continue;
            }
            if (i % 3 == 0) {
                player1.add(a);
            } else if (i % 3 == 1) {
                player2.add(a);

            } else {
                player3.add(a);
            }
        }

        //看牌
        lookPoker("底牌",lord);
        lookPoker("玩家1",player1);
        lookPoker("玩家2",player2);
        lookPoker("玩家3",player3);


    }
    public  void lookPoker(String name, TreeSet<Integer>treeS){
        System.out.print(name + ": ");
        for(int hsnumber : treeS){
            String poker = hm.get(hsnumber);
            System.out.print(poker + " ");
        }
        System.out.println(" ");
    }
}

五、运行结果


底牌: ♦5 ♥6 ♦10  
玩家1: ♥3 ♠3 ♣3 ♦4 ♠4 ♠6 ♥7 ♣7 ♥8 ♣10 ♣J ♣Q ♥K ♦A ♣A ♥2 ♣2  
玩家2: ♥4 ♣4 ♥5 ♠5 ♦7 ♠7 ♣8 ♦9 ♥9 ♠9 ♦Q ♦K ♠K ♣K ♥A ♦2 小王  
玩家3: ♦3 ♣5 ♦6 ♣6 ♦8 ♠8 ♣9 ♥10 ♠10 ♦J ♥J ♠J ♥Q ♠Q ♠A ♠2 大王  

Process finished with exit code 0

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
微信小游戏-地主是一款在微信平台上非常受欢迎的游戏,它结合了地主经典玩法和微信社交功能,让玩家可以与好友一起勇。 在开发这款游戏时,使用了Node.js作为服务器端的开发语言。Node.js是一个基于JavaScript运行时的平台,它可以使我们使用JavaScript编写服务器端应用程序。这样一来,我们在开发微信小游戏-地主时可以使用JavaScript作为统一的开发语言,既方便了前端开发,又方便了后端开发。 通过使用Node.js作为服务器端,我们可以实现以下功能: 1. 用户管理:服务器可以管理玩家的注册、登录、信息保存等操作。每个玩家可以通过微信登录游戏,并在服务器上保存他们的游戏数据和好友列表。 2. 匹配系统:服务器可以实现玩家之间的匹配。玩家可以选择与好友进行对战,也可以选择与随机玩家进行匹配。服务器会根据玩家的匹配方式进行配对,确保游戏的公平性。 3. 游戏逻辑:服务器可以实现地主游戏的核心逻辑。它可以管理玩家的手牌、出牌规则、出牌顺序等游戏细节。服务器会实时更新玩家的游戏状态,保证游戏的顺畅进行。 4. 实时通信:服务器可以实现玩家之间的实时通信。玩家可以通过服务器发送消息给对方,例如邀请好友进行游戏、发送表情等。服务器可以将这些消息及时传递给游戏中的玩家,保证玩家之间的互动性。 通过使用Node.js作为服务器端,我们可以构建一个稳定高效的微信小游戏-地主平台。玩家可以通过微信小程序平台轻松进入游戏,与好友一起畅玩地主,享受竞技乐趣。同时,服务器的管理功能还可以确保游戏的公平性和用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值