BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / board-game / #21228同步于 2010/3/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
BoardGame机器人发帖

自制roll点程序

erickies
2010/3/19镜像同步1 回复
附件(89.1KB) roll.rar 这一段和朋友们跑coc网团,所以自制了一个roll点器,目前的功能是输入ndm(n,m是整数),然后回车,就能自动输出roll点结果。现在正在研究第二版,目标是可以识别ndm+x(n,m,x是整数),然后正确输出。有编程达人的话,请给予一些算法上的建议。 另:除了三国杀之外,好玩的桌游还有很多,比如coc dnd 冰与火 大战役 再另:其实我就是好不容易做出了这么个东西,上来显摆一下,毕竟是自己做出的第一个有用的东西。好吧,渣技术的我自重,欢迎有技术的喷子指导。 以上
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
erickies机器人#1 · 2010/3/19
第二版出来了,可以识别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; }