纸牌游戏Go Fish实验报告.doc_第1页
纸牌游戏Go Fish实验报告.doc_第2页
纸牌游戏Go Fish实验报告.doc_第3页
纸牌游戏Go Fish实验报告.doc_第4页
纸牌游戏Go Fish实验报告.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计纸片游戏Go Fish课程设计一 目的通过对GO FISH的课程设计,明白数据结构设计理念,理解并掌握链表的操作,进一步的了解数据结构的含义。二 需求分析决定玩家的数量,先简单化,建立两个玩家,完成设计;1、确定数据结构模版;2、建立数据结构类型;3、完成数据操作;4、确立算法设计。三 概要设计1、数据结构设计该课程设计采用链表和类相结合模式,建立牌堆和牌操作的链表结构:class Cardpublic:void NewCard();/新建牌void Shuffle();/洗牌int Licensing(int n);/发牌private:int CARD_A52;牌堆类:采用整型数组建立牌堆,并用随机数打乱牌序。class Nodepublic: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 Cardpublic:void NewCard();/新建牌void Shuffle();/洗牌int Licensing(int n);/发牌private:int CARD_A52;class Nodepublic: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;icard_num=num)count+;p1=p1-Link;elsep1=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)coutAcard_num=11)coutJcard_num=12)coutQcard_num=13)coutK ;elsecoutcard_numLink;链表节点的删除:Node* Node:Delete(Node* head , int num)/设aCard是要删除的结点a中的数据成员Node *q,*p; /p用于指向结点a,q用于指向结a的前一个结点p = head; if(p-Link=NULL)return head;if(p-card_num=num)head=p-Link;delete p;elsewhile( p-card_num != num & p-Link != NULL) /查找结点a q = p; p = p-Link; if(p-card_num = num) /若有结点a q-Link=p-Link; delete p; return head; 牌的建立,用数组实现:void Card:NewCard()for(int i=0;i52;i+)CARD_Ai=i;洗牌操作,用随机数实现对数组的打乱操作:void Card:Shuffle()int F_num,L_num;srand(int)time(NULL);for(int i=0;i52;i+)F_num=CARD_Ai;L_num=rand()%52;CARD_Ai=CARD_AL_num;CARD_AL_num=F_num;/for(int j=0;j52;j+)/coutCARD_Aj ;/coutSearch(player2,Choose);if(card_choose=0)if(ihead_Insert(player1,GenerateCard);i+;elsefor(int card_in=0;card_inhead_Insert(player1,Choose);player2=player2-Delete(player2,Choose);return i;计分函数:int Scoring(NodePtr &player,int score)int card_choose;for(int i=1;iSearch(player,i);if(card_choose=4)for(int x=0;xDelete(player,i);score+;return score;3、主函数 在主函数中实现了牌的转换,将051的数字进行除13取余并加1录入链表当中,将链表中的数转为牌类的13点数据:mainCard CardBign;char c;int score_one=0,score_two=0,score=0,x=1,y=1;int card_choose=0,Choose;CardBign.NewCard();CardBign.Shuffle();Node *player1,*player2;player1=new Node(NULL,NULL);player2=new Node(NULL,NULL);for(int i=0;ihead_Insert(player1,GenerateCard);elseGenerateCard=CardBign.Licensing(i)%13+1;player2=player2-head_Insert(player2,GenerateCard);Print_PlayerScore(player1,player2,score_one,score_two);Scoring(player1,score_one);Scoring(player2,score_two);while(y)cout请玩家一选择需要的牌(1代表A,11代表J,12代表Q,13代表K):Choose;getchar(c);x=1;if(Choose13|Choose1)cout请输入正确的值!endl;elsei=Players_operations(player1,player2,Choose,i,CardBign);score_one=Scoring(player1,score_one);Print_PlayerScore(player1,player2,score_one,score_two);while(x)cout请玩家二选择需要的牌(1代表A,11代表J,12代表Q,13代表K):Choose;getchar(c);if(Choose13|Choose1)cout请输入正确的值!score_two)cout恭喜玩家一获得胜利!endl;else if(score_one=score_two)cout不错,平分秋色!endl;elsecout恭喜玩家二获得胜利!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;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;icard_num=num)count+;p1=p1-Link;elsep1=p1-Link;return count;void Node:Print(Node *head)Node *p=head;while(p-card_num!=0)if(p-card_num=1)coutAcard_num=11)coutJcard_num=12)coutQcard_num=13)coutK ;elsecoutcard_numLink;Node* Node:Delete(Node* head , int num)/设aCard是要删除的结点a中的数据成员Node *q,*p; /p用于指向结点a,q用于指向结a的前一个结点p = head; if(p-Link=NULL)return head;if(p-card_num=num)head=p-Link;delete p;elsewhile( p-card_num != num & p-Link != NULL) /查找结点a q = p; p = p-Link; if(p-card_num = num) /若有结点a q-Link=p-Link; delete p; return head; void Card:NewCard()for(int i=0;i52;i+)CARD_Ai=i;void Card:Shuffle()int F_num,L_num;srand(int)time(NULL);for(int i=0;i52;i+)F_num=CARD_Ai;L_num=rand()%52;CARD_Ai=CARD_AL_num;CARD_AL_num=F_num;/for(int j=0;j52;j+)/coutCARD_Aj ;/coutSearch(player2,Choose);if(card_choose=0)if(ihead_Insert(player1,GenerateCard);i+;elsefor(int card_in=0;card_inhead_Insert(player1,Choose);player2=player2-Delete(player2,Choose);return i;void Print_PlayerScore(Node *player1,Node *player2,int score1,int score2)coutPrint(player1);cout得分:score1endl;coutPrint(player2);cout得分:score2endl;int Scoring(NodePtr &player,int score)int card_choose;for(int i=1;iSearch(player,i);if(card_choose=4)for(int x=0;xDelete(player,i);score+;return score;main()Card CardBign;char c;int score_one=0,score_two=0,score=0,x=1,y=1;int card_choose=0,Choose;CardBign.NewCard();CardBign.Shuffle();Node *player1,*player2;player1=new Node(NULL,NULL);player2=new Node(NULL,NULL);for(int i=0;ihead_Insert(player1,GenerateCard);elseGenerateCard=CardBign.Licensing(i)%13+1;player2=player2-head_I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论