1、原程序的开奖过程比较简单,只是输出随机数结果,没有一般摇奖的效果,可以将程序加以改进,使随机数不断变换显示,最后停在大奖号码上,这样效果更加逼真。void CWelfareLot :SetLot( ) int nRnd,nNum; for(int i=0;i6;i+) /要开出6个数字 nRnd=rand( ); /随机取循环次数,数字变换的时间长度是随机的 for(int j=0;jnRnd;j+) nNum=rand( )%21; /随机取020之间的数字进行变化if(nNum10)coutnNumb; /*当取的数字小于10,即一位数,显示后光标左移一位,再继续变换的数字将原数字覆盖,出
2、现摇奖效果*/ else coutb /当取的数字是两位数,左移两位“ ”;LotNumi=nNum; /变换到最后的数字即为大将数字(3)程序的进一步改进原程序要求玩家提供计算机随机数的种子,但如果种子固定,那么产生的随机数也固定,大奖的号码每次都相同,达不到原游戏的目的。我们还是用当前的时间作为随机数种子去顺序产生随机值,使得大奖号码都是随机的。如果大奖号码纯粹是随机数,那么玩家获得大奖几乎是不可能的,所有的玩家玩家都希望在游戏中找到乐趣,所以可以将游戏稍稍改进一下,用指定的用户名和密码进入,首先预定好大奖号码,开奖的操作照常进行,只不过停止变换后显示的数字是我们预定的,这样就可以使您成为
3、虚拟世界的百万富翁!三、关键源代码注解定义用户类:class person /用户类char code20; /用户输入的数字int money; /用户拥有的彩金friend class Game; /将输入数字作为福彩类的友元函数;定义福彩类私有成员:class Game /福彩类int play; /记录游戏者当前所在的局数int ball; /记录游戏者总共玩的局数int score; /记录游戏者赢的局数char name20; /储存游戏者的姓名char Reply2; /储存游戏者输入的字符y或nint seed; /储存游戏者输入的幸运数字int PowerBall; /储存游
4、戏者输入的PowerBall数字int total; /记录游戏者得的总分数int level; /储存游戏者所选的数字范围int rule; /储存游戏者所选的游戏规则int truematch6; /记录每个数字得的分数int num 5; /记录游戏者输入的whiteballl数字int cp_num6; /储存电脑所产生的随机数int bet; /赌注int x; /记录游戏等级char Reply3;定义福彩类公有成员并构造相应函数: public : Game ( ) /构造函数初始化赌资,游戏者当前所在的局数,游戏者总共玩的局数,游戏者赢的局数 player.money=100;
5、play=1;ball=0;score=0; void gameboy1( ) /初始化姓名 coutreply5; if(reply5=y|reply5=Y) char ch; int i=0;请设置高级玩家密码 : cout.flush(); /清输出缓冲区 ch=getch(); while(ch!=#) /当输入#字符时循环结束 player.codei+=ch;* cout.flush(); ch=getch(); player.codei=0;tt密码载入中,请稍候. wait(2000); /真实性处理 system(cls /执行系统命令,清屏 else strcpy(play
6、er.code,1111 void menu( ) /选择游戏规则#游戏规则#1大奖:当输入的6个数字全部匹配时游戏者赢!若赢您可获得所下赌注三倍的奖金,若输您将失去同样多的金额!*2二等奖:当输入的6个数字中至少有4个匹配时游戏者赢!若赢您可获得所下赌注两倍的奖金,若输您将失去同样多的金额!3三等奖:当输入的6个数字中至少有2个匹配时游戏者赢!若赢您可获得与您所下赌注相等的奖金,若输您将失去同样多的金额!namex; /输入所选的游戏规则 while(x!=1&x!=2&=3) /判断输入的数字是否合乎要求 cout /重新输入数字 switch(x) /根据输入的数字来确定游戏规则 cas
7、e 1: rule=6;break; case 2: rule=4; case 3: rule=2;数据载入中,请稍侯 wait(2000); system( void _level( ) /选择游戏的难易程度#游戏难易程度说明#e:简单,在1-20中选择号码!h:困难,在1-40中选择号码!(若赢奖金在原基础上增加一倍哦!)请选择游戏难易程度:Reply3; while(Reply3!eReply3!h) /判断输入的字符是否合乎要求 请重新输入! e or h /重新输入字符 switch(Reply3) /根据输入的字符初始化数字范围确定游戏难易 case level=20; level
8、=40; int getgamenbr() /根据时间初始化随机数种子并产生随机数 int ran; srand(unsigned)time(NULL); ran=rand()%level+1; /在已确定的范围内产生随机数 return (ran); void wait(int milli) /延时函数,产生多个种子 clock_t start; start=clock(); while(clock()-start)milli); void _show( ) /设置游戏提示信息 -n * 欢迎来到福彩中心! 祝您好运! *n#游戏说明#n1.本游戏设置了普通玩家与高级玩家,高级玩家可设定大奖
9、号码;2.高级玩家密码可先设定,不设则采用默认密码(1111). void BET( ) /设置赌注n您拥有金钱:¥player.money请输入您的赌注金额:bet; if (bet0) bet=bet*(-1); void money_show() void setlot( ) /开奖过程 int nr,nn; for(int i=0;i+) nr=rand(); for(int j=0;nr; nn=getgamenbr(); /调用成员函数来产生随机数 if(nn coutnnb else cp_numi=nn; /将随机数储存在一维数组cp_numi中 wait(800); void
10、 gameover( ) /游戏结束并显示信息结束程序n你一共玩了ball局,赢了score局!谢谢你的参与!-) exit (1); /结束程序 void _do( ) /游戏的执行函数_show(); gameboy1(); set( ); do menu(); system( _level(); Game:BET(); cout n, 请输入whiteball号码n /游戏者输入whiteball 号码 int j; /记录循环次数 for (j=0; j5; j+) cout输入球号码 # j+1 numj) /检验输入的字符是否符合条件 cin.clear(); /清除错误字符 wh
11、ile (!(cin.get() =) /提取完在缓冲区中的字符或字符串 continue; cout 对不起,您输入的数字不符合要求!请在1-level中选择号码! /显示重新输入的提示信息 if (numjlevel) /检验输入的数字是否大于确定范围中的最大值对不起,您输入的号码大于 !请在1- , 请输入PowerBall号码: /显示出要求玩家输入PowerBall 号码的提示信息 cin PowerBall; /输入PowerBall号码 char ans;是否要成为高级玩家:y or nans; int panduan=0; if(ans=|ans=) char gao20; /
12、验证密码 char ch;请输入高级玩家验证密码(以#字符结束): gaoi+=ch; gaoi=0; if (!strcmp(player.code,gao) /默认密码处理 wait(2000);tt您已通过密码验证请输入六个数字作为大奖号码 for(int j=0;j+) cincp_numj; panduan=1; else couttt密码错误 if (panduan=0) setlot( ); /调用开奖成员函数产生随机数 /调用成员函数来检验玩家输入的数字是否与电脑产生的随机数相匹配并将得分储存在数组truematch6中 truematch0= isMatch(num0,cp_
13、num); truematch1= isMatch(num1,cp_num); truematch2= isMatch(num2,cp_num); truematch3= isMatch(num3,cp_num); truematch4= isMatch(num4,cp_num); truematch5= isMatch(PowerBall,cp_num); total=(truematch0 + truematch1 +truematch2+ truematch3 + truematch4 + truematch5); /计算总得分 /显示游戏结果n* cout n第play局n*n cou
14、t /显示电脑产生的随机数电脑产生的号码为:cp_num0cp_num1cp_num2cp_num3cp_num4PBcp_num5-n /显示玩家选择的数字,您选择的号码为:num0num1num2num3num4PowerBall /显示玩家选择的各个数字的得分情况cout ,您猜中的有(猜中为1,不中为0):truematch0truematch1truematch2truematch3truematch4truematch5; /显示玩家的总得分n猜中总数为:total=rule) /根据总分判断玩家是否赢得此局恭喜 , 您赢了! score+; /记录赢的局数 switch(Repl
15、y3) /计算玩家剩余金额 player.money=player.money+(bet*(4-x);您的剩余金额为 player.money=player.money+(bet*(4-x)*2); switch(Reply3) player.money=player.money-(bet*(4-x); break; player.money=player.money-(bet*(4-x)*2);对不起 , 您输了!player.money;n*n if(player.money=0) /判断是否还有赌本对不起,您没有赌本了! ball+; break;, 您想继续游戏吗? y or n /询
16、问玩家是否要继续游戏 Reply2; /输入字符以确定是否要继续 play=play + 1; /局数加一 /记录总共玩的局数while( Reply2=|Reply2= /当输入字符时继续游戏否则循环结束 gameover(); friend int isMatch(int test, int cp_num); /将用户的输入的数字与福彩号码的比较函数定义为福彩类的友元函数 int isMatch(int test, int cp_num ) /test为所要判断的数字 int match = 0; /记录得分 for (int i=0; i i+) /与电脑产生的所有数字对比 if (te
17、st = cp_numi) match = 1;/如果匹配则得分为1 return match; /返回得分值主函数:void main(void) /主函数 Game player1; /建立对象 player1._do( ); /游戏的执行过程 四、设计过程中遇到的问题及解决办法(1)用当前时间作为随机数种子产生的随机数相同。时间间隔太小,将wait函数中的暂停时间延长(2)虽然有开奖效果,但开出的数与产生的随机数不同。开奖函数中取了一次随机数,函数外又以时间为种子取了一次随机数,两次操作独立开了,将开奖函数中的取随机数改为以时间为种子,删除函数外的(3)游戏进行中如果游戏者成为高级玩家,那么大奖号码由玩家自己定,不需要电脑产生随机数作为大奖号码,所以在程序执行过程中就需要跳过产生随机数的函数,开始我使用goto成功跳过了随机数函数,但将用户输入的数字与福彩号码的比较函数定义为福彩类的友元函数后编译出现了问题,无法调用该函数。不使用goto,增加一个if比较函数,如果返回值是1,则执行随机数函数,否则不执
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1