返回信息流附件(89.1KB) roll.rar
这一段和朋友们跑coc网团,所以自制了一个roll点器,目前的功能是输入ndm(n,m是整数),然后回车,就能自动输出roll点结果。现在正在研究第二版,目标是可以识别ndm+x(n,m,x是整数),然后正确输出。有编程达人的话,请给予一些算法上的建议。
另:除了三国杀之外,好玩的桌游还有很多,比如coc dnd 冰与火 大战役
再另:其实我就是好不容易做出了这么个东西,上来显摆一下,毕竟是自己做出的第一个有用的东西。好吧,渣技术的我自重,欢迎有技术的喷子指导。
以上
这是一条镜像帖。来源:北邮人论坛 / board-game / #21228同步于 2010/3/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
BoardGame机器人发帖
自制roll点程序
erickies
2010/3/19镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
第二版出来了,可以识别ndm之后的+x
请大牛看看有没有什么更好的算法吧,我是没想出来
附件(89.9KB) rollplus.rar
代码如下:
#include<iostream>
#include<string>
#include"time.h"
using namespace std;
int FindD(string a,char b);
int roll(int NumOfDice,int NumOfSide);
int main()
{
string a,StrNumSide,StrNumDice,StrNumAdd;
int count=0,result;
cout<<"直接输入要roll的类型(如'2d10',或'3d6+4'),如果需要连续roll点,请用空格分隔"<<endl<<"退出请输入x"<<endl;
srand(time(NULL));
while(cin>>a&&a[0]!='x')
{
if(count<10)
{
int i=FindD(a,'d');
int j=FindD(a,'+')-1;
if (i!=a.size())
{
StrNumDice.assign(a,0,i);
int INumDice=atoi(StrNumDice.c_str());
StrNumSide.assign(a,i+1,j);
int INumSide=atoi(StrNumSide.c_str());
StrNumAdd.assign(a,j+1,a.size());
int INumAdd=atoi(StrNumAdd.c_str());
if(j+1==a.size())
{
INumAdd=0;
if(INumDice!=0&&INumSide!=0)
{
result=roll(INumDice,INumSide);
cout<<"你要投"<<INumDice<<"个"<<INumSide<<"面色结果是:"<<result<<endl;
count--;
}
else
{
cout<<"这是毛阿,当小爷不识数吗!!"<<endl;
count++;
cout<<"你还有"<<10-count<<"次输错的机会"<<endl;
}
}
else
{
result=roll(INumDice,INumSide);
cout<<"你要投"<<INumDice<<"个"<<INumSide<<"面色结果是"<<result<<"再加"<<INumAdd<<": "<<result+INumAdd <<endl;
count--;
}
}
else
{
cout<<"你个二货!必须有'd'"<<endl;
count++;
cout<<"你还有"<<10-count<<"次输错的机会"<<endl;
}
}
else
{
for(int j=0;;j++)
{
cout<<"⑨⑨⑨⑨⑨baga!!baga!!⑨⑨⑨⑨⑨ "<<endl;
}
}
}
return 0;
}
//用来找分隔符 输入一个字符串,输出指定的分隔符位置
int FindD(string a,char b)
{
int point=0;
while(a[point]!=b && point<a.size())
{
point++;
}
return point;
}
//roll点用
int roll(int NumOfDice,int NumOfSide)
{
unsigned int result=0;
for(int i=0;i<NumOfDice;i++)
{
result=result+(rand()%NumOfSide+1);
}
return result;
}