纸牌游戏的设计与实现副本剖析.docx
《纸牌游戏的设计与实现副本剖析.docx》由会员分享,可在线阅读,更多相关《纸牌游戏的设计与实现副本剖析.docx(22页珍藏版)》请在冰豆网上搜索。
![纸牌游戏的设计与实现副本剖析.docx](https://file1.bdocx.com/fileroot1/2023-2/25/4a0eda55-d4e4-4be9-b372-f01fae7c75eb/4a0eda55-d4e4-4be9-b372-f01fae7c75eb1.gif)
纸牌游戏的设计与实现副本剖析
*****计算机系
《数据结构》课程设计报告书
纸牌游戏的设计与实现
学生姓名:
*****
学号:
*****
年级专业及班级:
201*级计算机工程系(*)班
指导老师及职称:
******
专业:
计算机科学与技术专业
*********
提交日期:
201*年6月
摘要………………………………………………………………………………
关键字………………………………………………………………………………
前言………………………………………………………………………………
需求分析…………………………………………………………………………
概要设计…………………………………………………………………………
数组抽象数据类型定义…………………………………………………………
本程序包含模块…………………………………………………………………
(1)主程序模块…………………………………………………………………
(2)纸牌翻转模块------翻转纸牌………………………………………………
运行环境(软硬件环境)…………………………………………………………
开发工具和编程语言………………………………………………………………
详细设计……………………………………………………………………………
调试分析……………………………………………………………………………
测试结果……………………………………………………………………………
附录(源代码)……………………………………………………………………
致谢…………………………………………………………………………………
纸牌游戏的设计与实现
学生:
*****
指导老师:
****
摘要
关键字
翻纸牌的简单游戏,有动画翻动的过程,链表,随机数,结构体
前言
1.需求分析
2.概要设计
1.数组抽象数据类型定义:
对纸牌进行翻转与实现
voidfangzhuang(SLL)
{}
主函数
intmain()
{}
基本操作
Fanzhuan(L);
操作结果:
对纸牌进行翻转的实现与显示
随机数的结构体
typedefstruct
{}pocker;
主页
voidzhuye()
{}
2.本程序包含模块:
(1)主程序模块
#defineMAXSIZE100//给数组定义一个空间
//纸牌的信息
typedefstruct
{}RedType;
typedefstruct
{}SL;
(2)纸牌翻转模块------翻转纸牌
各模块关系如下:
3.运行环境(软硬件环境)
运行的的软件环境:
windows2000,windowsXP,windows7
运行所需要的硬件设备:
PC机一台
4.开发工具和编程语言
开发工具:
VisualC++
编程语言:
C语言
5.详细设计
1.根据题目要求的数组存储结构
#defineMAXSIZE100//给数组定义一个空间
typedefstruct//卡片的数目和标记
{
intnum;//牌号
intvisit;//牌的正反面
}RedType;//纸牌的信息
typedefstruct//卡片的结构体
{
RedTyper[MAXSIZE+1];//纸牌数组
intlength;
}SL;
随机数的结构体
typedefstruct//随机数的结构体
{
inta;
intd;
}pocker;
2.对纸牌进行翻转的动画与显示
voidfangzhuang(SLL)//实现卡片翻转
{
system("cls");//清频
inti,j,n,t;
cout<<"||************************************************************||\n"
<<"当输入N时:
";
cin>>n;
cout<<"||************************************************************||\n";
for(i=1;i<=n;i++)//底牌全部都是盖住的
{
if(L.r[i].visit==0)
printf("%c\t",2);
Sleep(100);
}
cout<cout<<"||************************************************************||\n";
Sleep(1000);
pocker*s;s=newpocker[n+1];
srand((unsigned)time(NULL));
for(i=1;i<=n;i++)
{
t=0;
s[i].a=rand()%(13-1+1)+1;
s[i].d=rand()%(4-3+1)+3;
j=i-1;
while(j>=1)
{
if(s[i].d!
=s[j].d||s[i].a!
=s[j].a)
j--;
else
{
s[i].a=rand()%(13-1+1)+1;
s[i].d=rand()%(4-3+1)+3;
j=i-1;
}
}
}
for(i=2;i<=n;i++)//从第二张开始往后
{
for(j=i;j<=n;j++)//以基数开始翻
if(L.r[j].num%i==0)//当是i的倍数时翻转
{
if(L.r[j].visit==0)//正面翻反面
{
L.r[j].visit=1;
}
else
{
L.r[j].visit=0;
}
}
cout<<"从"<
for(j=1;j<=n;j++)//输出翻转的牌
{
if(L.r[j].visit==0)//反面
printf("%c\t",2);
else
{
if(s[j].a>=1&&s[j].a<=10)//正面
printf("%d%c\t",s[j].a,s[j].d);
else
if(s[j].a==11)
printf("J%c\t",s[j].d);
else
if(s[j].a==12)
printf("Q%c\t",s[j].d);
else
if(s[j].a==13)
printf("K%c\t",s[j].d);
}
Sleep(100);//让卡片有停顿的时间,像动画的样子
}
cout<cout<<"||************************************************************||\n";
Sleep(1000);
}
cout<<"||************************************************************||\n"
<<"这时是正面的编号为:
"<for(i=1;i<=n;i++)//输出这时正面向上的牌有哪些
{
if(L.r[i].visit==1)
cout<}
cout<cout<<"||************************************************************||\n";
cout<<"\n\n"<}
6.调试分析
输入n,先是动画显示,最后显示正面向上的牌有哪些
7.测试结果
8.附录(源代码)
#include
#include
#include
#include
#include
usingnamespacestd;
#defineMAXSIZE100
typedefstruct//随机数的结构体
{
inta;
intd;
}pocker;
typedefstruct//卡片的数目和标记
{
intnum;//牌号
intvisit;//牌的正反面
}RedType;//纸牌的信息
typedefstruct//卡片的结构体
{
RedTyper[MAXSIZE+1];//纸牌数组
intlength;
}SL;
voidzhuye()//主页
{
system("COLOR3a");
cout<<"||************************************************************||\n"
<<"||-----------------------这是一个纸牌游戏---------------------||\n"
<<"||************************************************************||\n"
<<"||||\n"
<<"||*****||\n"
<<"||***************||\n"
<<"||**************************||\n"
<<"||******************************||\n"
<<"||**************************************||\n"
<<"||************************||\n"
<<"||**************||\n"
<<"||************||\n"
<<"||||\n"
<<"||||\n"
<<"||************************************************************||\n"
<<"||-------------------------你确定要玩吗?
---------------------||\n"
<<"||------------------------1---是------------------------------||\n"
<<"||------------------------0---不是----------------------------||\n"
<<"||************************************************************||\n";
cout<<"你选择的选项:
\n";
}
voidfangzhuang(SLL)//实现卡片翻转
{
system("cls");//清频
inti,j,n,t;
cout<<"||************************************************************||\n"
<<"当输入N时:
";
cin>>n;
cout<<"||************************************************************||\n";
for(i=1;i<=n;i++)//底牌全部都是盖住的
{
if(L.r[i].visit==0)
printf("%c\t",2);
Sleep(100);
}
cout<cout<<"||************************************************************||\n";
Sleep(1000);
pocker*s;s=newpocker[n+1];
srand((unsigned)time(NULL));
for(i=1;i<=n;i++)
{
t=0;
s[i].a=rand()%(13-1+1)+1;
s[i].d=rand()%(4-3+1)+3;
j=i-1;
while(j>=1)
{
if(s[i].d!
=s[j].d||s[i].a!
=s[j].a)
j--;
else
{
s[i].a=rand()%(13-1+1)+1;
s[i].d=rand()%(4-3+1)+3;
j=i-1;
}
}
}
for(i=2;i<=n;i++)//从第二张开始往后
{
for(j=i;j<=n;j++)//以基数开始翻
if(L.r[j].num%i==0)//当是i的倍数时翻转
{
if(L.r[j].visit==0)//正面翻反面
{
L.r[j].visit=1;
}
else
{
L.r[j].visit=0;
}
}
cout<<"从"<
for(j=1;j<=n;j++)//输出翻转的牌
{
if(L.r[j].visit==0)//反面
printf("%c\t",2);
else
{
if(s[j].a>=1&&s[j].a<=10)//正面
printf("%d%c\t",s[j].a,s[j].d);
else
if(s[j].a==11)
printf("J%c\t",s[j].d);
else
if(s[j].a==12)
printf("Q%c\t",s[j].d);
else
if(s[j].a==13)
printf("K%c\t",s[j].d);
}
Sleep(100);//让卡片有停顿的时间,像动画的样子
}
cout<cout<<"||************************************************************||\n";
Sleep(1000);
}
cout<<"||************************************************************||\n"
<<"这时是正面的编号为:
"<for(i=1;i<=n;i++)//输出这时正面向上的牌有哪些
{
if(L.r[i].visit==1)
cout<}
cout<cout<<"||************************************************************||\n";
cout<<"\n\n"<}
intmain()//住函数
{
inti,z,x,y;
zhuye();
cin>>z;
switch(z)//选择
{
case1:
//选择1,玩
{
ge:
SLL;
for(i=1;i<=52;i++)
{
L.r[i].num=i;
L.r[i].visit=0;//用0来记反面
}
fangzhuang(L);//结束第一次
ti:
while
(1)//接下来的继续玩
{
cout<<"||---------------------------你还想继续玩么?
-----------------||\n"
<<"||************************************************************||\n"
<<"||---------------------------1---不是-------------------------||\n"
<<"||---------------------------0---是---------------------------||\n"
<<"||************************************************************||\n";
cin>>y;
if(y==1)
{
fangzhuang(L);
}
else
if(y==0)
{
cout<<"谢谢!
再见!
"<return0;
}
else
{
cout<<"你输入错误了!
"<cout<<"请从新输入!
"<}
gototi;
}
break;
}
case0:
//选择0,不玩
{
SLL;
le:
while
(1)
{
cout<<"||************************************************************||\n"
<<"||----------------------------你肯定不玩么?
------------------||\n"
<<"||----------------------------1---按错了----------------------||\n"
<<"||----------------------------0---没意思----------------------||\n"
<<"||************************************************************||\n";
cin>>x;
if(x==1)
{
gotoge;
}
else
if(x==0)
{
cout<<"谢谢!
再见!
"<return0;
}
else
cout<<"你输入错误了!
"<cout<<"请从新输入!
"<gotole;
}
break;
}
default:
//其他键,退出
{
cout<<"你输入错误了!
"<cout<<"请从新输入!
"<}
gotole;
}
return0;
}
9.总结
10.致谢
参考文献
[1]《数据结构(C语言版)》,严蔚敏,李冬梅,吴伟明编著,人民邮电出版社。
[2]《C程序设计(第三版)》,谭浩强著,清华大学出版社。