C++课程设计福彩游戏设计报告Word格式文档下载.docx
- 文档编号:22324607
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:20
- 大小:39.14KB
C++课程设计福彩游戏设计报告Word格式文档下载.docx
《C++课程设计福彩游戏设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C++课程设计福彩游戏设计报告Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
原程序的开奖过程比较简单,只是输出随机数结果,没有一般摇奖的效果,可以将程序加以改进,使随机数不断变换显示,最后停在大奖号码上,这样效果更加逼真。
voidCWelfareLot:
SetLot()
{intnRnd,nNum;
for(inti=0;
i<
6;
i++)//要开出6个数字
{nRnd=rand();
//随机取循环次数,数字变换的时间长度是随机的
for(intj=0;
j<
nRnd;
j++)
{nNum=rand()%21;
//随机取0~20之间的数字进行变化
if(nNum<
10)
cout<
<
nNum<
’\b’;
/*当取的数字小于10,即一位数,显示后光标左移一位,再继续变换的数字将原数字覆盖,出现摇奖效果*/
else
cout<
’\b’<
//当取的数字是两位数,左移两位
}
“”;
LotNum[i]=nNum;
//变换到最后的数字即为大将数字
(3)程序的进一步改进
①原程序要求玩家提供计算机随机数的种子,但如果种子固定,那么产生的随机数也固定,大奖的号码每次都相同,达不到原游戏的目的。
我们还是用当前的时间作为随机数种子去顺序产生随机值,使得大奖号码都是随机的。
②如果大奖号码纯粹是随机数,那么玩家获得大奖几乎是不可能的,所有的玩家玩家都希望在游戏中找到乐趣,所以可以将游戏稍稍改进一下,用指定的用户名和密码进入,首先预定好大奖号码,开奖的操作照常进行,只不过停止变换后显示的数字是我们预定的,这样就可以使您成为虚拟世界的百万富翁!
三、关键源代码注解
Ⅰ定义用户类:
classperson//用户类
charcode[20];
//用户输入的数字
intmoney;
//用户拥有的彩金
friendclassGame;
//将输入数字作为福彩类的友元函数
};
Ⅱ定义福彩类私有成员:
classGame//福彩类
intplay;
//记录游戏者当前所在的局数
intball;
//记录游戏者总共玩的局数
intscore;
//记录游戏者赢的局数
charname[20];
//储存游戏者的姓名
charReply2;
//储存游戏者输入的字符y或n
intseed;
//储存游戏者输入的幸运数字
intPowerBall;
//储存游戏者输入的PowerBall数字
inttotal;
//记录游戏者得的总分数
intlevel;
//储存游戏者所选的数字范围
intrule;
//储存游戏者所选的游戏规则
inttruematch[6];
//记录每个数字得的分数
intnum[5];
//记录游戏者输入的whiteballl数字
intcp_num[6];
//储存电脑所产生的随机数
intbet;
//赌注
intx;
//记录游戏等级
charReply3;
Ⅲ定义福彩类公有成员并构造相应函数:
public:
Game()//构造函数初始化赌资,游戏者当前所在的局数,游戏者总共玩的局数,游戏者赢的局数
{
player.money=100;
play=1;
ball=0;
score=0;
}
voidgameboy1()//初始化姓名
cout<
endl;
"
请输入您的姓名:
[1to20characters]:
"
;
cin.getline(name,20);
}
voidset()//设置密码
您是否要设置密码[yorn]:
charreply5;
cin>
>
reply5;
if(reply5=='
y'
||reply5=='
Y'
)
{
charch;
inti=0;
请设置高级玩家密码:
cout.flush();
//清输出缓冲区
ch=getch();
while(ch!
='
#'
)//当输入#字符时循环结束
{
player.code[i++]=ch;
'
*'
cout.flush();
ch=getch();
}
player.code[i]=0;
\t\t密码载入中,请稍候........"
wait(2000);
//真实性处理
system("
cls"
//执行系统命令,清屏
elsestrcpy(player.code,"
1111"
voidmenu()//选择游戏规则
#游戏规则#"
1大奖:
当输入的6个数字全部匹配时游戏者赢!
若赢您可获得所下赌注三倍的奖金,若输您将失去同样多的金额!
************************************************************"
2二等奖:
当输入的6个数字中至少有4个匹配时游戏者赢!
若赢您可获得所下赌注两倍的奖金,若输您将失去同样多的金额!
3三等奖:
当输入的6个数字中至少有2个匹配时游戏者赢!
若赢您可获得与您所下赌注相等的奖金,若输您将失去同样多的金额!
name<
请选择游戏规则[1or2or3]:
cin>
x;
//输入所选的游戏规则
while(x!
=1&
&
x!
=2&
=3)//判断输入的数字是否合乎要求
cout<
请重新选择!
1or2or3"
cin>
//重新输入数字
}
switch(x)//根据输入的数字来确定游戏规则
case1:
rule=6;
break;
case2:
rule=4;
case3:
rule=2;
数据载入中,请稍侯……"
wait(2000);
system("
void_level()//选择游戏的难易程度
#游戏难易程度说明#"
e:
简单,在1--20中选择号码!
h:
困难,在1--40中选择号码!
(若赢奖金在原基础上增加一倍哦!
)"
请选择游戏难易程度:
Reply3;
while(Reply3!
e'
Reply3!
h'
)//判断输入的字符是否合乎要求
请重新输入!
eorh"
//重新输入字符
switch(Reply3)//根据输入的字符初始化数字范围确定游戏难易
case'
level=20;
level=40;
intgetgamenbr()//根据时间初始化随机数种子并产生随机数
intran;
srand((unsigned)time(NULL));
ran=rand()%level+1;
//在已确定的范围内产生随机数
return(ran);
voidwait(intmilli)//延时函数,产生多个种子
clock_tstart;
start=clock();
while((clock()-start)<
milli);
void_show()//设置游戏提示信息
-------------------------------\n"
*欢迎来到福彩中心!
祝您好运!
*\n"
#游戏说明#\n"
1.本游戏设置了普通玩家与高级玩家,高级玩家可设定大奖号码;
2.高级玩家密码可先设定,不设则采用默认密码(1111)."
voidBET()//设置赌注
\n'
您拥有金钱:
¥"
player.money<
请输入您的赌注金额:
bet;
if(bet<
0)
bet=bet*(-1);
voidmoney_show()
voidsetlot()//开奖过程
intnr,nn;
for(inti=0;
i++)
nr=rand();
for(intj=0;
nr;
nn=getgamenbr();
//调用成员函数来产生随机数
if(nn<
cout<
nn<
\b'
else
cp_num[i]=nn;
//将随机数储存在一维数组cp_num[i]中
wait(800);
}
voidgameover()//游戏结束并显示信息结束程序
’\n’<
你一共玩了"
ball<
局,赢了"
score<
局!
谢谢你的参与!
-)"
exit
(1);
//结束程序
void_do()//游戏的执行函数
_show();
gameboy1();
set();
do
{menu();
system("
_level();
Game:
BET();
cout<
\n"
请输入whiteball号码\n"
//游戏者输入whiteball号码
intj;
//记录循环次数
for(j=0;
j<
5;
j++)
cout<
输入球号码#"
j+1<
while(!
(cin>
num[j]))//检验输入的字符是否符合条件
{
cin.clear();
//清除错误字符
while(!
(cin.get()=='
))//提取完在缓冲区中的字符或字符串
continue;
cout<
对不起,您输入的数字不符合要求!
请在1--"
level<
中选择号码!
//显示重新输入的提示信息
}
if((num[j]<
1))//检验输入的数字是否小于确定范围中的最小值
对不起,您输入的号码小于1!
\n"
j--;
if((num[j]>
level))//检验输入的数字是否大于确定范围中的最大值
对不起,您输入的号码大于"
!
请在1--"
}
请输入PowerBall号码:
//显示出要求玩家输入PowerBall号码的提示信息
cin>
PowerBall;
//输入PowerBall号码
charans;
是否要成为高级玩家:
[yorn]"
ans;
intpanduan=0;
if(ans=='
||ans=='
)
{
chargao[20];
//验证密码
charch;
请输入高级玩家验证密码(以#字符结束):
gao[i++]=ch;
gao[i]=0;
if(!
strcmp(player.code,gao))//默认密码处理
wait(2000);
\t\t您已通过密码验证"
请输入六个数字作为大奖号码"
for(intj=0;
j++)
cin>
cp_num[j];
panduan=1;
elsecout<
\t\t密码错误"
if(panduan==0)setlot();
//调用开奖成员函数产生随机数
//调用成员函数来检验玩家输入的数字是否与电脑产生的随机数相匹配并将得分储存在数组truematch[6]中
truematch[0]=isMatch(num[0],cp_num);
truematch[1]=isMatch(num[1],cp_num);
truematch[2]=isMatch(num[2],cp_num);
truematch[3]=isMatch(num[3],cp_num);
truematch[4]=isMatch(num[4],cp_num);
truematch[5]=isMatch(PowerBall,cp_num);
total=(truematch[0]+truematch[1]+truematch[2]+truematch[3]+truematch[4]+truematch[5]);
//计算总得分
//显示游戏结果
\n*********"
cout<
\n第"
play<
局"
\n*********\n"
cout<
//显示电脑产生的随机数
电脑产生的号码为:
cp_num[0]<
cp_num[1]<
cp_num[2]<
cp_num[3]<
cp_num[4]<
PB"
cp_num[5]<
---------------------------------------------------------------------------\n"
//显示玩家选择的数字
您选择的号码为:
num[0]<
num[1]<
num[2]<
num[3]<
num[4]<
PowerBall<
//显示玩家选择的各个数字的得分情况
cout<
您猜中的有(猜中为1,不中为0):
truematch[0]<
truematch[1]<
truematch[2]<
truematch[3]<
truematch[4]<
truematch[5];
//显示玩家的总得分
\n猜中总数为:
total<
\n\n"
if(total>
=rule)//根据总分判断玩家是否赢得此局
恭喜"
您赢了!
score++;
//记录赢的局数
switch(Reply3)//计算玩家剩余金额
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;
您想继续游戏吗?
[yorn]"
//询问玩家是否要继续游戏
Reply2;
//输入字符以确定是否要继续
play=play+1;
//局数加一
//记录总共玩的局数
while(Reply2=='
||Reply2=='
//当输入'
字符时继续游戏否则循环结束
gameover();
friendintisMatch(inttest,intcp_num[]);
//将用户的输入的数字与福彩号码的比较函数定义为福彩类的友元函数
intisMatch(inttest,intcp_num[])//test为所要判断的数字
intmatch=0;
//记录得分
for(inti=0;
i<
i++)//与电脑产生的所有数字对比
if(test==cp_num[i])match=1;
//如果匹配则得分为1
returnmatch;
//返回得分值
Ⅳ主函数:
voidmain(void)//主函数
Gameplayer1;
//建立对象
player1._do();
//游戏的执行过程
四、设计过程中遇到的问题及解决办法
(1)用当前时间作为随机数种子产生的随机数相同。
时间间隔太小,将wait函数中的暂停时间延长
(2)虽然有开奖效果,但开出的数与产生的随机数不同。
开奖函数中取了一次随机数,函数外又以时间为种子取了一次随机数,两次操作独立开了,将开奖函数中的取随机数改为以时间为种子,删除函数外的
(3)游戏进行中如果游戏者成为高级玩家,那么大奖号码由玩家自己定,不需要电脑产生随机数作为大奖号码,所以在程序执行过程中就需要跳过产生随机数的函数,开始我使用goto成功跳过了随机数函数,但将用户输入的数字与福彩号码的比较函数定义为福彩类的友元函数后编译出现了问题,无法调用该函数。
不使用goto,增加一个if比较函数,如果返回值是1,则执行随机数函数,否则不执
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计 福彩 游戏 设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)