|
发表于 2009-11-4 00:33:19
|
显示全部楼层
IP:江苏扬州
#include <iostream>
#include <stdlib.h>
using namespace std;
//21点类
class point21
{public:
void Sru();
void Cli();
void display();
private:
int a;
int b;
};
//金钱类
class money
{public:
money(){M=50;}
int shift(int a,int b);
private:
int M;
};
//21点程序
void point21::Sru()
{int i=1; char c;
b=0;a=0;
while(i==1)
{
cout<<"是否要牌(是<y/Y>,否<n/N>): "<<endl;
cin>>c;
if(c=='y'||c=='Y')
{a+=rand()%10;cout<<"您的牌点是:"<<a<<endl;}
if(rand()%2==1)
{b+=rand()%10;}
if(c=='n'||c=='N')
i=0;
}
}
void point21::Cli()
{cout<<"您的牌点是:"<<a<<" "<<"电脑的牌点是:"<<b<<endl;
if(a>21&&b>21)a=b;
else if(a<=21&&b>21)a=21;
else if(a>21&&b<=21)b=21;
a=abs(21-a);
b=abs(21-b);
}
void point21::display()
{int x;
money c;
if(a<b)
{
cout<<"您胜利"<<endl;
cout<<"您还有 "<<c.shift(10,x=1)<<" 枚金币"<<endl;}
else if(a>b)
{
cout<<"您输了"<<endl;
cout<<"您还有 "<<c.shift(10,x=0)<<" 枚金币"<<endl;}
else {
cout<<"平局"<<endl;
cout<<"您还有 "<<c.shift(0,x=-1)<<" 枚金币"<<endl;}
}
//欢迎界面
void welcome()
{
cout<<" #########################"<<endl;
cout<<" # #"<<endl;
cout<<" # 21点 #"<<endl;
cout<<" # 欢迎您 #"<<endl;
cout<<" # #"<<endl;
cout<<" #########################"<<endl;
cout<<"游戏规则:"<<endl;
cout<<"在游戏中,每个玩家都争取拿到最接近21点的牌,<可以多次要牌,然后点数累加>;但是不能超过21点,超过为“爆牌”即失败,只有最接近21点的人才有可能得到胜利。"<<endl;
}
int money::shift(int a,int b)
{if(b==1)
M+=a;
else if(b==0)
M-=a;
return M;
}
int main()
{point21 D;char i;
welcome();
do
{
D.Sru();
D.Cli();
D.display();
cout<<"您要在来一局吗? 按1键继续,退出请按q。"<<endl;
cin>>i;
}
while(int(i)!='q');
cout<<"欢迎再来"<<endl;
return 0;
}
我的金币数总是被构造函数归值,不能达到累加的效果!望大家指点啊。
我总是想把金钱的处理和游戏的处理分开来,等要对金钱进行处理的时候再调用相关的函数。但是我发现总是不能如愿。
不知哪位高手能帮我修改一下,让我从中有所借鉴!谢谢。 |
|