项目介绍
通过java语言,编写了一个氪金游戏的抽卡系统,具备充值,抽卡,查看卡池详情的功能
整体架构流程
板块分析
1.充值板块
import java.util.Scanner; import java.util.Random; public class Dram { public static int yuanShi=0; static Scanner sc=new Scanner(System.in); public static void Spend(){ //此方法封装着充值板块 System.out.println("------------------------"); System.out.println("请输入您的充值金额(元)"); int money=sc.nextInt(); int yuanShiC=money*10; System.out.println("邮箱提醒:到账原石"+yuanShiC); yuanShi+=yuanShiC; System.out.println("原石:"+yuanShi); System.out.println("------------------------"); }
需求1:用户需要输入数据
方案:Scanner类,static关键字,静态方法System.in打开输入流,nextInt()方法获取充值金额
需求2:系统需要保存数据
方案:static关键字,创建静态变量yuanShi,运行全过程可被操作
创建int类型数据,yuanShiC,标记为用户,通过充值渠道,获取的游戏货币
根据货币与虚拟货币1:10的比例,建立公式,通过+=自加运算符,记录到yuanShi变量
需求3:此板块需要简单的UI设计
方案:println方法,打印出“---”,对板块进行分隔,打印出引导充值语,充值获得反馈
在每个板块下打印出,静态变量yuanShi,实时显示用户拥有的虚拟货币数量
2.抽卡板块
public static void Draw() { //此方法封装着抽卡板块 Random num=new Random(); String pool[]=new String[100]; for(int a=0;a<=21;a++) { pool[a]="新手剑"; } for(int b=22;b<=43;b++) { pool[b]="新手长弓"; } for(int c=44;c<=65;c++) { pool[c]="新手大剑"; } for(int d=66;d<=89;d++) { pool[d]="新手长枪"; } pool[90]="\u001B[35m西风长枪\u001B[0m"; pool[91]="\u001B[35m西风大剑\u001B[0m"; pool[92]="\u001B[35m西风剑\u001B[0m"; pool[93]="\u001B[35m西风长弓\u001B[0m"; pool[94]="\u001B[35m安柏\u001B[0m"; pool[95]="\u001B[35m诺艾尔\u001B[0m"; pool[96]="\u001B[35m凯亚\u001B[0m"; pool[97]="\u001B[35m香菱\u001B[0m"; pool[98]="\u001B[33m迪卢克\u001B[0m"; pool[99]="\u001B[33m胡桃\u001B[0m"; System.out.println("------------------------"); System.out.println("抽一次请按1,抽十次请按10"); int time=sc.nextInt(); if(time==1) { if(yuanShi>=160) { yuanShi-=160; System.out.println(pool[num.nextInt(100)]); System.out.println("原石:"+yuanShi); }else { System.out.println("抱歉,您的原石已不足"); } }if(time==10) { if(yuanShi>=1600) { yuanShi-=1600; for(int i=1;i<=10;i++){ System.out.print("--"+pool[num.nextInt(100)] ); } System.out.println(); System.out.println("原石:"+yuanShi); }else { System.out.println("抱歉,您的原石已不足"); } } System.out.println("------------------------"); }
需求1:抽卡池子需要100个空缺,并且装上对应的游戏道具
方案:建立String类型数组,创建数组容量为100,通过for循环,根据业务需要,填充相应比例的等级道具的字符串
需求2: 抽卡池子需要随机生成出玩家的抽卡结果
方案:Random类,创建Random对象,标定生成数字的范围在0-99,通过println打印出
需求3:抽卡池子需要具备抽一次和抽十次的功能
方案: 通过Scanner类中的nextInt()方法,获取用户选定的抽取次数
通过if条件判断,抽一次,静态变量yuanShi,-=自减160,用println打印出一次随机结果
抽十次,静态变量yuanShi,-=自减1600,用for循环十次,用print打印出十次随机结果
需求4:游戏道具需要根据对应等级,显示对应颜色
方案:通过\u001B[色号数字m文案\u001B[0m 显示紫色,金色
3.查询详情板块
public static void Check() { //此方法封装着查询详情板块 /* 三星武器掉率 90% 四星武器|角色掉率 8% 五星常驻角色|活动角色掉率 2% */ System.out.println("------------------------"); System.out.println("该池为活动池"); System.out.println("活动角色:胡桃"); System.out.println("四星武器|角色掉率: 8%"); System.out.println("五星活动角色掉率: 1%"); System.out.println("注:该活动池没有保底机制"); System.out.println("-------------------------"); }
需求:系统需要显示卡池物品掉率等信息
方案:通过println方法,逐条显示用户想要查询的内容
4.抽卡主板块
public static void main(String[] args){ Scanner scan=new Scanner(System.in); System.out.println("胡桃活动池(模拟抽卡)"); for(int j=0;j<1000000000;j++) { System.out.println("充值请按1,抽卡请按2,查看池子详情请按3"); int choose=scan.nextInt(); if(choose==1) { Spend(); }if(choose==2) { Draw(); }if(choose==3) { Check(); } } scan.close(); } }
需求1:系统需要判断用户想使用的板块
方案:通过Scanner类的nextInt()方法获取用户的选择,根据选择,if语句调用对应的方法
需求2:抽卡主板块需要重复的运行
方案:通过for循环将主板块核心代码进行嵌套
需求3:用户需要知道活动池的主题
方案:通过println方法于开头打印活动池主题
实操展示
1.充值板块
2.抽卡板块
3.查询详情板块
4.整体展示
注:概率没有问题,只不过我运气很好罢了
小结
以上就是抽卡代码了,如果有疑问,可以私信或评论,觉得有意思的话,不妨点个赞,支持一下。