标题:[讨论]一个小程序21点
取消只看楼主
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
 问题点数:0 回复次数:11 
[讨论]一个小程序21点

今个闲着无聊 编了个21点的小程序 望大家多多指点啊!
#include <iostream>
#include <stdlib.h>
using namespace std;
class point21
{public:
void Sru();
void Cli();
void display();
private:
int a;
int b;
};
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()%21;cout<<"您的luck num是:"<<a<<endl;}
if(rand()%2==1)
{b+=rand()%21;}
if(c=='n'||c=='N')
i=0;
void clear();
}
}
void point21::Cli()
{cout<<"您的luck num是:"<<a<<" "<<"电脑的luck num是:"<<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()
{if(a<b){cout<<"您胜利"<<endl;}
else if(a>b){cout<<"您输了"<<endl;}
else {cout<<"平局"<<endl;}
}
int main()
{point21 D;int i=0;
cout<<"欢迎您来到21点游戏世界"<<endl;
do
{
D.Sru();
D.Cli();
D.display();
cout<<"您要继续吗? 继续请按1,退出请按0。"<<endl;
cin>>i;
}
while(i==1);
cout<<"欢迎再来"<<endl;
return 0;
}
我这个程序算不算是面向对象了啊?

搜索更多相关主题的帖子: void int rand 
2006-07-21 15:21
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 
不会吧  就是要牌啊 根据自己的点数 来决定自己还要不要牌 最后把所有的牌的点数累加看谁离21最近 谁就胜啊 超出21就算输

[此贴子已经被作者于2006-7-21 15:48:12编辑过]



2006-07-21 15:46
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 
[讨论]重新更该了一下 但出了点问题望赐教啊
#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;
}
我的金币数总是被构造函数归值,不能达到累加的效果!望大家指点啊。
我总是想把金钱的处理和游戏的处理分开来,等要对金钱进行处理的时候再调用相关的函数。但是我发现总是不能如愿。
不知哪位高手能帮我修改一下,让我从中有所借鉴!谢谢。

[此贴子已经被作者于2006-7-22 11:37:26编辑过]


2006-07-22 11:36
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 
谢谢提的宝贵意见 我会加油的 也希望有一天能和斑竹一样能帮助别人

2006-07-22 15:17
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 
注意你的随机数,是伪随机数,要用种子才行,不然每次出的点数顺序一样;
这个问题我也注意到了 ,但如何才能让它真是的随机呢。你指的种子是什么意识啊?是这个吗?#include <ctime>

2006-07-22 17:07
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 

10楼的 两个都是爆牌啊 当然是平局了


2006-07-24 23:53
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 

我又对程序做了点修改
#include <iostream>
#include <stdlib.h>
#include <ctime>
using namespace std;
//金钱类
class money
{public:
money(){M=50;}
int shift(int a,int b);
private:
int M;
};
//21点类
class point21
{public:
void Sru();
void Cli();
void display();
private:
int a;
int b;
money c;
};
//21点程序
void point21::Sru()
{int i=1,j=0; char c;
b=0;a=0;
srand(time(0));
while(j==0)
{if(b<13)
{if(rand()%6<4)
b+=(rand()%9+1);}
else if(b>=13&&b<=21)
{if(rand()%6<2)
b+=(rand()%9+1);}
if(b>18)j=1;
}
while(i==1)
{
cout<<"要牌请按Y/y,亮牌请按T/t: "<<endl;
cin>>c;
if(c=='y'||c=='Y')
{a+=(rand()%9+1);cout<<"您的牌点是:"<<a<<endl;}
if(c=='T'||c=='t')
i=0;}
}
void point21::Cli()
{cout<<"您的牌点是:"<<a<<" "<<"电脑的牌点是:"<<b<<endl;
a=21-a;
b=21-b;
}
void point21::display()
{int x;
if(a>=0&&b>=0)
{if(a<b)
{
cout<<"您胜利赢了10枚金币"<<endl;
cout<<"您还有 "<<c.shift(10,x=1)<<" 枚金币"<<endl;}
else if(a>b)
{
cout<<"您输了10枚金币"<<endl;
cout<<"您还有 "<<c.shift(10,x=0)<<" 枚金币"<<endl;}
else {
cout<<"平局"<<endl;
cout<<"您还有 "<<c.shift(0,x=-1)<<" 枚金币"<<endl;}
}
else if(a<0&&b>=0)
{cout<<"您爆牌了,输了20枚金币"<<endl;
cout<<"您还有 "<<c.shift(20,x=0)<<" 枚金币"<<endl;}
else if(a>=0&&b<0)
{cout<<"电脑爆牌了您赢了20枚金币"<<endl;
cout<<"您还有 "<<c.shift(20,x=1)<<" 枚金币"<<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;
cout<<"游戏开始:";
}
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();
if(D.display()==0)break;
cout<<"您要在来一局吗? 按1键继续,退出请按q。"<<endl;
cin>>i;
}
while(int(i)!='q');
cout<<"欢迎再来"<<endl;
return 0;
}


2006-07-24 23:54
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 
斑竹

斑竹你好:
谈点题外话,学了C++也有段时间了,想出去找点这方面的工作。
我也算是这个板块的常客了,也得到斑竹得不少帮助,我想斑竹对我也有所了解了吧?所以想问问斑竹,以我目前得能力能不能到外面去找这方面得工作。
斑竹乃世外高人也,我想一定能有真知灼见得。

[此贴子已经被作者于2006-7-25 0:05:13编辑过]


2006-07-24 23:59
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 
斑竹要沉下去了 快来看看啊 给点意见也行

2006-07-26 12:10
心动音符
Rank: 1
等 级:禁止访问
威 望:1
帖 子:832
专家分:0
注 册:2005-9-15
得分:0 

你这不是刺激我的吗 我都快有1年了 还没方向呢 天天都不知道怎么过的 我天天就只知道看书但也没办法啊 除了看书也没别的方法啊


2006-07-26 14:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-79568-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.906055 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved