纸牌游戏实验报告.docx
- 文档编号:25317985
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:9
- 大小:18.60KB
纸牌游戏实验报告.docx
《纸牌游戏实验报告.docx》由会员分享,可在线阅读,更多相关《纸牌游戏实验报告.docx(9页珍藏版)》请在冰豆网上搜索。
纸牌游戏实验报告
纸牌游戏实验报告
篇一:
纸牌游戏GoFish实验报告
纸片游戏GoFish课程设计
一目的
通过对GOFISH的课程设计,明白数据结构设计理念,理解并掌握链表的操作,进一步的了解数据结构的含义。
二需求分析
决定玩家的数量,先简单化,建立两个玩家,完成设计;1、确定数据结构模版;2、建立数据结构类型;3、完成数据操作;4、确立算法设计。
三概要设计
1、数据结构设计
该课程设计采用链表和类相结合模式,建立牌堆和牌操作的链表结构:
classCard
{
public:
};
牌堆类:
采用整型数组建立牌堆,并用随机数打乱牌序。
classNode
{
public:
Node();Node(intvalue,Node*next);//初始化节点构造函数intListLength(Node*L);//链表的计数intSearch(Node*L,intnum);//链表的查找Node*head_Insert(Node*head,intnum);//从表头插入节点Node*Delete(Node*head,intnum);//删除节点voidPrint(Node*head);//链表输出intcard_num;charclore;Node*Link;voidNewCard();//新建牌voidShuffle();//洗牌intLicensing(intn);//发牌intCARD_A[52];private:
private:
采用链表结构方式,来构造玩家手牌。
用链式结构进行操作进行删除和插入。
2、算法函数
intScoring(NodePtr&player,intscore)//计分;
intPlayers_operations(NodePtr&player1,NodePtr&player2,intChoose,inti,CardCardBign)//玩家操作;
两个函数分别用来计算与进行牌的操作。
2、主函数
main();//主函数
主函数进行数据接收和输出显示。
四详细设计
1、类的构造与实现
类的构造:
classCard
{
public:
voidNewCard();//新建牌
voidShuffle();//洗牌
intLicensing(intn);//发牌
private:
intCARD_A[52];
};
classNode
{
public:
Node();
Node(intvalue,Node*next);//初始化节点构造函数
intListLength(Node*L);//链表的计数
intSearch(Node*L,intnum);//链表的查找
Node*head_Insert(Node*head,intnum);//从表头插入节点
Node*Delete(Node*head,intnum);//删除节点
voidPrint(Node*head);//链表输出
private:
intcard_num;
charclore;
Node*Link;
typedefNode*NodePtr;
类的实现:
采用两个构造函数,根据不同的调用对节点进行不同的初始化:
Node:
:
Node()
{
}
Node:
:
Node(intvalue,Node*next)
{
}
链表的计数,对链表的长度进算计算,返回一个整型计录链表的长度,方便链表的操作:
intNode:
:
ListLength(Node*L)
{
}
链表的插入,采用表头插入的方法:
Node*Node:
:
head_Insert(Node*head,intnum)
{
}
链表的查找,调用链表长度计数函数,用for循环来实现链表的查找:
card_num=0;Link=NULL;card_num=value;Link=next;Node*p;p=L;intcount=0;while(p->Link){}returncount;count++;p=p->Link;Node*p0;p0=newNode;p0->card_num=num;p0->Link=head;head=p0;returnhead;
intNode:
:
Search(Node*L,intnum)
{
intcount=0,Length;
Node*p1;
p1=newNode;
p1=L;
Length=p1->ListLength(p1);
if(L==NULL)
returncount;
for(inti=0;i {
if(p1->card_num==num)
{
count++;
p1=p1->Link;
}
else
{
p1=p1->Link;
}
}
returncount;
}
链表的输出,在输出时将1、11、12、13转换为A、J、Q、K:
voidNode:
:
Print(Node*head)
{
Node*p=head;
while(p->card_num!
=0)
{
if(p->card_num==1)
cout elseif(p->card_num==11)
cout elseif(p->card_num==12)
cout elseif(p->card_num==13)
cout else
coutcard_num p=p->Link;
}
}
链表节点的删除:
Node*Node:
:
Delete(Node*head,intnum)
{
//设aCard是要删除的结点a中的数据成员
Node*q,*p;//p用于指向结点a,q用于指向结a的前一个结点p=head;
if(p->Link==NULL)
{
returnhead;
}
if(p->card_num==num)
{
head=p->Link;
deletep;
}
else
{
while(p->card_num!
=num&&p->Link!
=NULL){//查找结点a
q=p;
p=p->Link;
}
if(p->card_num==num)
{//若有结点a
q->Link=p->Link;
deletep;
}
}
returnhead;
}
牌的建立,用数组实现:
voidCard:
:
NewCard()
{
for(inti=0;i CARD_A[i]=i;
}
篇二:
“21点”纸牌游戏实验报告
课程设计报告
课程名称:
面向对象程序设计与开发课程设计设计题目:
年级:
系别:
专业:
小组成员名单:
任课教师:
“21点”纸牌游戏
09计算机学院计算机科学与技术陈坚鹏李浩艺陈子龙
莫家庆老师
完成时间:
XX年3月30日
肇庆学院计算机学院
课程设计结果评定
目录
“21点”纸牌游戏.............................................................................................................................1
1概述......................................................................................................................................12实验内容...............................................................................................................................13概要设计...............................................................................................................................24测试结果和分析...................................................................................................................55课程设计体会.......................................................................................................................5
“21点”纸牌游戏
1概述
本课程设计通过编写相关代码实现“21点”游戏。
使用语言:
C++语言编译环境:
VC++6.02实验内容
1、问题描述
“21点”是一个古老的扑克牌游戏,游戏规则是:
各个参与者设法使自己的派达到总分21而不超过这个数值。
扑克牌的分值取它们的面值,A充当1分或11分(由玩家自己选择一种分值),J、Q和K人头牌都是10分。
庄家对付1—7个玩家。
在一局开始时,包括庄家在内的所有参与者都有两张牌。
玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐藏的。
接下来,只要愿意,各个玩家都有机会再拿一张牌。
如果某个玩家的总分超过了21(称为“引爆”),那么这个玩家就输了。
在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。
只要庄家的总分等于或小于16,那么他就必须再拿牌。
如果庄家引爆,那么还没有引爆的所有我那家都将获胜,引爆的玩家打成平局。
否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜。
如果二者的总分相同,则玩家和庄家打成平局。
基本要求:
编写程序实现游戏,计算机作为庄家,1—7个人作为普通玩家参与游戏。
游戏程运行输出如下所示。
多少人加入游戏?
(1—7):
2输入第1位玩家的姓名:
张三输入第2位玩家的姓名:
李四游戏开始:
庄家:
梅花7
张三:
红桃7方块J总分值17李四:
红桃J红桃3总分值13张三,你想再要一张牌吗(y,n)?
n李四,你想再要一张牌吗(y,n)?
y李四:
红桃J红桃3梅花10总分值23李四引爆!
庄家:
方块10,梅花7总分值17
1
张三,唉,你打平局了!
李四,对不起,你输了!
你想再玩一次吗(y,n)?
2、需求分析
(1)测试边界内的值。
(2)测试边界值。
(3)测试边界外的值。
(4)输出结果。
3概要设计
1、存储结构typedefenum{
//扑克牌面值:
ACE(A),TWO
(2)~TEN(10),JACK(J),QUEEN(Q),KING(K)ACE=1,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,Q
UEEN,KING
}RankType;
typedefenum{
structCard{//扑克牌结构体
RankTyperank;//扑克牌面值SuitTypesuit;//扑克牌花色//21点游戏类gameof21point声明classGameOf21Point{private:
//扑克牌花色:
CLUBS(梅花),DIAMONDS(方块),HEARTS(红CLUBS,DIAMONDS,HEARTS,SPADES
桃),SPADES(黑桃)
}SuitType;
Carddeck[52];//一副扑克牌intdealPos;//发牌位置
Cardhands[8][21];//hand[0]存储于庄家手中的扑克牌,hand[1~7]intnumOfCard[8];//庄家numOFCard[0]及玩家numOFCard[1~7]手charname[8][LEN_OF_MAX_NAME];//庄家与玩家姓名
2
存储于各位玩家手中的扑克牌中的扑克牌数
篇三:
21点扑克牌游戏实验报告
C++课程设计实验报告
姓名李執平学号23班级任课教师严悍时间XX-9-15
题目21点的扑克牌游戏
评定难易级别B
实验报告成绩
1.实验内容:
1.1程序功能介绍
21点扑克牌游戏,玩家一共可以要5张牌,如果牌的点数超过21,则为输,自动出局;在不超过21点的情况下,玩家与庄家比牌的点数大小,大者为胜。
1.2程序设计要求
(1)所有的函数与相应的数据封装到类中,并改写主程序,使程序简化。
(2)程序中共有13张扑克牌可以随机抽选,大于10的点数为10,现要将大于10的点数全部变为半点。
(3)要求高级玩家永远不会输掉,高级玩家可以查看下一张牌,若大于21点则拒绝,当然在游戏规则上不能泄露这一点
(4)超级玩家可以查看下一张牌,即输入指定的字符或字符串,然后按要求输入密码,密码正确则可以查看自己和计算机的牌,并指定下一张牌的大小。
(5)每次要牌后可以设定赔率,即可以加注。
(6)将界面改为中文界面,界面解释设置详细友好。
2.源程序结构流程框图与说明(含新增子函数的结构框图)
3.基本数据结构
Public:
CCard
private:
doublemoney;//有多少钱
doublebet;//赌注
intwin;
intlose;
intdraw;
chara[7];
public:
intplayerturns,cputurns;//计算机实际发了多少牌
doubleplayer,cpu;//计算机和玩家的点数
ccard();//构造函数,初始化
voidfirstplaytwo();//最初两张牌
voidresults();
voidBET();//接受玩家下注
doublegetmoney();//返回钱数
voidmodifypassword();//修改密码
intpassword();//设置密码
voidrules();//游戏规则
voidreplay(char&);//是否再来一局
voidprint();//输出最后结果
voidHit(double&);//要一张牌
voidgaojiplayer();//设置高级玩家
voidsuperplayer();//设置超级玩家
(1)密码设置函数
intccard:
:
password()//密码设置
{
charstr[7];
charch;
inti=0;
cout cout.flush();//清输出缓冲区
ch=getch();
while(ch!
='\r')//当输入x字符时循环结束
{
str[i++]=ch;
cout cout.flush();
ch=getch();
}
str[i]=0;//输入的密码在str数组中
system("cls");
if(strcmp(a,str)!
=0)
{
cout cin>>ch;
system("cls");
if(ch=='q'||ch=='Q')return0;
elsepassword();
}
return1;
}
(2)超级玩家设置函数
voidccard:
:
superplayer()//设置超级玩家
{
playerturns++;//玩家手中的牌书3增加一张
if(playerturns>5)//判断玩家手中的牌数是否超过5张
{
cout }
doublen;
cout cout //playerturns++;
cout cin>>n;
if(n0){
player=player+n;
cout cout else{cout }
4.程序运行结果界面
图一:
开始界面
图二:
开始游戏,下赌金
图三:
超、高级玩家修改密码服务
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 纸牌 游戏 实验 报告