面向对象实现原神抽卡模拟功能

主要涉及JAVA面向对象编程

【注:这里只完善了SSR部分】

最近学习Java正好学到了面向对象部分,想着觉得可以用来做个伪随机抽卡模拟功能,于是就做了,本人是萌新,代码结构设计很拉跨,所以花费了近两个小时时间也只完成了部分功能的实现和测试,在这里分享一下。

代码部分1

package cn.itsp.drawcard;

/*
已实现功能:保底冲突,保底跟新,抽卡统计
缺省功能:
*/

import java.util.Random;

public class OriginalGodDrawCards {

public int drawCardDegree = 1;
public int degree = 1;

//稀有度
String rarity;

//武器
String weapon;

//武器类型
String weaponTypes;

//角色
String role;

//元素类别
String roleElementType;

//性别
String roleGender;

//所属地区
String roleArea;

//卡池
String cardSea;

public int drawCard() {
    String[] ssrCardSea = {"胡桃", "魈", "甘雨", "阿贝多", "刻晴", "钟离", "七七", "达达利亚", "迪卢克",
            "可莉", "温迪", "莫娜", "琴", "风鹰剑", "斫峰之刃", "天空之刃", "磐岩结绿", "天空之傲", "无工之剑",
            "狼的末路", "天空之翼", "终末嗟叹之诗", "天空之卷", "尘世之锁", "四风原典", "护摩之杖", "和璞鸢", "天空之脊", "贯虹之槊"};

    Random random = new Random();

    System.out.println("开始十连抽卡!卡池单次ssr概率为0.6%,卡池90发保底。");


    //cnt用于计数
    for (int i = 1, cnt = 0; i < 11; i++) {

        //用于%0.6概率随机
        int ssrRandom = random.nextInt(27888);


        //统计抽卡次数,保底或者出货后更新
        drawCardDegree++;

        System.out.println("距离保底还差" + (92 - drawCardDegree) + "次抽卡");

        if (ssrRandom % 167 == 0 || drawCardDegree % 90 == 0) {

            //用于ssr池随机
            int cardSeaRandom = random.nextInt(ssrCardSea.length);

            //统计该次十连抽中ssr的次数
            cnt++;

            //判断抽中的ssr类型
            if (drawCardDegree % 90 == 0 && cardSeaRandom < 13) {
                System.out.println("恭喜你在该次十连中的第" + i + "发获取到五星保底角色 [ " + ssrCardSea[cardSeaRandom] + " ]");
                drawCardDegree = 1;
                degree++;
            } else if (drawCardDegree % 90 == 0 && cardSeaRandom >= 13) {
                System.out.println("恭喜你在该次十连中的第" + i + "发获取到五星保底武器 [ " + ssrCardSea[cardSeaRandom] + " ]");
                drawCardDegree = 1;
                degree++;
            } else if (ssrRandom % 167 == 0 && cardSeaRandom < 13) {
                System.out.println("恭喜你在该次十连中的第" + i + "发抽到了五星角色 [ " + ssrCardSea[cardSeaRandom] + " ]");
                drawCardDegree = 1;
                degree++;
            } else {
                System.out.println("恭喜你在该次十连中的第" + i + "发抽到了五星武器 [ " + ssrCardSea[cardSeaRandom] + " ]");
                drawCardDegree = 1;
                degree++;
            }

        } else if (i == 10 && cnt == 0 && drawCardDegree % 90 != 0) {
            System.out.println("抱歉!您在该次十连中未抽中ssr");
        } else if (i == 10 && cnt != 0) {
            System.out.println("您在该次十连中获取的ssr总数为: " + cnt);
        }
    }

    //返回抽中的ssr数量累计
    return degree;
}
}

代码部分2

package cn.itsp.drawcard;


import cn.itsp.drawcard.OriginalGodDrawCards;

import java.util.Scanner;

public class TestDrawCards {
public static void main(String[] args) {
    OriginalGodDrawCards d1 = new OriginalGodDrawCards();

    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入您需要进行的十连抽卡次数[int类型]: ");
    int times = scanner.nextInt();

    for (int i = 1; i <= times; i++) {
        System.out.println("这是您的第" + i + "次十连抽卡: ");
        int degree = d1.drawCard();

        //换行
        System.out.println();

        if (i == times) {
            System.out.println("抽卡结束!本次抽卡累计获取ssr" + degree + "只");
        }
    }
}
}

运行效果展示

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/W2398439780/article/details/115126754