纸牌游戏Go Fish实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

纸片游戏Go Fish课程设计

一目的

通过对GO FISH的课程设计,明白数据结构设计理念,理解并掌握链表的操作,进一步的了解数据结构的含义。

二需求分析

决定玩家的数量,先简单化,建立两个玩家,完成设计;1、确定数据结构模版;2、建立数据结构类型;3、完成数据操作;4、确立算法设计。

三概要设计

1、数据结构设计

该课程设计采用链表和类相结合模式,建立牌堆和牌操作的链表结构:

class Card

{

public:

void NewCard();//新建牌

void Shuffle();//洗牌

int Licensing(int n);//发牌

private:

int CARD_A[52];

};

牌堆类:采用整型数组建立牌堆,并用随机数打乱牌序。

class Node

{

public:

Node();

Node(int value,Node *next);//初始化节点构造函数

int ListLength(Node* L); //链表的计数

int Search(Node* L , int num); //链表的查找

Node* head_Insert(Node* head , int num);//从表头插入节点

Node* Delete(Node* head , int num); //删除节点

void Print(Node *head);//链表输出

private:

int card_num;

char clore;

Node *Link;

采用链表结构方式,来构造玩家手牌。用链式结构进行操作进行删除和插入。

2、算法函数

int Scoring(NodePtr &player,int score)//计分;

int Players_operations(NodePtr &player1,NodePtr &player2,int Choose,int i,Card CardBign)//玩家操作;

两个函数分别用来计算与进行牌的操作。

2、主函数

main();//主函数

主函数进行数据接收和输出显示。

四详细设计

1、类的构造与实现

类的构造:

class Card

{

public:

void NewCard();//新建牌

void Shuffle();//洗牌

int Licensing(int n);//发牌

private:

int CARD_A[52];

};

class Node

{

public:

Node();

Node(int value,Node *next);//初始化节点构造函数

int ListLength(Node* L); //链表的计数

int Search(Node* L , int num); //链表的查找

Node* head_Insert(Node* head , int num);//从表头插入节点

Node* Delete(Node* head , int num); //删除节点

void Print(Node *head);//链表输出

private:

int card_num;

char clore;

Node *Link;

typedef Node* NodePtr;

类的实现:

采用两个构造函数,根据不同的调用对节点进行不同的初始化:

Node::Node()

{

card_num=0;

Link=NULL;

}

Node::Node(int value, Node *next)

{

card_num=value;

Link=next;

}

链表的计数,对链表的长度进算计算,返回一个整型计录链表的长度,方便链表的操作:

int Node::ListLength(Node* L)

{

Node *p;

p=L;

int count=0;

while(p->Link)

{

count++;

p=p->Link;

}

return count;

}

链表的插入,采用表头插入的方法:

Node* Node::head_Insert(Node* head,int num)

{

Node *p0;

p0=new Node;

p0->card_num=num;

p0->Link=head;

head=p0;

return head;

}

链表的查找,调用链表长度计数函数,用for循环来实现链表的查找:

int Node::Search(Node* L , int num)

{

int count=0,Length;

Node *p1;

p1=new Node;

p1=L;

Length=p1->ListLength(p1);

if(L==NULL)

return count;

for(int i=0;i<=Length;i++)

{

if(p1->card_num==num)

{

count++;

p1=p1->Link;

}

else

{

p1=p1->Link;

}

}

return count;

}

链表的输出,在输出时将1、11、12、13转换为A、J、Q、K:void Node::Print(Node *head)

{

Node *p=head;

while(p->card_num!=0)

{

if(p->card_num==1)

cout<<'A'<<' ';

else if(p->card_num==11)

cout<<'J'<<' ';

else if(p->card_num==12)

cout<<'Q'<<' ';

else if(p->card_num==13)

cout<<'K'<<' ';

else

cout<card_num<<' ';

相关文档
最新文档