点扑克牌游戏报告.docx
- 文档编号:30331845
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:16
- 大小:18.10KB
点扑克牌游戏报告.docx
《点扑克牌游戏报告.docx》由会员分享,可在线阅读,更多相关《点扑克牌游戏报告.docx(16页珍藏版)》请在冰豆网上搜索。
点扑克牌游戏报告
实验报告
课程名称:
C语言课程设计
实验项目:
21点扑克牌游戏
专业班级:
电子信息工程1001班
姓名:
学号:
实验室号:
实验组号:
4
实验时间:
2012/6/26批阅时间:
指导教师:
成绩:
沈阳工业大学实验报告
(适用计算机程序设计类)
实验名称:
21点扑克牌游戏
1.实验目的:
(1)练习编写大程序,实现眼球的功能
(2)熟悉函数的调用
(3)编写函数实现程序功能
2.实验内容:
(1)学习编写实现想要功能的函数。
(2)学习如何在主函数与其它函数中调用函数。
(3)学习用输入输出函数设定输出界面。
(4)学习选择与循环等在函数中的应用。
3.实验方案(程序设计说明)
(1)建立一个主函数,在其中实现对部分功能的函数调用。
(2)编写可以满足功能的函数。
(3)用输入输出函数来控制输出的界面。
4.实验步骤或程序(经调试后正确的源程序)
主要步骤与程序代码等。
见附件A
5.程序运行结果
见附录B
6.出现的问题及解决方法
问题1:
玩家要牌后程序会自动提示程序有误,然后停止运行
解决办法:
重新编写程序代码,利用选择、循环等结构来实现玩家要牌与不要牌的处理
问题2:
程序在没有提示玩家想往下进行游戏的操作
解决办法:
利用输出函数输出相关选择信息,来提示往下的操作
附件A沈阳工业大学实验报告
(适用计算机程序设计类)
专业班级:
学号:
姓名:
实验步骤或程序:
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
#include<>
intTag_f();/*是否开始游戏*/
intRandom_f(long,long);/*返回两个参数之间的随机数*/
voidHit_f(int*);/*发一张牌*/
intDeal_f(int*,int*,int*,int*);/*双方各发两张牌*/
voidBet_f(int*,int*);/*接受下注的数目*/
voidPrint_f(int,int,int,int);/*打印结果*/
voidRules_f();/*显示游戏规则*/
voidResults_f(int,int,int,int*,int*,int*,int*);/*统计结果(输赢平)*/
voidPause_f();
intmain()
{
intnPlayer=0,nCpu=0,nWin=0,nLose=0,nDraw=0,nPlayerTurns=0,
nCpuTurns=0,nMoney=0,tag=1,nBet,nCpuCard1;/*nPlayer--玩家手中全部拍的点数之和,nPlayerTurns--玩家手中牌的数量*/
charchAnswer;
charAnswer[20];
system("cls");/*执行系统命令“清屏”*/
Rules_f();/*显示游戏规则*/
system("cls");
printf("\t\t\t你想要开始玩吗(开始:
y/Y结束:
n/N)");
tag=Tag_f();
if(tag==1)
{
printf("\n\n");
printf("\t\t\t你的开始金额为$100\n");
nMoney=100;
printf("\t\t\t");
Pause_f();
}
elsereturn0;
do
{
system("cls");
if(nMoney<=0)
{
printf("\n\n\n\n\n\n");
printf("\t\t\t\t你不够钱了!
\n");
printf("\t\t\t\t游戏结束!
!
!
!
\n");
getchar();
return0;
}
Bet_f(&nBet,&nMoney);/*接受下注的数目*/
nCpuCard1=Deal_f(&nPlayer,&nCpu,&nPlayerTurns,&nCpuTurns);/*双方各发两张牌*/
printf("\t\t\t你想继续要牌吗(要牌:
y/Y不要牌:
n/N):
\t");
while
(1)
{
gets(Answer);
if(strlen(Answer)<2)
{
if((Answer[0]=='y')||(Answer[0]=='Y'))
{
if(nPlayerTurns>4)/*看是否允许再要牌*/
{
printf("\t\t\t你的牌不能超过5张");
break;
}
if((nPlayerTurns<5)&&((Answer[0]=='y')||(Answer[0]=='Y')))
{
nPlayerTurns++;/*计算总牌数*/
printf("\n");
printf("********************************************************************************");
Hit_f(&nPlayer);/*为玩家再发一张牌*/
printf("********************************************************************************\n\n\n");
}
if(nPlayer>21)
{
printf("\t\t\t你的牌爆了\n");
tag=0;
break;
}
printf("\t\t\t你想继续要牌吗(要牌:
y/Y不要牌:
n/N):
\t");
}
else
if((Answer[0]=='n')||(Answer[0]=='N'))
{
break;
}
else
{
printf("\n\n");
printf("\t\t\t输入有误,请从新输入:
");
}
}
else
{
printf("\n\n");
printf("\t\t\t输入有误,请从新输入:
");
}
}
if(tag==0)
{
printf("\t\t\t你输了\n");
nLose++;
}
else
{
for(;(nCpu<=18)&&(nCpuTurns<5);nCpuTurns++)/*庄家要牌的条件*/
{
printf("\n");
printf("***************************************************************************");
printf("\t\t\t为庄家发一张牌\n");
Hit_f(&nCpu);/*为庄家发一张牌*/
printf("\n\n\n");
printf("**************************************************************************\n\n");
}
printf("\n\n");
printf("庄家的底牌为:
");
printf("【%d】\n",nCpuCard1);
printf("\t\t\t庄家的总点数:
%d\n",nCpu);/*显示总点数*/
printf("\t\t\t你的的总点数:
%d\n",nPlayer);
printf("\n");
Results_f(nPlayer,nCpu,nBet,&nMoney,&nDraw,&nWin,&nLose);/*计算最后的结果(统计输赢平的局数)*/
}
printf("\n\t\t\t是否想要重来一局('y/Yorn/N')");
tag=Tag_f();/*是否再来一局*/
}while(tag);
Print_f(nWin,nLose,nDraw,nMoney);/*打印最后的结果*/
printf("\n\n");
printf("\t\t\t\t按任意键退出");
getchar();
}
voidRules_f()/*这个函数显示游戏规则*/
{
printf("\t\t\t欢迎来玩21点扑克牌游戏\n");
printf("\t\t\t下面是一些游戏规则\n");
printf("\t\t\t1你手中最多允许有5张牌\n");
printf("\t\t\t2超过21点玩家就输\n");
printf("\t\t\t3庄家在16点以后一般不再要牌\n");
printf("\t\t\t4如果你赢了,你赢得赌注以及与赌注相等的钱\n");
printf("\t\t\t5如果是平局,你可以拿回你的赌注\n");
printf("\t\t\t6如果你输了,你就会输掉你的赌注\n");
printf("\t\t\t\t");
printf("按任意键继续");
getchar();
}
voidBet_f(int*npBet,int*npMoney)/*该函数接受玩家下注,并计算赌资的总数*/
{
system("cls");
printf("\t\t\t你有:
$%d\n",*npMoney);
printf("\t\t\t你想赌多少:
");
do
{
scanf("%d",npBet);
if(*npBet<0)
{
printf("\t\t\t输入格式错误,请重新下注:
");
}
else
if(*npBet>*npMoney)
{
printf("\t\t\t赌注大于拥有金额,请重新下注:
");
}
elsebreak;
}while
(1);
*npMoney=*npMoney-(*npBet);
printf("你的下注金额为:
%d\n",*npBet);
printf("你的剩余金额为:
%d\n",*npMoney);
printf("\n\n");
}
intDeal_f(int*npPlayer,int*npCpu,int*npPlayerReturns,int*npCpuReturns)
/*该函数是给计算机与玩家个发两张牌*/
{
intnPlayerCard1,nPlayerCard2,nCpuCard1,nCpuCard2;
*npPlayerReturns=2;
*npCpuReturns=2;
printf("\n\n\t\t\t开始发牌,每人两张牌\n\n\n");
getchar();
nCpuCard1=Random_f(13,1);
Pause_f();
nCpuCard2=Random_f(13,1);
Pause_f();
nPlayerCard2=Random_f(13,1);
Pause_f();
nPlayerCard1=Random_f(13,1);
if(nPlayerCard1>=10)
{
nPlayerCard1=10;
}
if(nPlayerCard2>=10)
{
nPlayerCard2=10;
}
if(nCpuCard1>=10)
{
nCpuCard1=10;
}
if(nCpuCard2>=10)
{
nCpuCard2=10;
}
*npPlayer=nPlayerCard1+nPlayerCard2;
*npCpu=nCpuCard1+nCpuCard2;
printf("*********************************************************************************");
printf("\t\t\t你的点数之和:
%d\n",*npPlayer);
printf("你的两张牌为");
printf("【%d】",nPlayerCard1);
printf("【%d】",nPlayerCard2);
printf("\n");
printf("\t\t\t庄家的底牌未知\n");
printf("庄家的两张牌为");
printf("【*】【%d】",nCpuCard2);
printf("\n");
printf("********************************************************************************");
printf("\n");
returnnCpuCard1;
}
voidHit_f(int*npTotal)/*发一张牌,返回点数之和*/
{
intnCard;
nCard=Random_f(13,1);
if(nCard>=10)
{
nCard=10;
}
*npTotal=*npTotal+nCard;
printf("\n\n\t\t\t这张牌的点数为:
\n\n");
printf("\t\t\t【%d】\n",nCard)
}
voidResults_f(intnPlayer,intnCpu,intnBet,int*npMoney,int*npDraw,int*npWin,int*npLose)
{
if(nCpu==nPlayer)
{
printf("\t\t\t达成平手\n");
++*npDraw;
*npMoney=*npMoney+nBet;
}
else
{
if(nCpu { printf("\t\t\t你赢了\n"); *npMoney=*npMoney+(nBet*2); ++*npWin; } } if(nCpu>21) { printf("\t\t\t庄家的点数爆了\n"); if(nPlayer<=21) { printf("\n\t\t你赢了\n"); ++*npWin; *npMoney=*npMoney+(nBet*2); } } else { if(nCpu>nPlayer) { printf("\n\t\t你输了\n"); ++*npLose; } } } voidPrint_f(intnWins,intnLose,intnDraw,intnMoney) { system("cls"); printf("\n\n\n\n\n\n\n"); printf("\t\t\t\t赢的次数: %d\n",nWins); printf("\t\t\t\t输的次数: %d\n",nLose); printf("\t\t\t\t平手次数: %d\n",nDraw); printf("\t\t\t\t最后的钱: %d\n",nMoney); } intRandom_f(longlBigNumber,longlSmallNumber)/*选择两个参数间的随机数*/ { intnRan; srand((unsigned)time(NULL)); nRan=rand()%(lBigNumber-(lSmallNumber-1))+lSmallNumber; return(nRan); } intTag_f() { charchAnswer[10]; inttag=1; while (1) { gets(chAnswer); if(strlen(chAnswer)<2) { if((chAnswer[0]=='y')||(chAnswer[0]=='Y')) { returntag=1; } elseif((chAnswer[0]=='n')||(chAnswer[0]=='N')) { returntag=0; } else { printf("\n\n"); printf("\t\t\t输入有误,请从新输入: "); } } else { printf("\n\n"); printf("\t\t\t输入有误,请从新输入: "); } } } voidPause_f() { printf("按回车键继续"); getchar(); } 附件B沈阳工业大学实验报告 (适用计算机程序设计类) 此游戏程序运行的一般过程: 按任意键后: 键入y后: 点击回车键后: 键入赌注以后: 第一轮发牌结束后的界面: 键入y和n以后的界面: 键入y以后的界面: 键入n以后的界面:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 扑克牌 游戏 报告