想写一个能自动生成跑团角色属性的骰娘程序
一开始用的rand()函数
然后发现每次结果都一样
于是在查了一下教程后使用了
然鹅感觉还是不太对劲
求各位看看该程序生成的随机数是否和物理骰子概率分布一样
代码见下
#include<bits/stdc++.h>
using namespace std;
int st,de,co,in,ed,si,po,luk,app;
int sum[114514],msum[114514];
void roll() {
std::random_device rd;
std::uniform_int_distribution<int> dist(1,6);
st=(dist(rd))+(dist(rd))+(dist(rd));
de=(dist(rd))+(dist(rd))+(dist(rd));
co=(dist(rd))+(dist(rd))+(dist(rd));
po=(dist(rd))+(dist(rd))+(dist(rd));
app=(dist(rd))+(dist(rd))+(dist(rd));
luk=(dist(rd))+(dist(rd))+(dist(rd));
ed=(dist(rd))+(dist(rd))+6;
in=(dist(rd))+(dist(rd))+6;
si=(dist(rd))+(dist(rd))+6;
st*=5;
de*=5;
co*=5;
po*=5;
app*=5;
luk*=5;
ed*=5;
in*=5;
si*=5;
}
int main() {
std::random_device rd;
std::uniform_int_distribution<int> disb(1,10);
int n;
cin>>n;
cout<<"力量: ";
for(int i=1; i<=n; i++) {
roll();
if(st==90) st+=disb(rd);
printf("%4d",st);
sum[i]+=st;
msum[i]+=st;
}
cout<<endl;
cout<<"体质: ";
for(int i=1; i<=n; i++) {
roll();
if(co==90) co+=disb(rd);
printf("%4d",co);
sum[i]+=co;
msum[i]+=co;
}
cout<<endl;
cout<<"体型: ";
for(int i=1; i<=n; i++) {
roll();
if(si==90) si+=disb(rd);
printf("%4d",si);
sum[i]+=si;
msum[i]+=si;
}
cout<<endl;
cout<<"敏捷: ";
for(int i=1; i<=n; i++) {
roll();
if(de==90) de+=disb(rd);
printf("%4d",de);
sum[i]+=de;
msum[i]+=de;
}
cout<<endl;
cout<<"外貌: ";
for(int i=1; i<=n; i++) {
roll();
if(app==90) app+=disb(rd);
printf("%4d",app);
sum[i]+=app;
msum[i]+=app;
}
cout<<endl;
cout<<"教育: ";
for(int i=1; i<=n; i++) {
roll();
if(ed==90) ed+=disb(rd);
printf("%4d",ed);
sum[i]+=ed;
msum[i]+=ed;
}
cout<<endl;
cout<<"智力: ";
for(int i=1; i<=n; i++) {
roll();
if(in==90) in+=disb(rd);
printf("%4d",in);
sum[i]+=in;
msum[i]+=in;
}
cout<<endl;
cout<<"意志: ";
for(int i=1; i<=n; i++) {
roll();
if(po==90) po+=disb(rd);
printf("%4d",po);
sum[i]+=po;
msum[i]+=po;
}
cout<<endl;
cout<<"幸运: ";
for(int i=1; i<=n; i++) {
roll();
printf("%4d",luk);
sum[i]+=luk;
}
cout<<endl;
cout<<"总和(不含运):";
for(int i=1; i<=n; i++)
printf("%4d",msum[i]);
cout<<endl;
cout<<"总和(含幸运):";
for(int i=1; i<=n; i++)
printf("%4d",sum[i]);
return 0;
}