作者yantchen (球童Yanting)
看板NTUE-CS101
标题Re: [课业] 骰子和扑克牌
时间Sun Jun 7 01:55:57 2009
: 1. 游戏父类别: 储存姓名跟分数
: 2. 游戏子类别继承父类别
: 3. "选择游戏"的画面
: 4. 两个游戏的内容
: 5. 存档
游戏一 : 骰子
这应该很简单 不用考虑点数有没有重复
虽然他没有规定骰子要不要用物件 这里我还是用一下
class dice
{
int point;
public:
int play()
{
point=rand()%6+1;
return point;
}
int getpoint()
{
return point;
}
};
两个游戏都会用到乱数 所以记得在main的第一行要加上
int main()
{
srand(time(NULL));
...
然後来看游戏主回圈
class game1 : public game
{
dice d;
public:
void play()
{
int com, ply;
inputname(); // 输入名子 ( 这个函数是 game 继承下来的 )
for(int i=1;i<=10;i++) // 题目指定连玩10次
{
cout<<"你先丢";
system("pause");
ply = d.play(); // 骰子的 play 函数有 return 点数
cout<<"你的点数是"<<ply<<"\n\n";
cout<<"换我罗";
system("pause");
com = d.play();
cout<<"电脑的点数是"<<com<<"\n\n";
cout<<"游戏结果\n\n";
if(ply>com)
{
cout<<"YOU WIN\n\n";
addpoint(10);
}
else if(ply<com)
{
cout<<"YOU, LOSER!!\n\n";
}
else
{
cout<<"DRAW\n\n";
}
}
}
};
游戏二 : 抽牌
先写扑克牌类别
class poker
{
int card[52]; // 把 52 张牌存在这里
int current; // 现在拿到第几张牌
public:
void wash()
{
int tmp[52]; // 看哪张牌被乱数产生过了
int i,c;
for(i=0;i<52;i++) tmp[i]=0; // 0代表还没产生过 1代表产生过了
for(i=0;i<52;i++)
{
do
{
c = rand()%
52; // 产生一个乱数
}while(tmp[c]==1); // 确认这个乱数没有产生过
card[i] = c; // 把这张牌(刚产生的乱数)放到card牌堆里
tmp[
c] = 1; // 记录产生过了
}
current = 0;
}
int get()
{
return card[current++]; // 传回current那张牌 然後把current加1
}
void showcard(int c) // 传入牌的编号 这个函数会把牌的外观cout出来
{
switch(c%4)
{
case 0: cout<<"梅花"; break;
case 1: cout<<"砖块"; break;
case 2: cout<<"红心"; break;
case 3: cout<<"黑桃"; break;
}
switch(c/4)
{
case 1: cout<<"A"; break;
case 11: cout<<"J"; break;
case 12: cout<<"Q"; break;
case 13: cout<<"K"; break;
default: cout<<c/4; break;
}
}
};
再写游戏物件
class game2 : game
{
poker p;
public:
void play()
{
int com, ply;
inputname(); // 输入名子 ( 这个函数是 game 继承下来的 )
p.wash(); // 先洗牌
for(int i=1;i<=10;i++) // 题目指定连玩10次
{
cout<<"你先抽";
system("pause");
ply = p.get();
cout<<"你的牌是";
p.showcard(ply);
cout<<"\n\n";
cout<<"换我罗";
system("pause");
com = p.get();
cout<<"电脑的牌是";
p.showcard(com);
cout<<"\n\n";
cout<<"游戏结果\n\n";
if(ply>com)
{
cout<<"YOU WIN\n\n";
addpoint(10);
}
else if(ply<com)
{
cout<<"YOU, LOSER!!\n\n";
}
}
}
};
搞定~
没有很想像中那麽难吧
试着看懂他
不要纯用抄的喔
毕竟我只是猜题
看懂他 这样考试的时候要是改了题目你也写的出来
加油~
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.42.74.9
1F:推 rockmyangel:揪甘心!!! 06/07 20:16
2F:推 hi29629508:快拜 06/07 21:53
3F:推 shooyu:113行的i是不是c呢?~ 06/07 22:55
谢谢提醒~
※ 编辑: yantchen 来自: 203.68.15.209 (06/07 23:49)
噢 我忘了扑克牌抽牌之前要先洗牌@@
※ 编辑: yantchen 来自: 203.68.15.209 (06/08 01:18)
ㄟ... 有个地方52打成51了 会变无穷回圈
※ 编辑: yantchen 来自: 203.68.15.209 (06/08 22:37)