首页 > 其他分享 >综合项目(斗地主)

综合项目(斗地主)

时间:2024-04-09 22:58:16浏览次数:25  
标签:String 项目 ArrayList 斗地主 al hm new public 综合

一:斗地主游戏(控制台)

完成斗地主游戏中的以下步骤:

1.准备牌

2.洗牌

3.发牌

PokerGame:

import java.text.CollationElementIterator;
import java.util.ArrayList;
import java.util.Collections;

public class PokerGame {
    //准备一副扑克牌
    //静态代码块,特点:随着类的加载而加载,而且只执行一次
    static ArrayList<String> card = new ArrayList<>();

    static {
        String[] color = {"♦", "♣", "♥", "♠"};
        String[] number = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        for (String c : color) {
            for (String n : number) {
                card.add(c + n);
            }
        }
        card.add("JOKER");
        card.add("BLACKJOKER");
    }

    public PokerGame() {
        //洗牌
        Collections.shuffle(card);
        //发牌
        //发给三名玩家的牌
        ArrayList<String> player1 = new ArrayList<>();
        ArrayList<String> player2 = new ArrayList<>();
        ArrayList<String> player3 = new ArrayList<>();
        //地主的三张盖卡
        ArrayList<String> hidecard = new ArrayList<>();
        for (int i = 0; i < card.size(); i++) {
            String getcard = card.get(i);
            if (i <= 2) {
                hidecard.add(getcard);
                continue;
            }
            if (i % 3 == 0) {
                player1.add(getcard);
            }
            if (i % 3 == 1) {
                player2.add(getcard);
            }
            if (i % 3 == 2) {
                player3.add(getcard);
            }
        }
        //看牌
        mycard("hidecard", hidecard);
        mycard("A", player1);
        mycard("B", player2);
        mycard("C", player3);
    }

    //identify:玩家的身份
    //al:每个玩家的牌
    public void mycard(String identify, ArrayList<String> al) {
        System.out.print(identify + ":");
        for (String takencard : al) {
            System.out.print(takencard + " ");
        }
        System.out.println();
    }
}

IntegratedProject:

public class IntegratedProject {
    public static void main(String[] args) {
        new PokerGame();
    }
}

二:斗地主游戏(控制台)

完成斗地主游戏中的以下步骤:

1.准备牌

2.洗牌

3.发牌

4.给牌进行排序

方式一:利用序号进行排序

利用了对应思想——

(1).如果原始数据的规律非常复杂,我们可以先手动排序让每一个数据跟唯一的序号产生对应关系

(2).序号就是数字,规律非常简单,后续的所有操作我们都以序号为准

(3).当真正需要操作原始数据的时候,再通过序号找到原始数据

PokerGame:

import java.text.CollationElementIterator;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;

public class PokerGame {
    //创建一个牌盒
    //作用是把牌和序号联系起来,用序号的方式指代牌
    static HashMap<Integer, String> hm = new HashMap<>();
    static ArrayList<Integer> al = new ArrayList<>();

    //准备一副扑克牌
    //静态代码块,特点:随着类的加载而加载,而且只执行一次
    static {
        String[] color = {"♦", "♣", "♥", "♠"};
        String[] number = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        //表示每张牌大小关系和花色的序号(建议打印一下hm便于理解)
        int serialnumber = 1;
        for (String n : number) {
            for (String c : color) {
                hm.put(serialnumber, c + n);
                al.add(serialnumber);
                serialnumber++;
            }
        }
        hm.put(serialnumber, "BLACKJOKER");
        al.add(serialnumber);
        serialnumber++;
        hm.put(serialnumber, "JOKER");
        al.add(serialnumber);
    }

    public PokerGame() {
        Collections.shuffle(al);
        //TreeSet内有默认的排序方式——从小到大排列,不用我们额外写排序的代码了
        TreeSet<Integer> hidecard = new TreeSet<>();
        TreeSet<Integer> player1 = new TreeSet<>();
        TreeSet<Integer> player2 = new TreeSet<>();
        TreeSet<Integer> player3 = new TreeSet<>();
        for (int i = 0; i < al.size(); i++) {
            int number = al.get(i);
            if (i <= 2) {
                hidecard.add(number);
                continue;
            }
            if (i % 3 == 0) {
                player1.add(number);
            }
            if (i % 3 == 1) {
                player2.add(number);
            }
            if (i % 3 == 2) {
                player3.add(number);
            }
        }
        mycard("hidecard", hidecard);
        mycard("player1", player1);
        mycard("player2", player2);
        mycard("player3", player3);
    }

    public void mycard(String identify, TreeSet<Integer> ts) {
        System.out.print(identify + ":");
        for (Integer i : ts) {
            String card = hm.get(i);
            System.out.print(card + " ");
        }
        System.out.println();
    }
}

IntegratedProject:

public class IntegratedProject {
    public static void main(String[] args) {
        new PokerGame();
    }
}

方式二:给每一张牌计算价值

PokerGame:

import java.text.CollationElementIterator;
import java.util.*;

public class PokerGame {
    //牌盒
    static ArrayList<String> al = new ArrayList<>();
    //创建有关牌的价值的一个集合
    static HashMap<String, Integer> hm = new HashMap<>();

    //准备一副扑克牌
    //静态代码块,特点:随着类的加载而加载,而且只执行一次
    static {
        String[] color = {"♦", "♣", "♥", "♠"};
        String[] number = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        for (String c : color) {
            for (String n : number) {
                al.add(c + n);
            }
        }
        //在JOKER和BLACKJOKER前面添加了一个空格,为的是让它和其他的牌的格式保持一致,因为其他的牌分为两个部分——花色和字符
        //而在下方的排序中也是将这两个部分截取之后分开比较其价值,然后再进行排序的
        //所以需要在这两张牌前面添加一个空格以保证截取时获得两个部分
        //空格部分对应其他种类的牌上的花色,而后面的JOKER和BLACKJOKER部分对应的是其他种类的牌上的字符
        //如果不这样做的话会出现一个问题:截取之后在HashMap中找不到JOKER和BLACKJOKER所对应的价值(因为被截取成了OKER和LACKJOKER)
        //然后就会进行下方的Integer强转,但是这两个又是字符型的数据,因而报错
        al.add(" JOKER");
        al.add(" BLACKJOKER");

        //没有记录数字牌对应的价值,那么当出现数字牌时所要做的第一件事就是拿着牌上的数字到Map集合中判断是否存在
        //若存在,则获取其价值,若不存在,那么数字牌上的数字就是它的价值
        //这样的设计是为了优化效率
        hm.put("J", 11);
        hm.put("Q", 12);
        hm.put("K", 13);
        hm.put("A", 14);
        hm.put("2", 15);
        hm.put("JOKER", 16);
        hm.put("BLACKJOKER", 17);
    }

    public void mycard(String identify, ArrayList<String> arrayList) {
        System.out.print(identify + ":");
        for (int i = 0; i < arrayList.size(); i++) {
            String card = arrayList.get(i);
            System.out.print(card + " ");
        }
        System.out.println();
    }

    public PokerGame() {
        Collections.shuffle(al);
        ArrayList<String> hidecard = new ArrayList<>();
        ArrayList<String> player1 = new ArrayList<>();
        ArrayList<String> player2 = new ArrayList<>();
        ArrayList<String> player3 = new ArrayList<>();
        for (int i = 0; i < al.size(); i++) {
            String card = al.get(i);
            if (i <= 2) {
                hidecard.add(card);
            }
            if (i % 3 == 0) {
                player1.add(card);
            }
            if (i % 3 == 1) {
                player2.add(card);
            }
            if (i % 3 == 2) {
                player3.add(card);
            }
        }
        valuesort(hidecard);
        valuesort(player1);
        valuesort(player2);
        valuesort(player3);

        mycard("hidecard", hidecard);
        mycard("player1", player1);
        mycard("player2", player2);
        mycard("player3", player3);
    }

    public void valuesort(ArrayList<String> arrayList) {
        //如果只是调用sort方法而没有自己设置排序的条件的话就会按照默认方式排序,而默认方式排序根本达不到我们想要的结果
        //sort方法使用了插入排序+二分查找的方式
        //o1:表示当前要插入到有序序列中的牌
        //o2:表示已经存在于有序序列中的牌
        Collections.sort(arrayList, 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;
                return i == 0 ? color1.compareTo(color2) : i;
            }
        });
    }

    public int getvalue(String card) {
        String number = card.substring(1);
        //如果号码存在于HashSet的价值对应表中,则直接获取其中的价值
        //如果不存在,则把号码强制类型转换为Integer型,并作为价值返回
        if (hm.containsKey(number)) {
            return hm.get(number);
        } else {
            return Integer.parseInt(number);
        }
    }
}

IntegratedProject:

public class IntegratedProject {
    public static void main(String[] args) {
        new PokerGame();
    }
}

三:斗地主游戏(页面版)

标签:String,项目,ArrayList,斗地主,al,hm,new,public,综合
From: https://blog.csdn.net/NaZiMeKiY/article/details/137196237

相关文章

  • 纯C语言手搓GPT-2,前OpenAI、特斯拉高管新项目火了
    众所周知,大语言模型还在快速发展,应该有很多可以优化的地方。我用纯C语言来写,是不是能优化一大截?也许很多人开过这样的脑洞,现在有大佬实现了。今天凌晨,前特斯拉Autopilot负责人、OpenAI科学家AndrejKarpathy发布了一个仅用1000行代码即可在CPU/fp32上实现GPT-2......
  • 碳交易机制下考虑需求响应的综合能源系统优化运行
    综合能源系统是实现“双碳”目标的有效途径,为进一步挖掘其需求侧可调节潜力对碳减排的作用,提出了一种碳交易机制下考虑需求响应的综合能源系统优化运行模型。首先,根据负荷响应特性将需求响应分为价格型和替代型2类,分别建立了基于价格弹性矩阵的价格型需求响应模型,及考虑用......
  • 【文章复现】含电转气和碳捕集耦合的综合能源系统多时间尺度优化调度
    为提升综合能源系统(integratedenergysystem,IES)的可再生能源消纳以及低碳经济效益的问题,本文提出含电转气(power-to-gas,P2G)和碳捕集(carboncapturesystem,CCS)耦合的综合能源系统多时间尺度优化调度模型。首先,建立基于阶梯型碳交易机制的含P2G和CCS耦合模型,并构建多......
  • python毕业设计项目源码
    收集整理了20个常见的python系统设计源码。可以用于课程作业或者毕业设计。所有系统都带源码和文档。感谢。1.基于python的租房网站-房屋出租租赁系统该项目是基于python/django/vue开发的房屋租赁系统/租房平台,作为学生的课程作业作品。内容制作非常精良。源码下载:https://......
  • C语言循环结构综合案例1
    昨天我们复习了了选择结构的综合案例,那么我们今天开始复习循环结构。循环结构的内容比较多,所以我会将内容分为两天给大家展示,那么今天的实例题目也会比较多一些,所以也请各位能够耐心完成学习我列于文中一些小题,在独立完成理解后,我相信大家对C语言的学习和理解也会有一些全新的......
  • 汇舟问卷:国外问卷项目如何让我在一个月内获得2万美金
    大家好,我是汇舟问卷,专注于国外问卷渠道查。国外问卷项目是一种通过完成在线问卷调查来赚取美金报酬的方式。然而,想要在一个月内通过国外问卷项目获得2万美金。这实际上是一个相当具有挑战性的目标。但是并不是不能达成。目前汇舟问卷工作室经过长时间的答题训练和对渠道题目......
  • 操作系统综合题之“采用二级页表的分页存储管理方式,计算页目录号的位数 和 页的大小,给
    一、问题:某计算机系统的主存按字节编址,逻辑地址和物理地址都是32位,其内存管理采用练级页表的分页存储管理方式。逻辑地址中页号为10位,页内偏移地址为12位。该计算机系统的两级页表结构如下图所示,图中数值均为十进制数1.页目录号的位数为多少?页的大小为多少KB?2.如果页目录项大小......
  • 宁夏国有资产投资控股集团评估机构及会计师事务所入库项目招标
    宁夏国有资产投资控股集团有限公司评估机构及会计师事务所入库项目招标公告1.招标条件宁夏国有资产投资控股集团有限公司评估机构及会计师事务所入库项目已具备招标条件,采购资金为自筹,现对该项目进行公开招标。2.项目概况与招标范围2.1项目概况:为规范集团公司评估机构......
  • starganvc2变声器项目实战及其源码解读
    1.数据与项目文件解读        数据文件目录如下所示,需要注意的是,我们并不能直接对声音进行建模,而需要对声音数据进行预处理,从而得到一系列数值特征,然后对特征进行建模,特征数据存储到processed文件夹中         2.环境配置        pipinstall li......
  • 以XX大学学生公寓为例的安科瑞远程抄表与配电能效系统解决方案【AcrelEMS-EDU校园综合
    建设背景随着我国经济的高速发展,建筑能耗特别是国家机关办公建筑和大型公共建筑高耗能的问题日益突出。学校作为大型公共机构建筑的重要组成部分之一,其特点是占地面积大、建筑分布广、数量多、类型多样、用能情况复杂;高校用能普遍问题用能需求日益增加  节能队伍建设薄弱......