纸牌游戏21点实验设计报告Word下载.docx

上传人:b****1 文档编号:1572862 上传时间:2023-05-01 格式:DOCX 页数:29 大小:108.43KB
下载 相关 举报
纸牌游戏21点实验设计报告Word下载.docx_第1页
第1页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第2页
第2页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第3页
第3页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第4页
第4页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第5页
第5页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第6页
第6页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第7页
第7页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第8页
第8页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第9页
第9页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第10页
第10页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第11页
第11页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第12页
第12页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第13页
第13页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第14页
第14页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第15页
第15页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第16页
第16页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第17页
第17页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第18页
第18页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第19页
第19页 / 共29页
纸牌游戏21点实验设计报告Word下载.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

纸牌游戏21点实验设计报告Word下载.docx

《纸牌游戏21点实验设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《纸牌游戏21点实验设计报告Word下载.docx(29页珍藏版)》请在冰点文库上搜索。

纸牌游戏21点实验设计报告Word下载.docx

如果二者的总分相同,则玩家与庄家打成平局。

(1)将所有的函数与相应的数据封装到类中,并改写主程序,使程序简化。

(2)序中一共有13张扑克牌可以随机抽取,大于10的点数为10,A根据情况点数不同,当前点数小于11时为11点,大于10时则为1点。

(3)要求庄家永远不会暴庄,即庄家可以查看下一张牌,若大于21点,则拒绝,当然,在游戏规则上不能泄露这点秘密。

(4)将界面的提示说明全部设计为中文界面,界面的解释详细友好,可以吸引更多的玩家。

3.需求分析

设计程序的的主要目的是编写程序模拟游戏。

游戏为纸牌游戏——“21点,”也叫"

BlackJack"

即黑杰克,该游戏适用于手机,也是网上比较流行的小游戏之一。

游戏以计算机作为庄家,1—7个人作为普通玩家参与游戏。

可用字符代表扑克牌面值(A,2,3,4,5,6,7,8,9,10,J,Q,K)和花色(梅花C,方块D,红心H,黑桃S),模拟实质扑克进行游戏。

方便大众在空闲时一个人就可以达到多人娱乐的效果!

四.概要设计

4.1 系统中类类型定义及系统各类类成员功能说明

“21点游戏”程序中的类

基类

说明

Card

一张扑克牌

Hand

一手牌,Card对象集合

Deck

一副牌它具有Hand所不具备的额外功能,如洗牌和发牌

GenericPalayer

一个抽象玩家,具有庄家和玩家的共同元素

Player

GenericPalayer

普通玩家

House

庄家

Game

一个游戏

4.2系统各类间关系

Card类

成员

rankm-Rank

牌的面值。

Rank是13个面值等级的枚举

suitm-Suit

牌的花色。

Suit是4花色的枚举

boolm-IsFace

标示牌是否正面朝上的状态,正面朝上为true,否则false

intGetVable()

返回牌面值所对应的分值

Hand类

vector<

card*>

m-Cards

牌面向量,存储指向Card对象指针

voidAdd(Card*pCard)

向手中添加一张牌,即将一个指向Card的指针添加到向量m-Cards中

voidClear()

清除手中所有牌,即删除向量m-Card中的所有指针删除所有动态创建Card对象

intGetTotal()const

返回这首派总值

GenericPalayer类(抽象类)

sringm-Name

通用玩家的名字

vrtualboolIsHitting

()const=0

指出通用玩家是否想要另一张牌,纯属函数

boolIsBusted()const

指出通用玩家是否引爆

voidBust()const

宣布通用玩家引爆

Player类

()const

指出玩家是否想要另一张牌

voidWin()const

宣布玩家获胜

voidLose()const

宣布玩家失败

voidPush()const

宣布玩家获得平局

House类

指出玩家是否再拿一张牌

Deck类

voidPopulate()

创建一共52张的标准扑克牌

voidShuffle()

洗牌

voidDeal(Hand&

Hand)

将一张牌发到一手中

voidAdditionalCards(GenericPalayer&

GenericPalayer)

只要通用玩家可以并且想要另一张牌,则在给他发一张牌

Game类

Deckm-Deck

一副牌

Housem-House

Player>

m-Player

普通玩家的集合,Player对象的一个向量

voidPlay()

玩一局游戏

五.详细设计

5.1数据类型定义及伪代码描述

1.首先定义表示扑克牌花色与面值的枚举类型,这样程序可读性更强

2.其次,方法Game()用来运行游戏,下面为用伪代码描述的整个游戏的流程:

给庄家和玩家发最初的二张牌

隐藏庄家的第一张牌

显示庄家和玩家手中的牌

依次向玩家发额外的牌

显示庄家的第一张牌

给庄家发额外的牌

if(庄家引爆)

没有引爆的玩家人赢

引爆的玩家平局

else

for(每个玩家)

if(玩家没有引爆且玩家的总分比庄家大)宣布玩家赢

elseif(玩家的总分与庄家相等)宣布平局

else宣布玩家赢

5.2系统主要子程序详细设计(加注释的源程序)

(1)新建头文件Card.h,为一张单独的扑克牌定义Card类。

#ifndef_Card_h_

#define_Card_h_

#include<

iostream>

usingnamespacestd;

classCard

{

public:

enumrank{ACE=1,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING};

enumsuit{CLUBS,DIAMONDS,HEARTS,SPADES};

Card(rankr=ACE,suits=SPADES,boolifu=true);

//friendostream&

operator<

<

(ostream&

os,constCard&

aCard);

intGetValue()const;

voidFlip();

rankm_Rank;

suitm_Suit;

boolm_IsFaceUp;

};

#endif

(2)新建头cpp文件Card.cpp,实现Card类。

#include"

Card.h"

Card:

:

Card(rankr,suits,boolifu):

m_Rank(r),m_Suit(s),m_IsFaceUp(ifu)

{}

intCard:

GetValue()const

{intvalue=0;

if(m_IsFaceUp)

{value=m_Rank;

if(value>

10)value=10;

}

returnvalue;

voidCard:

Flip()

{m_IsFaceUp=!

(m_IsFaceUp);

(3)新建头文件Hand.h,为纸牌的集合定义Hand类。

#ifndef_Hand_h_

#define_Hand_h_

#include"

vector>

classHand

{public:

Hand();

virtual~Hand();

voidAdd(Card*pCard);

voidClear();

intGetTotal()const;

vector<

Card*>

m_Cards;

(4)新建Cpp文件Hand.cpp,实现Hand类。

Hand.h"

Hand:

Hand()

{m_Cards.reserve(7);

~Hand()

{Clear();

voidHand:

Add(Card*pCard)

{m_Cards.push_back(pCard);

Clear()

{vector<

iteratoriter=m_Cards.begin();

for(iter=m_Cards.begin();

iter!

=m_Cards.end();

++iter)

{delete*iter;

*iter=0;

m_Cards.clear();

intHand:

GetTotal()const

{if(m_Cards.empty())return0;

if(m_Cards[0]->

GetValue()==0)

return0;

inttotal=0;

const_iteratoriter;

total+=(*iter)->

GetValue();

boolcontainsAce=false;

if((*iter)->

GetValue()==Card:

ACE)

containsAce=true;

if(containsAce&

&

total<

=11)

total+=10;

returntotal;

(5)新建头文件GenericPlayer.h,为通用玩家定义抽象的GenericPlayer类。

#ifndef_GenericPlayer_h_

#define_GenericPlayer_h_

string>

classGenericPlayer:

publicHand

public:

friendostream&

operator<

(ostream&

os,constGenericPlayer&

aGenericPlayer);

GenericPlayer(conststring&

name="

"

);

virtual~GenericPlayer();

virtualboolIsHitting()const=0;

boolIsBusted()const;

voidBust()const;

stringm_Name;

(6)新建cpp文件GenericPlayer.cpp,实现GenericPlayer类的成员函数。

//#include"

stdafx.h"

GenericPlayer.h"

GenericPlayer:

GenericPlayer(conststring&

name):

m_Name(name)

~GenericPlayer()

boolGenericPlayer:

IsBusted()const

return(GetTotal()>

21);

voidGenericPlayer:

Bust()const

cout<

m_Name<

"

引爆!

\n"

;

(7)新建头文件PlayerHouse.h,从GenericPlayer类派生Player类和House类。

#ifndefPlayerHouse_h

#definePlayerHouse_h

classPlayer:

publicGenericPlayer

Player(conststring&

virtual~Player();

virtualboolIsHitting()const;

voidWin()const;

voidLose()const;

voidPush()const;

classHouse:

House(conststring&

庄家"

virtual~House();

voidFlipFirstCard();

(8)新建cpp文件PlayerHouse.cpp,实现Player类和House类的成员函数。

PlayerHouse.h"

Player:

GenericPlayer(name)

~Player()

boolPlayer:

IsHitting()const

{cout<

你想再要一张牌吗?

(Y/N):

charresponse;

cin>

>

response;

return(response=='

y'

||response=='

Y'

voidPlayer:

Win()const

恭喜你,你赢了!

\n"

Lose()const

很遗憾,你输了!

Push()const

平局,加油!

House:

~House()

boolHouse:

{return(GetTotal()<

=16);

voidHouse:

FlipFirstCard()

{if(!

(m_Cards.empty()))

m_Cards[0]->

Flip();

elsecout<

没有扑克牌翻动!

(9)新建头文件Deck.h,从Hand类派生Deck类,表示一副牌。

#ifndefDeck_h

#defineDeck_h

classDeck:

Deck();

virtual~Deck();

voidPopulate();

voidShuffle();

aHand);

voidAdditionalCards(GenericPlayer&

aGenericPlayer);

(10)新建cpp文件Deck.cpp,实现Deck类的成员函数。

Deck.h"

algorithm>

Deck:

Deck()

{m_Cards.reserve(52);

Populate();

~Deck()

voidDeck:

Populate()

for(ints=Card:

CLUBS;

s<

=Card:

SPADES;

++s)

for(intr=Card:

ACE;

r<

KING;

++r)

Add(newCard(static_cast<

rank>

(r),static_cast<

suit>

(s)));

Shuffle()

{random_shuffle(m_Cards.begin(),m_Cards.end());

Deal(Hand&

aHand)

m_Cards.empty())

{aHand.Add(m_Cards.back());

m_Cards.pop_back();

Outofcards.Unabletodeal."

AdditionalCards(GenericPlayer&

aGenericPlayer)

endl;

while(!

(aGenericPlayer.IsBusted())&

aGenericPlayer.IsHitting())

{Deal(aGenericPlayer);

cout<

aGenericPlayer<

if(aGenericPlayer.IsBusted())aGenericPlayer.Bust();

}

(11)新建头文件Game.h定义Game类表示21点游戏。

#ifndef_Game_h_

#define_Game_h_

classGame

Game(constvector<

names);

~Game();

voidPlay();

private:

Deckm_Deck;

Housem_House;

m_Players;

(12)新建cpp文件Game.cpp,实现Game类的成员函数。

Game.h"

ctime>

Game:

names)

const_iteratorpName;

for(pName=names.begin();

pName!

=names.end();

++pName)

m_Players.push_back(Player(*pName));

srand(time(0));

m_Deck.Populate();

m_Deck.Shuffle();

~Game()

{}

voidGame:

Play()

{

//将最初的两张牌发给每一个人

iteratorpPlayer;

for(inti=0;

i<

2;

++i)

{

for(pPlayer=m_Players.begin();

pPlayer!

=m_Players.end();

++pPlayer)

m_Deck.Deal(*pPlayer);

m_Deck.Deal(m_House);

//隐藏庄家的第一张牌

m_House.FlipFirstCard();

//显示每个人的一张牌

for(pPlayer=m_Players.begin();

*pPlayer<

m_House<

//向玩家发额外的牌

m_Deck.AdditionalCards(*pPlayer);

//显示庄家的第一张牌

endl<

m_House;

//向庄家发额外的牌

m_Deck.AdditionalCards(m_House);

if(m_House.IsBusted())

//仍然在玩的所有人都获胜

if(!

(pPlayer->

IsBusted()))pPlayer->

Win();

else

{

//将仍然在玩的各个玩家与庄家做比较

IsBusted()))

if(pPlayer->

GetTotal()>

m_House.GetTotal())pPlayer->

elseif(pPlayer->

GetTotal()<

Lose();

elsepPlayer->

Push();

//删除每个人的牌

pPlayer->

Clear();

m_House.Clear();

(13)新建cpp文件Main.cpp编写游戏程序的主函数,并实现重载的operator<

()函数.

Game.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2