C语言程序设计2点扑克牌游戏.docx
《C语言程序设计2点扑克牌游戏.docx》由会员分享,可在线阅读,更多相关《C语言程序设计2点扑克牌游戏.docx(13页珍藏版)》请在冰点文库上搜索。
![C语言程序设计2点扑克牌游戏.docx](https://file1.bingdoc.com/fileroot1/2023-5/24/54d10272-7fc4-400a-9d63-7fb1c6f337ab/54d10272-7fc4-400a-9d63-7fb1c6f337ab1.gif)
C语言程序设计2点扑克牌游戏
实验报告
课程名称:
C语言程序设计
实验项目:
21点扑克牌游戏设计
专业班级:
电子信息工程
实验室号:
信息205实验组号:
xx
实验时间:
2010-5-4批阅时间:
指导教师:
成绩:
沈阳工业大学实验报告
(适用计算机程序设计类)
专业班级:
电子信息工程0902学号:
姓名:
实验名称:
21点扑克牌游戏
1.要求:
该程序是一个21点的扑克牌游戏,玩家一共可以要5张牌,如果牌的点数超过21,则暴了,自动出局;在不超过21点的情况下,玩家与庄家(计算机)比较牌点数的大小,大者为赢。
2.程序设计要求:
1)程序中一共有13张扑克牌可以随机抽取,大于10的点数为10,现要求大于10的点数全部为半点。
2)高级玩家可以查看下一张牌,即按H键,然后要求输入密码,密码正确可以看牌,并决定是否要牌。
当然,在游戏规则上不能泄露这个秘密。
3)可以编写作弊程序,即按某一个键(自定)去查看计算机的牌面,并根据计算机所得的牌来输入自己想要的牌,当然,在界面上不能显示这点秘密(看过后即清屏)。
4)每次要牌后可以设定赔率,即如果开始下的是10元钱的注,如果牌好,你可以要求再下注,当然不能超过你所有的总钱数。
3.实验方案(程序设计说明)
4.实验步骤或程序(经调试后正确的源程序)
5.程序运行结果
6.出现的问题及解决方法
附件A沈阳工业大学实验报告
(适用计算机程序设计类)
专业班级:
电子信息工程0902学号:
姓名:
实验步骤或程序:
(我所做的程序是作弊程序改动已经加粗)
#include
#include
#include
#include
voidWait_f(int);
voidPause_f();/*暂停,按任意键继续*/
intRandom_f(long,long);/*返回两个参数之间的随机数*/
voidReplay_f(char*);/*询问是否重开一局*/
voidHit_f(int*);/*发一张牌*/
voidDeal_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*);/*统计结果(输赢平)*/
voidHit_f2(int*npTotal,inta);
intnnn;
intmain()
{
intnPlayer=0,nCpu=0,nWin=0,nLose=0,nDraw=0,nPlayerTurns=0,
nCpuTurns=0,nMoney=0,nBet;
/*nPlayer——玩家手中全部牌的点数和,nPlayerTurns——玩家手中牌的数量*/
charchAnswer;
charmmm;
inta;
system("cls");/* 执行系统命令“清屏” */
Rules_f();
printf("\t\t\tWOULDYOULIKETOPLAY?
");
scanf("%c",&chAnswer);
if((chAnswer=='y')||(chAnswer=='Y'))
{
printf("\t\t\tIWILLLETYOUSTARTWITH$100\n");
nMoney=100;
printf("\t\t\t");
Pause_f();
}
else
{
return(0);
}
do
{
system("cls");
if(nMoney<0)
{
printf("Yourbroke\n");
return(0);
}
Bet_f(&nBet,&nMoney);/*接受下注的数目*/
Deal_f(&nPlayer,&nCpu,&nPlayerTurns,&nCpuTurns);/*双方各发两张牌*/
printf("\t\t\tWouldyouwanttocheat?
yesorno?
");
scanf("%c",&mmm);
if((mmm=='y')||(mmm=='Y'))
{
printf("%d",nnn);
printf("\t\t\twhichcarddoyouwant?
");
scanf("%d",&a);
}
system("cls");
do
{
printf("\t\t\tWouldYouLikeToHitorStay:
");/*询问玩家是否接着要牌*/
scanf("%c",&chAnswer);
if((chAnswer=='h')||(chAnswer=='H'))
{
nPlayerTurns++;/*计算总牌数*/
if(nPlayerTurns>5)/*看是否允许再要牌*/
{
printf("\t\t\tYouCan'tHavemorethan5cards");
}
}
if((nPlayerTurns<6)&&(chAnswer=='h'))
{
printf("\n");
if((mmm=='y')||(mmm=='Y'))
Hit_f2(&nPlayer,a);
elseHit_f(&nPlayer);/*为玩家发一张牌*/
}
}
while((chAnswer=='h')||(chAnswer=='H'));
for(;(nCpu<16)&&(nCpuTurns<6);nCpuTurns++)/*计算机要牌的条件*/
{
printf("\n");
printf("\t\t\tTheDealerTakesACard");
Hit_f(&nCpu);/*为计算机发一张牌*/
}
printf("\n\n");
printf("\t\t\tTheDealerHasATotal:
%d\n",nCpu);/*显示总点数*/
printf("\t\t\tYouHaveATotalOf:
%d\n",nPlayer);
printf("\n");
Results_f(nPlayer,nCpu,nBet,&nMoney,&nDraw,&nWin,&nLose);/*计算最后的结果(统计输赢平的局数)*/
Replay_f(&chAnswer);/*询问是否重开一局*/
}while((chAnswer=='y')||(chAnswer=='Y'));
Print_f(nWin,nLose,nDraw,nMoney);/*打印最后结果*/
printf("\n");
printf("\t\t\t\t");
return(0);
}
voidRules_f()/*这个函数显示游戏规则*/
{
printf("\t\tWELCOMETOISAACSHAFFERSBLACKJACKGAME\n");
printf("\t\t\tHEREARESOMESIMPLERULES\n");
printf("\t\t\t1:
YouCanonlyhaveamaxof5cards.\n");
printf("\t\t\t2:
Ifyoubustyouautomaticallylose.\n");
printf("\t\t\t3:
Ifyouwinyouwindoublewhatyoubet");
printf("\t\t\t4:
TheDealerstopsatorafter16.\n");
printf("\t\t\t\t");
getchar();
}
voidBet_f(int*npBet,int*npMoney)/*该函数接受玩家下注,并计算赌资的总数*/
{
system("cls");
printf("\t\t\tYOUHAVE:
$%d\n",*npMoney);
printf("\t\t\tHowMuchDoYouWishToBet:
");
scanf("%d",npBet);
if(*npBet<0)
{
*npBet=*npBet*(-1);
}
*npMoney=*npMoney-*npBet;
}
voidDeal_f(int*npPlayer,int*npCpu,int*npPlayeReturns,int*npCpuReturns)
/*该函数是给计算机与玩家各发两张牌*/
{
intnPlayerCard1,nPlayerCard2,nCpuCard1,nCpuCard2;
*npPlayeReturns=2;
*npCpuReturns=2;
nPlayerCard1=Random_f(13,1);
printf("\n\t\t\tDEALINGHAND\n");
getchar();
Pause_f();
nPlayerCard2=Random_f(13,1);
Pause_f();
nCpuCard1=Random_f(13,1);
Pause_f();
nCpuCard2=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("\t\t\tYOUHAVEatotalof:
%d\n",*npPlayer);
printf("[%d]",nPlayerCard1);
printf("[%d]",nPlayerCard2);
printf("\n");
printf("\t\t\tTheDEALERHASA%dSHOWING",nCpuCard1);
printf("\n");
printf("[*][%d]",nCpuCard1);
nnn=nCpuCard2;
}
voidHit_f(int*npTotal)/*发一张牌,返回点数之和*/
{
intnCard;
nCard=Random_f(13,1);
if(nCard>=10)
{
nCard=10;
}
*npTotal=*npTotal+nCard;
printf("\t\t\tThecardisa:
%d\n",nCard);
printf("\t\t\tTotalis:
%d\n",*npTotal);
}
voidResults_f(intnPlayer,intnCpu,intnBet,int*npMoney,int*npDraw,int
*npWin,int*npLose)/*统计结果(输赢平及输赢平的局数)*/
{
if(nCpu==nPlayer)
{
printf("\t\t\tITWASADRAWHOUSEWINS\n");
++*npDraw;
}
if(nPlayer>21)
{
printf("\t\t\tYouBust\n");
++*npLose;
}
else
{
if(nCpu{
printf("\n\t\t\tYOUWIN");
*npMoney=*npMoney+(nBet*2);
++*npWin;
}
}
if(nCpu>21)
{
printf("\t\t\tDealerBust\n");
if(nPlayer<=21)
{
printf("\n\t\t\tYOUWIN");
++*npWin;
*npMoney=*npMoney+(nBet*2);
}
}
else
{
if(nCpu>nPlayer)
{
printf("\t\t\tYOULOSE\n");
++*npLose;
}
}
}
voidReplay_f(char*chpAns)/*询问是否重开一局*/
{
printf("\n\t\tWouldYouLikeToPlayThisGameAgain:
");
scanf("%c",chpAns);
}
voidPrint_f(intnWins,intnLose,intnDraw,intnMoney)
{
printf("\t\t\t\tWINS:
%d\n",nWins);
printf("\t\t\t\tLOSE:
%d\n",nLose);
printf("\t\t\t\tDRAWS:
%d\n",nDraw);
printf("\t\t\t\tMONEY:
%d\n",nMoney);
}
voidWait_f(intnMilli)
{
intnStart1,nStart2;
for(nStart1=0;nStart1for(nStart2=0;nStart2{;}
}
voidPause_f()
{
printf("PressAnyKeyToContinue");
getchar();
}
intRandom_f(longlBigNumber,longlSmallNumber)/*选择两个参数之间的随机数*/
{
intnRan;
srand((unsigned)time(NULL));
nRan=rand()%(lBigNumber-(lSmallNumber-1))+lSmallNumber;
return(nRan);
}
voidHit_f2(int*npTotal,inta)/*发一张牌,返回点数之和*/
{
intnCard;
nCard=a;
if(nCard>=10)
{
nCard=10;
}
*npTotal=*npTotal+nCard;
printf("\t\t\tThecardisa:
%d\n",nCard);
printf("\t\t\tTotalis:
%d\n",*npTotal);
}