学Java第四十五天——斗地主小游戏创作

一、控制台版

1、游戏要求:

2、对三个人拿到牌进行排序之前的代码

java 复制代码
package com.doudizhu;

import java.util.ArrayList;
import java.util.Collections;

public class PokerGame {

    //1、准备牌
    static ArrayList<String> list=new ArrayList<>();//这是牌盒

    static{  //静态内部类,在多次创建该类的对象时,只执行一次因为它是静态的,只属于类的,所以只执行一次
        String [] color={"♦","♣","♥","♠"};
        String [] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

        for (String s : color) {
            for (String num : number) {
                list.add(s+num);  //
            }
        }

        list.add("大王");
        list.add("小王");

        //此时牌盒已经装满了牌
    }

    public PokerGame(){

        //2、洗牌
        Collections.shuffle(list);
        System.out.println(list);

        //3、发牌
        //要先设置四个集合(一个底牌和三个人)
        ArrayList<String> lord=new ArrayList<>();
        ArrayList<String> player1=new ArrayList<>();
        ArrayList<String> player2=new ArrayList<>();
        ArrayList<String> player3=new ArrayList<>();

        //因为要前三张牌作为底牌,所以要用到索引,此时只能  普通for循环
        for (int i = 0; i < list.size(); i++) {
            if(i<=2){
                lord.add(list.get(i));
                continue;//必须要写,不然的话,还要经历下面的发牌,因为,每次循环只把一张牌给某个人就完成任务了
            }

            if(i%3==0){
                player1.add(list.get(i));
            } else if (i%3==1) {
                player2.add(list.get(i));
            }else{
                player3.add(list.get(i));
            }
        }

        //4、看牌
        lookPoker("底牌",lord);
        lookPoker("钢脑壳",player1);
        lookPoker("大帅比",player2);
        lookPoker("蛋筒",player3);

    }

    public void lookPoker(String name,ArrayList<String> list){
        System.out.print(name+":");
        for (String s : list) {
            System.out.print(s+" ");
        }
        System.out.println();
    }
}

3、给每个玩家的牌进行排序

3.1、利用序号进行排序 ,由treeset实现排序

主要是找到对应关系,与是否排序无关。所以在牌盒中用hashmap,只要序号和牌一一对应就行了。treemap是每次添加元素的时候就会自动排序,存储是按顺序存储的。

java 复制代码
package com.斗地主2;

import java.security.PublicKey;
import java.util.*;

public class PokerGame {

    //1、准备牌
    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"};

        int serialNumber=1;
        for (String n : number) {
            for (String c : color) {
                hm.put(serialNumber,n+c);
                list.add(serialNumber);
                serialNumber++;
            }
        }

        hm.put(serialNumber,"小王");
        list.add(serialNumber);
        serialNumber++;
        hm.put(serialNumber,"大王");
        list.add(serialNumber);
    }




    public PokerGame(){

        //洗牌   hm只是一个存储对应关系的集合,真正操作的集合是list
        Collections.shuffle(list);
        System.out.println(list);

        //发牌   用treeset这样存储的时候就排序了,直接达到排序的效果
        TreeSet<Integer> lodr=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 serialNumber=list.get(i);
            if(i<=2){
                lodr.add(serialNumber);
                continue;
            }

            if(i%3==0){
                player1.add(serialNumber);
            } else if (i%3==1) {
                player2.add(serialNumber);

            }else{
                player3.add(serialNumber);
            }

        }
        //看牌
        lookPoker("底牌",lodr);
        lookPoker("钢脑壳",player1);
        lookPoker("大帅比",player2);
        lookPoker("蛋筒",player3);
    }
    public void lookPoker(String name,TreeSet<Integer> ts){
        System.out.print(name+":");
        for (Integer t : ts) {
            System.out.print(hm.get(t)+" ");
        }
        System.out.println();

    }

}

3.2、给每一张牌计算价值

java 复制代码
package com.斗地主3;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;

public class PokerGame {

    //准备牌
    //牌盒
    static ArrayList<String> list=new ArrayList<>();

    //创建一个map集合用来添加牌的价值
    static HashMap<String,Integer> hm=new HashMap<>();


    //在牌盒里面装牌
    static {
        String [] color={"♦","♣","♥","♠"};
        String [] number={"3","4","5","6","7","8","9","10","J","Q","K","A","2"};

        for (String s : color) {
            for (String num : number) {
                list.add(s+num);  //
            }
        }

        list.add("大大王");
        list.add("小小王");

        //指定牌的价值,牌上的数字到map集合中是否存在,存在,获取价值;不存在,本身的数字作为价值。
        hm.put("J",11);
        hm.put("Q",12);
        hm.put("K",13);
        hm.put("A",14);
        hm.put("小王",110);
        hm.put("大王",111);
    }

    public PokerGame(){


        //洗牌
        Collections.shuffle(list);
        System.out.println(list);


        //发牌
        //要先设置四个集合(一个底牌和三个人)
        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);
            }
        }


        //对每人手中的牌进行排序
        order(player1);
        order(player3);
        order(player2);

        //打印牌
        lookPoker("底牌",lord);
        lookPoker("钢脑壳",player1);
        lookPoker("大帅比",player2);
        lookPoker("蛋筒",player3);
    }
    //看牌
    public void lookPoker(String name,ArrayList<String> list){
        System.out.print(name+":");
        for (String s : list) {
            System.out.print(s+" ");
        }
        System.out.println();
    }


    //利用价值进行排序
    public void order(ArrayList<String> list){
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                //获取花形
                String color1=o1.substring(0,1);
                //获取价值
                int value1=getvalue(o1);

                String color2=o2.substring(0,1);

                int value2=getvalue(o2);


                //关键比较点,先比较价值,价值相同之后再比较花形
                int i=value1-value2;
               i= i==0? color1.compareTo(color2): i;
                return i;
            }
        });
    }

    public int getvalue(String poker){
        String number=poker.substring(1);
        if(hm.containsKey(number)){  //如果hm里面存在想要的价值
            return hm.get(number);
        }
        else{  //如果不存在,即数字3-10
            int value=Integer.parseInt(number);
            return  value;
        }

    }


}

输出:

java 复制代码
[♥4, ♣4, ♠2, ♦10, ♣5, ♦2, ♠7, ♣7, ♣J, ♦3, ♥3, ♥2, 小小王, ♦K, ♦Q, ♥8, ♠A, ♠K, ♥5, ♥Q, ♣2, ♣10, ♠J, ♦5, ♦9, ♣Q, ♥10, ♦J, ♦6, ♥J, ♠4, ♦8, ♥7, ♦A, ♦4, ♥6, ♣8, ♣3, 大大王, ♣A, ♣9, ♣K, ♠8, ♦7, ♠9, ♠Q, ♠10, ♥A, ♠5, ♣6, ♠6, ♥K, ♥9, ♠3]
底牌:♥4 ♣4 ♠2 
钢脑壳:♦3 ♠4 ♠5 ♥5 ♠7 ♠8 ♣8 ♥8 ♦9 ♣10 ♦10 ♦J ♠Q ♥K ♣A ♦A 小小王 
大帅比:♣3 ♥3 ♦4 ♣5 ♣6 ♦6 ♣7 ♦7 ♦8 ♣9 ♥9 ♠10 ♠J ♣Q ♥Q ♦K ♠A 
蛋筒:♣2 ♥2 ♦2 ♠3 ♦5 ♠6 ♥6 ♥7 ♠9 ♥10 ♣J ♥J ♦Q ♠K ♣K ♥A 大大王 

二、页面版斗地主

font是字体类,第一个参数是字体,null是默认字体 ;第二个style:0普通,1加粗,2斜体

Jbutton按钮 JTextField 文本框 Jlabel标签

学JavaWeb之后再学这个

相关推荐
czhc11400756632 小时前
Java1112 基类 c#vscode使用 程序结构
android·java·数据库
嫂子的姐夫2 小时前
23-MD5+DES+Webpack:考试宝
java·爬虫·python·webpack·node.js·逆向
缪懿2 小时前
JavaEE:多线程基础,多线程的创建和用法
java·开发语言·学习·java-ee
Chan162 小时前
Java 集合面试核心:ArrayList/LinkedList 底层数据结构,HashMap扩容机制详解
java·数据结构·spring boot·面试·intellij-idea
Boop_wu2 小时前
[Java EE] 多线程 -- 初阶(2)
java·开发语言·jvm
q***98522 小时前
Spring Boot(快速上手)
java·spring boot·后端
IT_Beijing_BIT2 小时前
Rust入门
开发语言·后端·rust
凌凌03 小时前
macOS安装SDKMAN
java
百***92023 小时前
Spring Boot 多数据源解决方案:dynamic-datasource-spring-boot-starter 的奥秘(上)
java·spring boot·后端