作者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
推 rockmyangel:揪甘心!!! 06/07 20:16
推 hi29629508:快拜 06/07 21:53
推 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)