明日方舟的抽奖系统的c++实现,一开始想的随机数实现,就是每一段数的范围代表不同的星级,其中概率分为40%,50%,8%,2%,首先随机数如下,取0~999。
a=rank()%1000;
随后就是十抽保底机制了,对于这种,鄙人是先bool一个变量看前十抽保底是否生效,如果生效了那就 返回1,抽到六星,五星均返回值1。
一旦抽卡次数达到了10,且还未有六星,五星出现,那么在四星,三星的判断下,加以个返回五星的语句,据如同这样。
else if(a>99+o&&a<600+o) //这是四星判断的地方。 { if(ten==9&&shichou==0) //这里是判断是否到十抽且前是否有六星或者五星 { k++; //这里是统计五星个数。 shichou=1;//保底生效 wu(0); //进入五星抽奖 wushi++;//五十抽保底机制,如果没有六星就自增。 } else //前面的条件未成立 { si(0); //进入四星抽奖 r++; //统计四星 wushi++; //五十抽保底机制 ten++; //十抽保底机制 }
这样十抽保底就实现了,后面则是五十抽开始的保底机制。五十抽以后未抽到6星则概率增加,所以鄙人定义了一个变量,让它记录6星保底是否生效,如果生效,那它就变化。
代码如下:
if(a>=0&&a<(20+o)) //这里是判断是否6星 { liu(0); //进入六星抽奖 j++; //六星统计 if(shichou==0)shichou=1; //前十抽保底机制,有了六星就失效了。 wushi=0; //五十抽保底归O o=0; //五十抽保底增加概率归O }
当未抽到六星时候,且五十抽保底(变量wushi>50)则下面公式:
if(wushi>50)o=(wushi-50)*20;
使五十抽保底开始。
这样到了九十九抽未有6星(黑到极致),一定百抽到达你身边(这样好像也是反向百抽的欧皇呢)。
而通过随机数,也可以实现一些干员UP的环境。这里就不多阐述了。
直接上所有代码!
#include<bits/stdc++.h> using namespace std; int ten; int wushi; int o; int a,j,k,r,h,huan,n; bool shichou; void san(int x) { x=rand()%16; //三星干员 string l[16]={"芬","香草","翎羽","玫兰莎","卡缇","米格鲁","克洛斯","炎熔","芙蓉","安塞尔","史都华德","梓兰","空爆", "月见夜","斑点","泡普卡"}; if(huan==0){ cout<<l[x]; printf("[★★★]"); huan++; } else if(huan==4) { cout<<' '<<l[x]; printf("[★★★]\n"); huan=0; } else { cout<<' '<<l[x]; printf("[★★★]"); huan++; } return; } void si(int x) { x=rand()%41; //四星干员 string l[41]={"夜烟","远山","杰西卡","流星","白雪","清道夫","红豆","杜宾","缠丸","霜叶","慕斯","砾","暗索","末药", "调香师","角峰","蛇尾箱","古米","深海色","地灵","阿消","猎蜂","格雷伊","苏苏洛","桃金娘","红云","梅","安比尔", "宴","刻刀","波登可","卡达","孑","酸糖","芳汀","泡泡","杰克","松果","豆苗","深靛","罗比菈塔"}; if(huan==0){ cout<<l[x]; printf("[★★★★]"); huan++; } else if(huan==4) { cout<<' '<<l[x]; printf("[★★★★]\n"); huan=0; } else { cout<<' '<<l[x]; printf("[★★★★]"); huan++; } return; } void wu(int x) { x=rand()%60; //五星干员 string l[60]={"白面鸮","凛冬","德克萨斯","芙兰卡","拉普兰德","幽灵鲨","蓝毒","白金","陨星","天火","梅尔","赫默", "华法琳","临光","红","雷蛇","可颂","普罗旺斯","守林人","崖心","初雪","真理","空","狮蝎","食铁兽","夜魔","诗怀雅", "格劳克斯","星极","送葬人","槐琥","苇草","布洛卡","灰喉","吽","惊蛰","摄砂","巫恋","极境","石棉","月禾","莱因哈特", "断崖","蜜蜡","贾维","安哲拉","燧石","四月","奥斯塔","絮雨","卡夫卡","爱丽丝","乌有","熔泉","赤东","绮良","羽毛笔", "桑葚","灰毫","浊清"}; if(huan==0){ cout<<l[x]; printf("[★★★★★]"); huan++; } else if(huan==4) { cout<<' '<<l[x]; printf("[★★★★★]\n"); huan=0; } else {cout<<' '<<l[x]; printf("[★★★★★]"); huan++; } return; } void liu(int x) { x=rand()%38; //六星干员 string l[38]={"能天使","推进之王","伊芙利特","艾雅法拉","安洁莉娜","闪灵","夜莺","星熊","塞雷娅","银灰", "斯卡蒂","陈","黑","赫拉格","麦哲伦","莫斯提马","煌","阿","刻俄柏","风笛","傀影","温蒂","早露","玲兰", "棘刺","森蚺","史尔特尔","瑕光","泥岩","山","空弦","嵯峨","凯尔希","帕拉斯","水月","琴柳","远牙","焰尾"}; if(huan==0){ cout<<l[x]; printf("[★★★★★★]"); huan++; } else if(huan==4) { cout<<' '<<l[x]; printf("[★★★★★★]\n"); huan=0; } else { cout<<' '<<l[x]; printf("[★★★★★★]"); huan++; } return; } void choujiang(int x) { double dd; dd=double(j)*4+double(k); dd/=n; printf("欧皇鉴定啦~~~~~~\n经过检验,你是"); //随便搞得-v- if(dd>=0.4) { cout<<"超级欧皇!! 可恶啊,我好羡慕!!!,你已经超越了人类了(不做人了)\n"; } else if(dd>=0.3&&dd<0.4) { cout<<"欧皇! 真牛逼,你已经超过了绝大多数人,真贵族血脉!\n"; } else if(dd>=0.2&&dd<0.3) { cout<<"欧洲人! 你还挺幸运的,慕了。\n"; } else if(dd>=0.09&&dd<0.2) { cout<<"亚洲人, 我们都是黄皮肤。\n"; } else if(dd>0.07&&dd<0.09) { cout<<"非洲人 ,诶呀,没事的,氪就解决了"; } else { cout<<"非酋!!!哈哈哈哈哈哈哈,回家吧酋长!\n"; } return; } int main() { printf("这里是简简单单的明日方舟抽奖系统,有保底机制。\n" "请输入你想抽奖的次数(输入0结束)\n"); while(scanf("%d",&n)!=EOF) { //string str="weeee"; // cout<<str.substr(); shichou=0; ten=0,wushi=0; j=0,k=0,r=0,huan=0,h=0; if(n==0)break; else if(n<0){ printf("请输入正确的数字:\n"); continue; } else { for(int i=0;i<n;i++) { a=rand()%1000; if(a>=0&&a<(20+o)) { liu(0); j++; if(shichou==0)shichou=1; wushi=0; o=0; } else if(a>19+o&&a<100+o) { wu(0); k++; if(shichou==0)shichou=1; wushi++; } else if(a>99+o&&a<600+o) { if(ten==9&&shichou==0) { k++; shichou=1; wu(0); wushi++; } else { si(0); r++; wushi++; ten++; } } else { if(ten==9&&shichou==0) { shichou=1; wu(0); k++; wushi++; } else { san(0); h++; wushi++; ten++; } } if(wushi>50)o=(wushi-50)*20; } } cout<<endl; cout<<"总计:"<<endl; printf("六星总数目:%d 五星总数目:%d 四星总数目:%d 三星总数目:%d。\n",j,k,r,h); n*=10; printf("消耗合成玉:%d,折合源石: %.2lf\n\n",n*60,double(n)/3); n/=10; if(n<10) { printf("\n因为次数不足,所以无法做欧皇鉴定\n是否继续?如继续,请输入次数,反之输入0\n\n"); } else { choujiang(n); printf("\n是否继续?如继续,请输入次数,反之输入0\n\n"); } } return 0; }
挺简单的,如果有优化务必评论,我还在学习,我要学习!!