求思路 Java休闲小游戏开发

img

img


题是下面这个怎么才可以运行成那样啊
有人说题的逻辑错了 不能生成对子 但应该是可以随机到的

要求已经很详细了
你到底是从哪一步开始没有思路了呢
无非是先建立一堆变量,然后按顺序写一堆while循环,循环里输入,判断输入值如果合法就break继续,不合法就一直要求输入
剩下的就是给1-54的点数分配牌,因为要按点数比较,显然54是大王,53是小王,依次排下来,这样如果是非对子,直接判断id就行了,而无需判断点数和花色
剩下的就是如何随机,如何比较大小,一步一步来呗

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/1007522
  • 你也可以参考下这篇文章:使用java对大量存在重复且不规律的数据进行统计分析【数据清洗模块】(如需借鉴,请务必标明作者)
  • 同时,你还可以查看手册:java-学习Java语言 - 描述Java编程语言的基本概念和特点的课程。-泛型是Java编程语言的一个强大功能。它们提高了代码的类型安全性,使更多的错误可以在编译时发现。-野生动物 中的内容
  • 除此之外, 这篇博客: java枚举类及面试题为什么枚举实现单例模式是安全的?中的 为什么枚举实现单例模式是安全的? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • enum Singleton5 {//枚举类的单例模式
        INSTANCE;
        public Singleton5 getInstance(){
            return INSTANCE;
        }
    }
    

    1、 私有化构造器并不保险,通过反射机制调用私有构造器。而枚举类不能被反射,所以可以防止反射攻击

    //模拟反射攻击
    class Singleton {//双重校验锁,性能佳线程安全
        private static Singleton4 instance=null;
        private Singleton4() {}
        public static Singleton4 getInstance() {
            if(instance==null) {
                synchronized (Singleton4.class) {
                    if (instance==null) {
                        //new对象分为三个操作
                        //分配内存
                        //调用构造方法初始化
                        //赋值
                        instance=new Singleton4();
                    }
                }
            }
            return instance;
        }
    }
    public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Singleton s=Singleton.getInstance();
        Singleton sUsual=Singleton.getInstance();
        Constructor<Singleton> constructor=Singleton.class.getDeclaredConstructor();
        constructor.setAccessible(true);
        Singleton sReflection=constructor.newInstance();
        System.out.println(s+"\n"+sUsual+"\n"+sReflection);
        System.out.println("正常情况下,实例化两个实例是否相同:"+(s==sUsual));
        System.out.println("通过反射攻击单例模式情况下,实例化两个实例是否相同:"+(s==sReflection));
    }
    //com.lxp.pattern.singleton.Singleton@1540e19d
    //com.lxp.pattern.singleton.Singleton@1540e19d
    //.lxp.pattern.singleton.Singleton@677327b6
    //正常情况下,实例化两个实例是否相同:true
    //通过反射攻击单例模式情况下,实例化两个实例是否相同:false
    

    2.避免序列化问题(任何一个readObject方法,不管是显式的还是默认的,它都会返回一个新建的实例,这个新建的实例不同于该类初始化时创建的实例)

  • 您还可以看一下 汪翠老师的java项目实战之欢乐斗地主游戏开发教程 毕业项目课程设计带源码课程中的 给扑克牌绑定鼠标事件实现单击可以选择出牌列表小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    答案:

    针对Java休闲小游戏开发,可以按照以下步骤进行开发:

    1.确定游戏类型和玩法:可以选择打地鼠、拼图、2048等休闲小游戏,确定游戏规则、操作方式等。

    2.设计游戏界面和音效:根据游戏类型和玩法,设计游戏界面,包括背景、角色、道具等元素并搭配相应的音效。

    3.编写游戏逻辑:按照游戏规则,编写相应的逻辑代码,实现游戏的运行和判定。

    4.测试和优化:进行游戏测试,并根据测试结果优化游戏性能、改进游戏体验等。

    至于代码无法生成对子的问题,需要看具体代码排查错误,无法确定原因。

    针对小数转分数问题,可以按照以下步骤进行代码编写:

    1.从标准输入中读入小数,并将其乘以100转化为整数,存储在int类型变量num中。

    2.根据小数点的位置,将整数部分和小数部分分别存储在变量integer和decimal中。

    3.计算integer和decimal的最大公因数gcd,将两个数同时除以gcd得到最简分数(分子和分母)。

    4.输出整数部分和最简分数(分子和分母)。

    代码实现如下:

    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            double num = sc.nextDouble();
            int integer = (int) num;
            int decimal = (int) ((num - integer) * 100 + 0.5);
            int gcd = getGcd(integer * 100 + decimal, 100);
            System.out.println(integer / gcd + " " + decimal / gcd + " " + 100 / gcd);
        }
    
        public static int getGcd(int a, int b) {
            if (b == 0) {
                return a;
            } else {
                return getGcd(b, a % b);
            }
        }
    }
    

    以上为代码演示,其中包含输入、计算最简分数、输出等环节。