21点c++程序设计报告
C语言程序设计21点扑克牌游戏
实用标准文案实验报告课程名称:C语言程序设计实验项目:21点扑克牌游戏设计专业班级:电子信息工程实验室号:信息205 实验组号:xx 实验时间:2010-5-4 批阅时间:指导教师:成绩:沈阳工业大学实验报告(适用计算机程序设计类)专业班级:电子信息工程0902 学号:姓名:实验名称:21点扑克牌游戏附件A 沈阳工业大学实验报告(适用计算机程序设计类)专业班级:电子信息工程0902 学号:姓名:实验步骤或程序:(我所做的程序是作弊程序改动已经加粗)#include<time.h>#include<stdio.h>#include<conio.h>#include<stdlib.h>void Wait_f(int);void Pause_f();/*暂停,按任意键继续*/int Random_f(long ,long );/*返回两个参数之间的随机数*/void Replay_f(char *);/*询问是否重开一局*/void Hit_f(int *);/*发一张牌*/void Deal_f(int *,int *,int *,int *);/*双方各发两张牌*/void Bet_f(int *,int *);/*接受下注的数目*/void Print_f(int ,int ,int ,int );/*打印结果*/void Rules_f();/*显示游戏规则*/void Results_f(int ,int ,int ,int *,int *,int *,int *);/*统计结果(输赢平)*/void Hit_f2(int * npTotal,int a);int nnn;int main(){int nPlayer=0,nCpu=0,nWin=0,nLose=0,nDraw=0,nPlayerTurns=0, nCpuTurns=0,nMoney=0,nBet;/* nPlayer——玩家手中全部牌的点数和,nPlayerTurns——玩家手中牌的数量*/char chAnswer;char mmm;int a;system("cls");/*执行系统命令“清屏”*/Rules_f();printf("\t\t\tWOULD YOU LIKE TO PLAY? ");scanf("%c",&chAnswer);if((chAnswer=='y')||(chAnswer=='Y')){printf("\t\t\tI WILL LET YOU START WITH $100\n");nMoney=100;printf("\t\t\t");Pause_f();}else{return(0);}do{system("cls");if(nMoney<0){printf("Your broke\n");return(0);}Bet_f(&nBet,&nMoney);/*接受下注的数目*/Deal_f(&nPlayer,&nCpu,&nPlayerTurns,&nCpuTurns);/*双方各发两张牌*/ printf("\t\t\tWould you want to cheat? yes or no?");scanf("%c",&mmm);if((mmm=='y')||(mmm=='Y')){printf("%d",nnn);printf("\t\t\twhich card do you want?");scanf("%d",&a);}system("cls");do{printf("\t\t\tWould You Like To Hit or Stay :");/*询问玩家是否接着要牌*/scanf(" %c",&chAnswer);if((chAnswer=='h')||(chAnswer=='H')){nPlayerTurns++;/*计算总牌数*/if(nPlayerTurns>5)/*看是否允许再要牌*/{printf("\t\t\tYou Can't Have more than 5 cards");}}if((nPlayerTurns<6)&&(chAnswer=='h')){printf("\n");if((mmm=='y')||(mmm=='Y'))Hit_f2(&nPlayer,a);else Hit_f(&nPlayer);/*为玩家发一张牌*/}}while((chAnswer=='h')||(chAnswer=='H'));for(;(nCpu<16)&&(nCpuTurns<6);nCpuTurns++)/*计算机要牌的条件*/{printf("\n");printf("\t\t\tThe Dealer Takes A Card");Hit_f(&nCpu);/*为计算机发一张牌*/}printf("\n\n");printf("\t\t\tThe Dealer Has A Total: %d\n", nCpu);/*显示总点数*/printf("\t\t\tYou Have A Total Of: %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);}void Rules_f() /*这个函数显示游戏规则*/{printf("\t\t WELCOME TO ISAAC SHAFFERS BLACK JACK GAME\n");printf("\t\t\t HERE ARE SOME SIMPLE RULES\n");printf("\t\t\t1:You Can only have a max of 5 cards.\n");printf("\t\t\t2:If you bust you automatically lose.\n");printf("\t\t\t3:If you win you win double what you bet");printf("\t\t\t4:The Dealer stops at or after 16.\n");printf("\t\t\t\t");getchar();}void Bet_f(int* npBet,int* npMoney) /*该函数接受玩家下注,并计算赌资的总数*/{system("cls");printf("\t\t\tYOU HA VE:$%d\n",*npMoney);printf("\t\t\tHow Much Do You Wish To Bet:");scanf("%d",npBet);if(*npBet<0){*npBet=*npBet*(-1);}*npMoney=*npMoney-*npBet;}void Deal_f(int* npPlayer,int*npCpu,int*npPlayeReturns,int *npCpuReturns)/*该函数是给计算机与玩家各发两张牌*/{int nPlayerCard1,nPlayerCard2,nCpuCard1,nCpuCard2;*npPlayeReturns=2;*npCpuReturns=2;nPlayerCard1=Random_f(13,1);printf("\n\t\t\tDEALING HAND\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\tYOU HA VE a total of:%d\n",*npPlayer);printf("[%d]", nPlayerCard1);printf("[%d]",nPlayerCard2);printf("\n");printf("\t\t\tThe DEALER HAS A %d SHOWING",nCpuCard1);printf("\n");printf("[*][%d]",nCpuCard1);nnn=nCpuCard2;}void Hit_f(int * npTotal) /* 发一张牌,返回点数之和*/{int nCard;nCard=Random_f(13,1);if(nCard>=10){nCard=10;}* npTotal=* npTotal+nCard;printf("\t\t\tThe card is a :%d\n", nCard);printf("\t\t\tTotal is :%d\n", * npTotal);}void Results_f(int nPlayer,int nCpu,int nBet,int * npMoney,int * npDraw,int* npWin,int * npLose)/*统计结果(输赢平及输赢平的局数)*/ {if(nCpu==nPlayer){printf("\t\t\tIT WAS A DRAW HOUSE WINS\n");++* npDraw;}if(nPlayer>21){printf("\t\t\tYou Bust\n");++* npLose;}else{if(nCpu<nPlayer){printf("\n\t\t\tYOU WIN");*npMoney=*npMoney+(nBet*2);++* npWin;}}if(nCpu>21){printf("\t\t\tDealer Bust\n");if(nPlayer<=21){printf("\n\t\t\tYOU WIN");++* npWin;*npMoney=*npMoney+(nBet*2);}}else{if(nCpu>nPlayer){printf("\t\t\tYOU LOSE\n");++* npLose;}}}void Replay_f(char *chpAns) /*询问是否重开一局*/ {printf("\n\t\tWould You Like To Play This Game Again:");scanf("%c",chpAns);}void Print_f(int nWins,int nLose,int nDraw,int nMoney){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);}void Wait_f(int nMilli){int nStart1,nStart2;for(nStart1=0;nStart1<nMilli*100;nStart1++)for(nStart2=0;nStart2<nMilli*100;nStart2++){;}}void Pause_f(){printf("Press Any Key To Continue");getchar();}int Random_f(long lBigNumber, long lSmallNumber) /*选择两个参数之间的随机数*/{int nRan;srand((unsigned)time(NULL));nRan=rand()%(lBigNumber-(lSmallNumber-1))+lSmallNumber;return(nRan);}void Hit_f2(int * npTotal,int a) /* 发一张牌,返回点数之和*/{int nCard;nCard=a;if(nCard>=10){nCard=10;}* npTotal=* npTotal+nCard;printf("\t\t\tThe card is a :%d\n", nCard);printf("\t\t\tTotal is :%d\n", * npTotal);}。
C#课程设计游戏21点
{ case 1: {
pictureBox1.Image = Image.FromFile("tupian\\53.jpg"); //电脑台面 上的第一张 牌, 为背面, 无用 a = randon.Next(52);//随机选出第一张牌,为电脑台面上的第二张牌, 因为是第一张随机选出的牌,所以不用判断是 否与其它的牌重复 pictureBox2.Image = Image.FromFile("tupian\\" + a.ToString() + ".jpg"); //电脑台面上的第二张牌, 同时也是作为基础 牌面要计算数值的第一张牌; d1 = a % 13 + 1; //将所得的牌转换成1~13的数字 if (d1 > 10) //判断是否为11、12、13 这三个数字,如果是,就 将它转换为10; d1 = 10; b = randon.Next(52);//这里往下就是玩家的第一张牌,与之相应的是 在文件夹中名字为0~51的图片; while (b == a) //当玩家的这个随机得到的牌与庄家得到的第一 张随机的牌相同时,则重新生成一个随机数,让 它与前面的牌的点数不一样; { b = randon.Next(52); } w1 = b % 13 + 1; //计算出随机得到的数所在的牌的点数 if (w1 > 10) //当得到的点数>10的时候,即11、12、13,将它 们变成10(作为21点游戏的规则而设定的) w1 = 10; zongshu += w1; //zongshu是玩家所得的点数相加之和的定义 pictureBox8.Image = Image.FromFile("tupian\\" + b.ToString() + ".jpg"); //将玩家随机得到的第一张牌显 示出来 c = randon.Next(52);//这里往下为玩家的第二张牌,一直往下相似的 代码均为此效果; while (c == a || c == b) { c = randon.Next(52); } w2 = c % 13 + 1; if (w2 > 10) w2 = 10; zongshu += w2; pictureBox9.Image = Image.FromFile("tupian\\" + c.ToString() + ".jpg");
c课程设计21点
c 课程设计21点一、教学目标本课程的教学目标是使学生掌握C语言的基本语法、数据结构、算法和编程思想,培养学生运用C语言解决实际问题的能力。
具体分为以下三个部分:1.知识目标:(1)掌握C语言的基本语法和关键字。
(2)理解数据类型、运算符和表达式。
(3)熟悉数组、字符串、指针和函数的概念及应用。
(4)了解基本的数据结构和算法。
2.技能目标:(1)能够使用C语言编写简单的程序。
(2)具备调试和优化程序的能力。
(3)学会阅读和理解他人的代码。
3.情感态度价值观目标:(1)培养学生对编程的兴趣和热情。
(2)培养学生解决问题的能力和创新精神。
(3)培养学生团队协作和分享的意识。
二、教学内容本课程的教学内容主要包括以下几个部分:1.C语言的基本语法和关键字。
2.数据类型、运算符和表达式。
3.数组、字符串、指针和函数的概念及应用。
4.基本的数据结构和算法。
5.编程实践和案例分析。
具体安排如下:第1-2周:C语言的基本语法和关键字。
第3-4周:数据类型、运算符和表达式。
第5-6周:数组、字符串、指针和函数的概念及应用。
第7-8周:基本的数据结构和算法。
第9-10周:编程实践和案例分析。
三、教学方法本课程采用多种教学方法相结合的方式,包括:1.讲授法:讲解基本概念、语法和算法。
2.案例分析法:分析实际案例,引导学生学会解决问题。
3.实验法:上机实践,让学生动手编写代码。
4.讨论法:分组讨论,培养学生的团队协作和沟通能力。
四、教学资源1.教材:《C程序设计语言》(K&R)。
2.参考书:《C Primer Plus》、《C和指针》。
3.多媒体资料:教学PPT、视频教程。
4.实验设备:计算机、网络环境。
教学资源的选择和准备要充分考虑教学内容和教学方法的实施,以确保教学效果的最大化。
同时,要注重丰富学生的学习体验,提高学生的学习兴趣和主动性。
五、教学评估本课程的评估方式包括以下几个方面:1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和积极性。
C语言课程设计实现21点游戏
《C语言课程设计》题目:程序设计基础课程设计班级:姓名:指导教师:所属系部:电子科学与技术系2009年 6 月24 日21点游戏设计1 游戏规则此游戏,原则上是可以由不限定的人数来玩,但是随着参与人数的增加,在最后成绩的比较方面会比较的繁琐,不像两个人之间的比赛结果那么明显,所以也应该将参与人数控制在一定的范围之内。
确定参与人数后,系统会随机为每个人发三张牌,然后计算这三张牌的和进行比较。
如果这三张牌的和大于21,则此人将会输掉比赛,除非其他人的和也大于21(即假若每个人的三张牌的和都大于21时,该局为平局,打成平手)。
如果有的和大于21,有的和小于21,则大于21的人输掉比赛,再比较小于21的部分,谁的三张牌的和最接近21,则谁是该局的赢家。
一局玩完后,玩者可以根据自己情况进行选择是否要再玩一局。
若选择再玩时,系统会再进行下一次的循环。
2 程序算法○1由系统随机产生几组随机数,每组3个随机数。
○2计算每一组的三个随机数的和。
○3比较每组和的大小。
○4得出比赛结果3 关键算法流程图总体框架4 程序代码/* Note:Your choice is C IDE */#include <stdlib.h>#include <stdio.h>#include <time.h>#define N 5main( ){int i,t,flag, j,m;int b[8],a[3*N];char c;b[1]=0;flag=1;while (flag) //控制循环{srand(time(NULL)); /scanf("%d",&j); //用j控制组数for(t=0;t<3*j;t++) //产生几组随机数{if (t%3==0)printf("\n");a[t]=rand()%13+1;printf("%5d",a[t]);}printf("\n");for(i=1;i<=j;i++) //求每组随机数的和{for(t=3*(i-1);t<3*i;t++)b[i]=b[i]+a[t];printf("b[%d]=%d\n",i,b[i]);b[i+1]=0;}printf("\n");{for(t=1;t<j;t++) //对和的大小进行排序for(i=1;i<=j-t;i++)if(b[i]>b[i+1]){m=b[i+1];b[i+1]=b[i];b[i]=m;}for (i=1;i<=j;i++)printf("%5d",b[i]);}printf("\n");for (i=1;i<=j;i++) //得出结论if(b[i]>21){printf("这一局为第%d个人赢\n是否再玩一局,若输入'Y'则继续游戏,输入'N'结束游戏\n",i-1);getchar(); //与while语句是一个系统c=getchar();if(c=='Y')flag=1;elseflag=0;}}}5在程序设计中,出现的问题和解决方案:由于是多组数据之间的比较,首先在同时产生几组随机数时遇到障碍,产生随机数的代码是从网上搜索得到的,再加上一些修改,达到所需的要求,同时有一些小的细节是在老师帮助下完成的。
21点游戏的设计与开发
毕业设计(论文)报告题目基于C#的21点游戏的设计与开发系别软件与服务外包学院专业软件技术班级***学生姓名***学号********指导教师*******2012 年4 月基于C#的21点游戏的设计与开发摘要:黑杰克又名Blackjack(简称21点),起源于法国,现已流传到世界各地。
该游戏由2到6个人玩,使用除大小王之外的52张牌,游戏者的目标是使手中的牌的点数之和不超过21点且尽量大。
有着悠久的历史。
黑杰克简称为21点,1700年左右法国赌场就有这种21点的纸牌游戏。
1931年,当美国内华达州宣布赌博为合法活动时,21点游戏第一次公开出现在内华达州的赌场俱乐部,15年内,它取代掷骰子游戏,而一举成为非常流行的赌场庄家参与的赌博游戏。
21点游戏本为赌博游戏,并不值得推荐,但其游戏性和娱乐性却很强,而且作为一款数字牌类游戏能一定程度上锻炼逻辑思维和运算能力,本着这种想法,开发者想把这款传统的赌博游戏制作成适合各类人群休闲娱乐的小游戏,同时通过实践更加掌握C#平台的开发过程。
关键词:21点游戏、运算能力、C#Based on the C# Blackjack Design and Development Abstract:Blackjack, also known as the Blackjack, (hereinafter referred to Blackjack),ori- ginated in France, has now spread to all over the world. The game 2-6 individuals to play 52 card player by addition to the size of the king goal is to make the points of the hands of the brand and not more than 21 and as large as possible. Has a long history. Blackjack is referred to as Blackjack, the French casinos around 1700 have this Blackjack. 1931, when U.S. Nevada declared gambling as a legitimate activity, the Blackjack game first public appearance in the Nevada casino club, which replaces the dice game in 15 years, has become one of the very popular casino banker involved in the gambling game.Blackjack This is a gambling game is not worth recommending, but the games and entertainment is very strong, and can exercise a certain degree of logical thinking and computing power, the spirit of this idea, the development as a digital card game want this traditional gambling games made to fit all recreational games, practice more master C# platform development process.Key Words:Blackjack、Computing power、C #目录前言 (1)第一章需求分析 (2)1.1本课题研究的意义 (2)1.2 21点游戏发展历史 (2)1.3 21点游戏的特点和规则 (2)1.4 21点游戏常用术语 (3)1.5开发工具选择 (5)1.6 C#编程语言的介绍 (6)1.7 C#编程语言的特点 (6)第二章概要设计 (8)2.1系统调研 (8)2.2可行性分析 (8)2.3技术可行性分析 (9)2.4程序设计 (10)2.5类及对象设计 (10)2.6数据流程图 (11)第三章程序设计 (12)3.1 开始和退出功能实现 (12)3.2 发牌功能实现 (13)3.3 胜负判断功能实现 (14)3.4 加牌功能实现 (16)第四章总结 (19)致谢 (21)参考文献 (22)前言21点有着悠久的历史。
21点c++程序设计报告
课题题目:21 点的扑克牌游戏 姓名:鲍浩东
班级:11101902 学号:1110190214 程序功能简介:
一个 21 点的扑克牌游戏,玩家一共可以要 5 张牌,但如果牌的点数超过 21。则 为输了,自动出局;在不超过 21 点的情况下,玩家与庄家比较牌的点数大小, 大者为赢。
cin>>ans;
if((ans=='h')||(ans=='H'))
{cout<<"非常感谢!";}
else
{cout<<"请您输入超级密码";
cin>>m2;
if(s2==m2)
{cout<<"您要的牌点数:"<<endl;
player=player-card;
cin>>w1;
if(w1<11)
cin>>ans; if((ans=='h')||(ans=='H')) {
f1.mima(ans,card,player); f1.Gamble(money,bett);
bet+=bett; cout<<"\t\t\t 你是继续要牌还是停止?(是'H'/否'S')"; cin>>ans; if((playerturns<5)&&(ans=='h')&&(player<=21)) {cout<<endl; cout<<"\t\t\t 这牌是:"<<card<<endl; cout<<"\t\t\t 总数是 :"<<player<<endl; cout<<"\t\t\t 你的剩余资本为:"<<money<<endl; } else{player=player-card; bet=bet-bett; money+=bett;}
c++21点游戏的代码和报告
数学与计算机学院课程设计说明书课程名称: 面向对象程序设计-课程设计课程代码: 8404101题目: 21点的扑克牌游戏年级/专业/班: 09/软件工程/1班学生姓名:学号: 312009*********开始时间:2011 年06 月13日完成时间:2011 年06月21 日课程设计成绩:指导教师签名:年月日目录1 引言 (1)1.1问题的提出 (1)1.2任务与分析 (1)2 程序的主要功能 (2)2.1新建用户功能 (2)2.2判断密码功能 (2)2.3判断进程功能 (2)2.4显示功能 (2)2.5获得牌的功能 (2)2.6初始化功能 (2)3 程序运行平台 (3)4 总体设计 (4)5 程序类的说明 (5)6 模块分析 (6)6.1新建用户模块 (6)6.2显示模块 (6)6.3判断密码模块 (8)6.4判断游戏进程模块 (10)6.5获得一张牌模块 (11)6.6初始化模块 (12)7 系统测试 (13)8 结论 (16)参考文献 (17)摘要随着计算机的普及,计算机游戏逐渐进入了这个时代,本次利用学到的c++编写了一个21点的扑克牌游戏,该游戏具有新建用户,判断牌等功能关键词:21点的扑克牌游戏;计算机;1 引言1.1 问题的提出设计一个21点的扑克牌游戏,玩家一共可以要5张牌,但如果牌的点数超过21,则暴了,自动出局;在不超过21点的情况下,玩家与庄家比牌的点数大小,大者为赢。
1.2任务与分析(1) 将所有的函数与相应的数据封装到类中。
(2) 程序中一共有13张扑克牌可以随机抽取,大于10的点数全部为半点:只需设计随机取下一张牌的成员函数时使用if语句判定牌的点数是否大于10,大于10的牌对其重新赋值为0.5即可。
(3) 要求庄家永远不会暴庄,即庄家可以查看下一张牌,若大于21点,则拒绝,当然,在游戏规则上不能泄露这点秘密:在函数中首先随机产生下一张牌,接着用条件语句判定原有点数与新牌的点数之和是否大于21点,然后决定是否取牌。
C语言21点纸牌游戏系统详细设计
C语言21点纸牌游戏系统详细设计主函数开键盘输产生随机键盘输输入H 输出统计选择是否循结图2.1 进入游戏后的游戏说明及规则2.2开始游戏图2.2 选择下注数目,然后随机发牌,只能见庄家一张牌,可以选择查看庄家隐藏的牌,此为游戏高级模式,开启后可选择想要的牌2.3作弊模式图2.4在作弊模式下取胜,可以接着要牌,但玩家的牌最多不能超过5张,取胜后会统计结果,询问是否继续游戏2.5非作弊模式图2.5 此情况为非作弊模式,不能见庄家的牌,只能知道结果,输掉游戏后统计结果,询问是否继续2.6退出游戏图2.6此为退出游戏,输入后自动关闭窗口3.源程序:#include<time.h>#include<stdio.h>#include<conio.h>#include<stdlib.h>void Wait_f(int);void Pause_f();/*暂停,按任意键继续*/int Random_f(long ,long );/*返回两个参数之间的随机数*/ void Replay_f(char *);/*询问是否重开一局*/void Hit_f(int *);/*发一张牌*/void Deal_f(int *,int *,int *,int *);/*双方各发两张牌*/nCpuTurns=0,nMoney=0,nBet;/* nPlayer--玩家手中全部牌的点数和,nPlayerTurns--玩家手中牌的数量 char chAnswer;char mmm;int a;system("cls");/* 执行系统命令"清屏" */Rules_f();printf("确认是否开始游戏:");scanf("%c",&chAnswer);if((chAnswer=='y')||(chAnswer=='Y')){nMoney=100;printf("\t\t\t");Pause_f();}else{return(0);return(0);}Bet_f(&nBet,&nMoney);/*接受下注的数目*/Deal_f(&nPlayer,&nCpu,&nPlayerTurns,&nCpuTurns);/*双方各发两张牌*/printf("想看庄家牌吗?");scanf("%c",&mmm);if((mmm=='y')||(mmm=='Y')){printf("%d\n",nnn);printf("您想要哪一张牌?");scanf("%d",&a);}system("cls");do{if((nPlayerTurns<6)&&(chAnswer=='h')) {printf("\n");if((mmm=='y')||(mmm=='Y'))Hit_f2(&nPlayer,a);else Hit_f(&nPlayer);/*为玩家发一张牌*/}}while((chAnswer=='h')||(chAnswer=='H'));for(;(nCpu<16)&&(nCpuTurns<6);nCpuTurns++)/*计算机要牌的条件*/ {printf("\n");printf("\n");printf("\t\t\t\t");return(0);}void Rules_f() /*这个函数显示游戏规则*/{printf("欢迎来到21点纸牌游戏\n");printf("这里有一些简单的规则:\n");printf("1:你的几张牌中只能有一个最大的牌。
用C#写简单的“二十四点游戏
}
for(intj = 0; j < 13; j++)//对牌A进行处理,如果牌总点数小于等于11就把A当成11点,否则就当成1点(一开始就把A当成是1点)
{
if(sum<12)
{
intx = cardValue[j];
if(x==1)
{
sum+=10;
}
}
}
returnsum;
}
}
classProgram
Player p1 =newPlayer("小四");
Player p2 =newPlayer("小五");
Player p3 =newPlayer("小六");
Player p4 =newPlayer("小七");
Random ran =newRandom();
intranNumber;
for(inti = 0; i < 2; i++)//给玩家小四发两张牌
{
p1.cardValue[i] = 10;
}
else
{
p1.cardValue[i] = ranNumber;
}
}
for(inti = 0; i < 2; i++)//给玩家小五发两张牌
{
do
{
ranNumber = ran.Next(1, 13);
}while(c1.cardNumber[ranNumber] == 0);
程序设计实践实验报告
学号
201626705058
姓名
林水金
C++程序设计21点游戏
课程设计说明书
题
目 :“21 点”纸牌游戏
学生姓名:
学
号:
学
院:
班
级:
指导教师:
二〇一二年一月四日
大学课程设计(论文)任务书
课程名称: 面向对象的程序设计 学院:
班级:
学生姓名:
一、题目
“21 点”纸牌游戏
学号: 指导教师:
二、目的与意义
面向对象程序设计课程设计可以培养学生综合运用所学面向对象程序设计知识和技能分析 与解决实际问题的能力,以及严肃认真的科学态度和严谨求实的工作作风。
已在广泛的软件是非常重要的,可以节省大量的人力和物力。 (2) C++是一种面向对象的程序设计语言它使得程序的各个模块的独立性更
强,程序的可读性和可移植性更强,程序代码的结构更加合理,程序的扩充性更 强。这对于设计、编制和调试一些大型的软件尤为重要。
(3) C++集成环境不仅支持 C++程序的编译和调试,而且也支持 C 程序的编 译和调试。通常,C++程序环境 约定:当源程序文件的扩展名为 c.时,则为 C 程序;而当源程序文件的扩展名为 cpp.时,则为 C++程序。
人民邮电出版社.2006
[3] Walter Savitch. C++面向对象程序设计——基础、数据结构与编程思想.第 4 版.北京: 清华大学出版社.2003
[4]钱能.C++程序设计教程.第 2 版.北京:清华大学出版社.2005 [5]郑莉.C++语言程序设计案例教程.第 1 版.北京:清华大学出版社.2005 [6]韦朴,陈泰生. Visual C++通用范例开发金典.北京:电子工业出版社.2008
21点 高质量C语言程序
设计题目: 21点游戏二十一点游戏是一款操作简单,老少皆宜,并且带有很强娱乐性的游戏。
二十一点游戏也是我们学习C语言过程中用来锻炼我们编程能力的一种简单有效的方式。
编写二十一点游戏的目的就是在编写过程中学习和掌握各种编程的能力,二十一点游戏中有我们经常接触到的一些头文件,和小的函数体,以及一些相关知识,能让我们在实践中得到锻炼。
一、设计目的与要求1、程序设计的源程序功能如下:(1)将所有的函数与相应的数据封装到类中,并改写主程序,使程序简化。
(2)程序中一共有13张扑克牌可以随机抽取,大于10的点数为10,现要求大于10的点数全部为半点。
(3)要求庄家永远不会暴庄,即庄家可以查看下一张牌,若大于21点,则拒绝,当然,在游戏规则上不能泄露这点秘密。
(4)高级玩家可以查看下一张牌,即按h键,然后按要求输入密码,密码正确可以看牌,并决定是否要牌。
(5)每次要牌后可以设定赔率,即如果开始下的是10元钱的注,如果牌好,你可以要求再下注,当然不能超过你所有的总钱数。
(6)将界面的提示说明改成中文界面,界面的解释详细友好,可以吸引更多的玩家。
二、课程设计(1)题目要求把源程序封装在类中,需要编写一个类来封装所有相关函数和变量,同时对main主函数进行改写,以完成题目的要求。
(2)题目要求把抽到的大于10点的牌的点数设为半点,只需要设计随机取下一张牌的成员函数时用if语句判定牌的点数是否大于10,大于10的牌对其重新赋值为0.5即可。
(3)题目要求超级玩家在输入密码后可以查看下一张牌,只需设计一成员函数,判定玩家是否继续要牌之前加入对玩家是否输入h键的判定,如果有输入,则调用为处理玩家输入密码而单独编写的成员函数,在该函数中,首先判定玩家的密码输入是否正确,不正确则返回0,正确则返回1。
(4)题目要求玩家可以根据手上的牌决定是否下注,只需设计一成员函数,检查玩家的赌注累计不超过他所拥有的总资本。
三、设计描述1、为满足上述第一条要求,在程序中增加了一个类play,封装到类中的函数有:void replay(); //检测是否重玩void hitplayer(); //玩家要牌void hitcpu();//电脑要牌void deal(); //开始发牌void BET(); //加注void print(); //打印最终结果void rules(); //显示规则void results();//判断获胜方int getmoney();//读取钱数至主程序void shuruans();//输入判断用字符(如Y,S等)void firstbet();//首次下注;void writer(void) ; //写入文本文件void load(void); //读取文本文件源程序已有的函数中,void replay(),void rules(), void results(), void print()已经较为完善,仅需将其英文界面部分改为中文即可,而其他函数则应按要求改写。
21点游戏
21点游戏设计报告学院机械学院班级机设C097 学号095596 姓名王志光成绩一、设计思路1.要达到的目的①完成程序的基本要求②对循环和选择结构有更深的理解③对控件的属性及使用有了更广泛的了解④提高了自己综合利用VB语言进行程序设计的能力2.关键问题的解决①对赋值条件语句的编写②判断结果的分支结构的编写③基本控件及控件数组的使用④扑克牌花色的显示⑤编写控制游戏的菜单⑥后期调试二、模块之间的调用关系,或程序流程图三、部分程序关键源代码及注释If cardnum(0) < 5 Then '向玩家一发牌数小于5rndcard (0) '随机发牌End IfIf cardnum(0) = 5 And cardnum(1) = 5 Then '玩家一和玩家二发牌数都到5a = checkwin() '开始计算点数End If点数算法判断胜负的方法Label17.Caption = "本局双方同时输"ElseIf carddian(0) > 21 ThenLabel17.Caption = "本局" + name2 + "获胜"win2 = win2 + 1ElseIf carddian(1) > 21 ThenLabel17.Caption = "本局" + name1 + "获胜"win1 = win1 + 1ElseIf carddian(0) = carddian(1) ThenLabel17.Caption = "本局平局"ElseIf carddian(0) > carddian(1) ThenLabel17.Caption = "本局" + name1 + "获胜"win1 = win1 + 1ElseLabel17.Caption = "本局" + name2 + "获胜"win2 = win2 + 1End IfFrame3.Visible = TrueIf times > jushu ThenIf win1 > win2 ThenLabel18.Caption = "本次游戏" + name1 + "获胜"ElseIf win1 < win2 ThenLabel18.Caption = "本次游戏" + name2 + "获胜"ElseLabel18.Caption = "本次游戏平局"End IfFrame4.Visible = TrueEnd IfFunction rndcard(i As Integer) As Integer '随机产生牌Randomizerndnum = Int(Rnd() * 52)Do While (cardval(rndnum) = 0)rndnum = Int(Rnd() * 52)Loopcardval(rndnum) = 0If i = 0 Thencard(i, cardnum(i)) = rndnumForm1.Picture4(cardnum(i)).Picture = Form1.Picture1(rndnum) 将玩家1牌通过picture控件数组ElseIf i = 1 Thencard(i, cardnum(i)) = rndnumForm1.Picture5(cardnum(i)).Picture = Form1.Picture1(rndnum)End Ifcardnum(i) = cardnum(i) + 1End Function四、设计方案的完善及目前存在的问题1.设计方案要完善的地方没有比赛规则说明,应该做的更完美2. 目前存在的问题程序中可能有冗余的地方,声明变量的范围可能还略有不足五、本次设计的收获及心得体会对控件的属性及使用有了更广泛的了解,提高了自己综合利用VB语言进行程序设计的能力,增加了调试的经验,对VB有了更深刻的认识,同时也对它产生了浓厚的兴趣。
21点纸牌游戏_C++课程设计报告
郑州轻工业学院课程设计报告课程设计名称: 21点纸牌游戏课程名称:面向对象程序设计(C++)姓名:谢先斌院(系):计算机与通信工程学院专业班级:计算机10-1学号: 541007010144指导教师:王秉政、郭锋成绩:时间:2011年12月26日至 2011年12月30日郑州轻工业学院学生课程设计任务书一、题目(任选一题)21点纸牌游戏公司员工管理系统二、学生信息专业计算机科学与技术学号 541007010144 姓名谢先斌三、基本要求及约束条件(一)“21点纸牌游戏”设计1、需求及内容21点是一个古老的扑克牌游戏,游戏规则是:各个参与者设法使自己的牌达到总分21而不超过这个数值。
扑克牌的分值取它们的面值,A充当1分或者11分(由玩家自己选择一种分值),J、Q和K人头牌都是10分。
庄家对付1~7个玩家。
在一局开始时,包括庄家在内的所有参与者都有两张牌。
玩家可以看到它们的所有牌以及总分,而专家有一张牌暂时是隐藏的。
接下来,只要愿意,各个玩家都有机会依次再拿一张牌。
如果某个玩家的总分超过了21(称为“引爆”),那么这个玩家就输了。
在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。
只有庄家的总分等于或小于16,那么他就必须再拿牌。
如果庄家引爆了,那么还没有引爆的所有玩家都将获胜,引爆的玩家打成平局。
否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜。
如果二者的总分相同,则玩家与庄家打成平局。
编写程序实现游戏,计算机作为庄家,1~7个人作为普通玩家参与游戏。
游戏程序运行输出如下所示:2、要点及分析首先定义表示扑克牌花色与面值的枚举类型,这样程序可读性更强,具体定义如下:typedef enum{ // 扑克牌面值:ACE(A),TWO(2)~TEN(10),JACK(J), QUEEN(Q), KING(K)ACE = 1, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING} RankType;typedef enum{ // 扑克牌花色:CLUBS(梅花), DIAMONDS(方块), HEARTS(红桃)和SPADES(黑桃) CLUBS, DIAMONDS, HEARTS, SPADES} SuitType;struct Card{ // 扑克牌结构体RankType rank; // 扑克牌面值SuitType suit; // 扑克牌花色};(二)“公司员工管理系统”设计1、需求及内容为了方便对公司员工基本信息进行电子化管理,利用面向对象的程序设计技术实现对员工信息的自动化管理。
C 21点纸牌游戏实践报告
目录第1章软件设计内容 (2)1.1软件达到的目的 (2)1.2软件功能说明 (2)1.2.1功能分析说明图 (3)1.2.2各项功能说明 (4)1.3软件功能的验收标准 (5)第2章软件设计环境与原理 (5)2.1设计环境与模块的划分 (5)2.1.1软件设计环境 (5)2.1.2软件模块的划分 (5)2.2软件设计主要原理 (6)2.2.1采用的主要数据结构类型 (6)2.2.2各个模块之间的调用关系和数据储存格式说明 (6)2.2.3主要流程图 (6)第3章软件的设计过程 (7)3.1各软件模块之间的调用方式 (7)3.2软件中实现各项功能的函数与程序代码 (7)3.3数据保存方式以及格式 (7)第4章设计结果与分析 (7)4.1软件使用结果 (7)总结......................................................................................................................错误!未定义书签。
致谢......................................................................................................................错误!未定义书签。
附录......................................................................................................................错误!未定义书签。
第1章软件设计内容1.1软件达到的目的1、熟悉VC++6.0WIN32工程的创建步骤。
2、掌握windows控制台程序的机制、结构。
3、深刻C++类的定义和对象的使用。
4、重点了解C++程序的多文件组织。
c21点游戏课程设计
c 21点游戏课程设计一、课程目标知识目标:1. 学生理解21点游戏的规则,掌握基本的算牌策略。
2. 学生掌握概率的基本概念,并能应用于21点游戏中。
3. 学生理解期望值在游戏决策中的应用。
技能目标:1. 学生能够运用加减法进行快速计算,提高心算能力。
2. 学生能够通过分析概率,制定有效的21点游戏策略。
3. 学生能够通过小组合作,进行游戏实践,提高沟通与协作能力。
情感态度价值观目标:1. 学生培养对数学的兴趣,认识到数学在生活中的实际应用。
2. 学生在游戏中学会遵守规则,培养良好的竞技精神。
3. 学生通过游戏体验,理解风险与决策的重要性,形成正确的价值观。
课程性质:本课程为实践性较强的数学应用课程,结合学生年级特点,注重培养学生的实际操作能力和团队协作能力。
学生特点:六年级学生具备一定的数学基础和逻辑思维能力,好奇心强,喜欢挑战性游戏。
教学要求:教师应引导学生将所学数学知识应用于游戏中,激发学生的学习兴趣,提高学生的实践能力。
同时,注重培养学生的情感态度价值观,使学生在游戏中学会遵守规则,形成正确的价值观。
通过分解课程目标为具体学习成果,便于后续教学设计和评估。
二、教学内容1. 游戏规则介绍:讲解21点游戏的基本规则,包括游戏目标、牌的点数计算、牌的组合方式及游戏流程。
2. 算牌策略学习:分析游戏中的概率问题,引导学生学习基本的算牌策略,如“牌型概率”、“牌数概率”等。
3. 概率与期望值:结合课本中概率知识,讲解期望值在21点游戏中的应用,让学生了解如何通过期望值来判断游戏策略的优劣。
4. 实践操作:组织学生进行小组实践,让学生在游戏中运用所学知识,提高心算能力和决策能力。
5. 教学内容安排和进度:- 第一课时:游戏规则介绍,算牌策略学习;- 第二课时:概率与期望值讲解,实践操作指导;- 第三课时:学生实践,总结经验,交流心得。
6. 教材章节关联:- 《数学》课本:概率章节,结合课本知识进行讲解;- 《实践活动手册》:设计实践任务,让学生在课后进行练习。
纸牌游戏“21点”实验设计报告
湖北第二师范学院《面向对象程序设计》课程设计报告书题目:纸牌游戏——“21点”院系:计算机学院专业:网络工程姓名:李林学号:0850311013同组人员:陈易俊、吴鑫、易龙、张帅指导老师:张琪设计时间:2011年2月26日~2011年3月19日目录一.课程设计目的 (3)二.问题描述 (3)三.需求分析 (4)四.概要设计 (5)4.1系统中类类型定义及系统各类类成员功能说明 (5)4.2 系统各类间关系 (6)五.详细设计 (7)5.1 数据类型定义及伪代码描述 (7)5.2系统主要子程序详细设计(加注释的源程序) (8)六.测试分析 (19)七.技术难点及创新 (19)八.自己完成模块说明 (19)九.源程序清单 (23)一.课程设计目的在Visual C++6.0或者C++ Builder 6.0环境中编译运行纸牌游戏——“21点”,通过编程练习、程序调试、程序纠错等过程训练,真正掌握所学知识、提高编程水平。
二.问题描述“21点”是一个古老的扑克牌游戏,游戏规则是:各个参与者设法使自己的牌达到总分21而不超过这个数值。
扑克牌的分值取它们的面值,A充当1分或者11分(由玩家自己选择一种分值),J.Q和K人头牌都是10分。
庄家对付1到7个玩家。
在一局开始时,包括庄家在内的所有参与者都有两张牌。
玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐蔽的。
接下来,只有愿意,各个玩家都有机会依次再拿一张牌。
如果某个玩家的总分超过了21(称为“引爆”),那么这个玩家就输了。
在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。
只要庄家的总分等于或小于16,那么他就必须再拿牌,如果庄家引爆了,那么还没有引爆的所有玩家都将获胜。
引爆的玩家打成平局。
否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜。
如果二者的总分相同,则玩家与庄家打成平局。
(1)将所有的函数与相应的数据封装到类中,并改写主程序,使程序简化。
C 21点游戏课程设计报告
cin>>mima;
if(mima==5201314)
{for(;;)
//控制游戏循环
{
沈阳理工大学
沈阳理工大学课程设计专用纸
No6
cout<<"请输入您要押的钱数(现在您还有"<<a<<")"; cin>>c; //玩家所压赌注 if(c>100||c<1){cout<<"请最多输入 1-100 请重新输入"<<endl; cin>>c; }else if(win2()) {
沈阳理工大学
沈阳理工大学课程设计专用纸
No3
bool win2();//定义变量 win 为逻辑型变量
void money();
//运行赌注
int main() {
cout<<"\t※※※※※※※※※※欢迎进入 21 点※※※※※※※※※※\n\n";
cout<<"\t\t 游戏规则:\n";
cout<<endl;
2.1 总体功能框图.............................................................. 1 2.2 类的设计说明...................................... 错误!未定义书签。 2.3 主要算法流程图........................................................ 1 3 程序清单及注释..................................................................2 4 运行结果与分析................................................................12 5 总结....................................................................................12 6 参考文献............................................................................12
C程序课程设计报告范文_21点游戏
C程序课程设计报告范文_21点游戏C++面向对象程序设计课程设计报告设计题目:21点游戏专业班级:学生学号:学生姓名:指导教师:黄旭红、蔡志明一、设计任务分析1、21点游戏介绍21点游戏是一个古老的扑克游戏,游戏的规则是:各个参与者设法使自己的牌达到总分21而不超过这个数值。
扑克牌的分值取它们的面值,A充当1或者11分,J,Q和K人头牌都是10分。
庄家VS1~7个玩家。
在开局时,包括庄家在内的所有参与者都有两张牌。
玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐藏的。
接下来,只要愿意,各个玩家都有机会依次再拿一张牌。
如果是玩家的总分超过了21(称为引爆),那么这个玩家就输了。
在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。
只要庄家的总分等于或小于16,那么他就必须再拿牌。
如果庄家引爆了,那么还没有引爆的所有玩家都将获胜,引爆的玩家打成平局。
否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜。
如果二者的总分相同,则玩家与庄家打成平局中。
2、实现以下功能:1)洗牌;2)发牌;3)隐藏或显示牌;4)计算总分;5)判断胜负。
3、界面显示要求:多少人加人游戏?(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张三,唉,你打平局了!李四,对不起,你输了!你想再玩一次吗(y,n)二、21点游戏流程三、主要数据结构扑克版结构体:typedefenum{N,KING}RankType;typedefenum{桃)CLUBS,DIAMONDS,HEARTS,SPADES//扑克牌花色:CLUBS(梅花),DIAMONDS(方块),HEARTS(红桃)和SPADES(黑//扑克牌面值:ACE(A),TWO(2)~TEN(10),JACK(J),QUEEN(Q),KING(K)ACE=1,TWO,THREE,FO UR,FIVE,SI某,SEVEN,EIGHT,NINE,TEN,JACK,QUEE}SuitType;tructCard{//扑克牌结构体};RankTyperank;//扑克牌面值SuitTypeuit;//扑克牌花色四、21点游戏类设计五、源代码#include<iotream>//#include<tdlib>uingnamepacetd;typedefenum{//扑克牌面值:ACE(A),TWO(2)~TEN(10),JACK(J),QUEEN(Q),KING(K) ACE=1,TWO,THREE,FOUR,FIVE,SI某,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING}RankType;typedefenum{ //扑克牌花色:CLUBS(梅花),DIAMONDS(方块),HEARTS(红桃)和SPADES(黑桃)CLUBS,DIAMONDS,HEARTS,SPADES}SuitType;tructCard{ //扑克牌结构体RankTyperank;//扑克牌面值SuitTypeuit;//扑克牌花色};otream&operator<<(otream&outStream,contCard&card)//操作结果:重载<<运算符{//输出花色if(card.uit==CLUBS)outStream<<"梅花";//CLUBS表示梅花eleif(card.uit==DIAMONDS)outStream<<"方块";//DIAMONDS表示方块eleif(card.uit==HEARTS)outStream<<"红桃";//HEARTS表示红桃eleif(card.uit==SPADES)outStream<<"黑桃";//SPADES表示黑桃//输出面值if(card.rank==ACE)outStream<<"A";//ACE表示Aeleif(card.rank==JACK)outStream<<"J";//JACK表示Jeleif(card.rank==QUEEN)outStream<<"Q";//JACK表示Qeleif(card.rank==KING)outStream<<"K";//JACK表示Kelecout<<(int)card.rank;returnoutStream;}#defineLEN_OF_MA某_NAME21//最大姓名长度uingnamepacetd;claGameOf21Point//21点游戏类GameOf21Point声明{private:Carddeck[52];//一副扑克牌intdealPo;//发牌位置Cardhand[8][21];//hand[0]存庄家的牌,hand[1~7]存各玩家的牌intnumOfCard[8];//庄家(numOfCard[0])及玩家的牌数charname[8][LEN_OF_MA某_NAME];//庄家及玩家姓名intnumOfPlayer;voidShuffle();//洗牌intGetTotalScore(Cardhand[21],intn);//返回一手牌的总分值voidShowStatu(intnum,boolhideFirtCardAndTotalScore=fale);//显示庄家(对应num=0)或玩家(对应num>0)的当前状态CardDealOneCard(){returndeck[dealPo++];}//发一张扑克牌public://方法声明GameOf21Point();//无参构造函数virtual~GameOf21Point(){};voidGame();};//初始化扑克牌,发牌位置,庄家与各玩家手中的扑克牌数GameOf21Point::GameOf21Point(){intcurPo=0;//当前扑克牌位置char某tr;for(intuitPo=0;uitPo<4;uitPo++)//花色{for(intrankPo=1;rankPo<=13;rankPo++)//面值{deck[curPo].uit=(SuitType)uitPo;//花色deck[curPo].rank=(RankType)rankPo;//面值curPo++;}} cout<<"多少人加入游戏?(1~7):";tr=newchar[1];cin>>tr;numOfPlayer=atoi(tr);while(numOfPlayer<1||numOfPlayer>7)//限制人数在1~7之间{ cout<<"玩家人数限定在1~7个,请重新输入人数:";cin>>tr;numOfPlayer=atoi(tr);}dealPo=0;//发牌位置inti=0;//临时变量//庄家numOfCard[0]及玩家numOfCard[1~7]手中的扑克牌张数for(i=0;i<=numOfPlayer;i++)numOfCard[i]=0;trcpy(name[0],"庄家");for(i=1;i<=numOfPlayer;i++)//玩家姓名{cout<<"输入第"<<i<<"玩家的姓名";cin>>name[i];}cout<<"游戏开始"<<endl;}//洗牌,通过产生随机数,交换随机数对应位置的牌和当前位置的牌voidGameOf21Point::Shuffle(){intpo=rand()%(curPo+1);//产生0~curPo之间的随机数Cardtemp;//定义一个临时变量用于交换牌temp=deck[po];deck[po]=deck[curPo];deck[curPo]=temp;}}intGameOf21Point::GetTotalScore(Cardhand[21],intn){intpo;inttotalScore=0;for(po=0;po<n;po++)//循环求最大分值(A的分值为11){if(hand[po].rank==ACE)totalScore+=11;//A的分值为11eleif(hand[po].rank>TEN)totalScore+=10;//J,Q,K的分值为10 eletotalScore+=(int)hand[po].rank;//TWO~TEN分值为2~10}//分值大于21时,将A的分值改为1for(po=0;totalScore>21&&po<n;po++){if(hand[po].rank==ACE)totalScore-=10;}returntotalScore;}VoidGameOf21Point::ShowStatu(intnum,boolhi deFirtCardAndTotalScore)/某当num=0时,显示庄家当前状态,当num>0,显示第num个玩家的当前状态,当hideFirtCardAndTotalScore为真时,将隐藏首张扑克牌与总分,否则将显示首张牌与总分某/{/某cout<<name[num]<<":";//显示庄家或玩家姓名//隐藏庄家首张牌if(hideFirtCardAndTotalScore)cout<<"<某某庄家首张牌被隐藏某某>";elecout<<hand[num][0];//显示庄家的首张牌for(inti=1;i<numOfCard[num];i++)cout<<hand[num][i];if(!hideFirtCardAndTotalScore)cout<<"总分值"<<GetTotalScore(hand[num],numOfCard[num]);cout<<endl;if(GetTotalScore(hand[num],numOfCard[num])>21)cout<<name[num ]<<"引爆!"<<endl;//某某不使用输出符<<重载时的代码某/cout<<name[num]<<":";//显示庄家或玩家姓名//根据庄家的状态隐藏或显示庄家首张牌的花色if(hideFirtCardAndTotalScore)cout<<"<某某庄家首张牌被隐藏某某>";//隐藏首张牌eleif(hand[num][0].uit==CLUBS)cout<<"梅花";//CLUBS表示梅花eleif(hand[num][0].uit==DIAMONDS)cout<<"方块";//DIAMONDS表示方块eleif(hand[num][0].uit==HEARTS)cout<<"红桃";//HEARTS表示红桃eleif(hand[num][0].uit==SPADES)cout<<"黑桃";//SPADES表示黑桃//输出庄家首张牌的面值if(hideFirtCardAndTotalScore)cout<<"";eleif(hand[num][0].rank==ACE)cout<<"A";//ACE表示Aeleif(hand[num][0].rank==JACK)cout<<"J";//JACK表示Jeleif(hand[num][0].rank==QUEEN)cout<<"Q";//JACK表示Qeleif(hand[num][0].rank==KING)cout<<"K";//JACK表示Kelecout<<(int)hand[num][0].rank;for(inti=1;i<numOfCard[num];i++ ){if(hand[num][i].uit==CLUBS)cout<<"梅花";//CLUBS表示梅花eleif(hand[num][i].uit==DIAMONDS)cout<<"方块";//DIAMONDS表示方块eleif(hand[num][i].uit==HEARTS)cout<<"红桃";//HEARTS表示红桃eleif(hand[num][i].uit==SPADES)cout<<"黑桃";//SPADES表示黑桃//输出面值if(hand[num][i].rank==ACE)cout<<"A";//ACE表示Aeleif(hand[num][i].rank==JACK)cout<<"J";//JACK表示Jeleif(hand[num][i].rank==QUEEN)cout<<"Q";//JACK表示Qeleif(hand[num][i].rank==KING)cout<<"K";//JACK表示Kelecout<<(int)hand[num][i].rank;}if(!hideFirtCardAndTotalScore)cout<<"总分值"<<GetTotalScore(hand[num],numOfCard[num]);cout<<endl;if(GetTotalScore(hand[num],numOfCard[num])>21)cout<<name[num ]<<"引爆!"<<endl;}voidGameOf21Point::Game(){Shuffle();//洗牌inti,j;//为庄家发两张牌for(i=0;i<2;i++)hand[0][numOfCard[0]++]=DealOneCard();ShowStatu(0,true);//显示庄家状态,隐藏首张牌与总分//向各玩家发牌并显示for(i=1;i<=numOfPlayer;i++){for(j=0;j<2;j++)hand[i][numOfCard[i]++]=DealOneCard();ShowStatu(i);}cout<<endl;//依次向各玩家发额外的牌for(i=1;i<=numOfPlayer;i++){charAn;cout<<name[i]<<",你还想再要一张牌吗再要请输入y,不要请输入n:";cin>>An;//玩家选择再要一张牌,如果玩家没有引爆则继续发牌//witch(An)//{while(An!='y'&&An!='n'){cout<<"你的输入不正确,请重新输入。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
时候,并且已经输过一次密码时,在以后的要牌中系统依旧会提示你是否是高级
玩家”,这不免还有点不怎么人性化,游戏的亲合力还有待进一步加强。 (4)此程序虽然是个比较完善的程序,但其中还存在一些问题,主要的就是程 序太烦琐,给计算机带来一些不必要的负载,在运行过程中反映速度慢点,本程 序在运行过程中可能会出现一些警告。就是在实型到整型数据的转换,但对程序 的执行没有任何问题。通过这个程序的制作我明白了有些事情光一个人做是很难 的,必须通过网络查询,求助同学,虚心请教才能完成。
后将这个键替换成*显示即可。)
#define N 32 //32 为空格字符的 ASCII 码值
void fuctions::mima(char &ans,double&card,double&player) //定义一个密
码函数
{
int s2=5678,m2,w1;
//定义两个整型并对一个进行赋值
char str[20]="1234";
char ch;
int i=0,m=0;
cout<<"请输入高级密码(空格结束):"; //提示输入密码
cout.flush();
//清输出缓冲区
ch=getch();
//输入密码
while (ch!=32)
//当输入空格时循环结束
{
if(str[i++]==ch)
力."<<endl;
}
else {
cout<<"高级玩家的密码是 1234"<<endl;
f1.mima(ans,card,player);
}
}
}
5 当玩家一开始就不想进入玩这个游戏时,使用 exit()函数可退出游戏程序。
else exit(0);
//如果玩家不想玩着游戏,则直接退
出游戏程序
设计心得体会:
{card=w1;player=player+w1;}
else
{card=0.5;player=player+0.5;}
}
else
{cout<<"超级密码错误"<<endl;}
}
}
else {cout<<"对不起,你并不知道高级密码!"<<endl; }//提示密码错误 3 每次要牌后可以设定赔率,即开始下的是 10 元钱的注,如果牌好,你可以要
cin>>ans;
if((ans=='h')||(ans=='H'))
{cout<<"非常感谢!";}
else
{cout<<"请您输入超级密码";
cin>>m2;
if(s2==m2)
{cout<<"您要的牌点数:"<<endl;
player=player-card;
cin>>w1;
if(w1<11)
if((ans=='y')||(ans=='Y'))
//判断玩家是否还要下注
{
cout<<"请输入你投入的资本:";
//提示玩家输入赌
注
cin>>bett;
money=money-bettey<0)
//如果资本小于 0,则赌注超过了
资本,
{
//提示玩家错了和要求重新输入
{cout<<'*';
cout.flush();
ch=getch();
++m; }
else {cout<<'!'; cout.flush(); ch=getch();}
}
if(m==4)
//判断高级密码是否相符
{
cout<<"\t\t\t 下一张牌是:"<<card<<endl;//显示下一张牌
cout<<"您满意吗?(是'h'/否's')";
cin>>ans; if((ans=='h')||(ans=='H')) {
f1.mima(ans,card,player); f1.Gamble(money,bett);
bet+=bett; cout<<"\t\t\t 你是继续要牌还是停止?(是'H'/否'S')"; cin>>ans; if((playerturns<5)&&(ans=='h')&&(player<=21)) {cout<<endl; cout<<"\t\t\t 这牌是:"<<card<<endl; cout<<"\t\t\t 总数是 :"<<player<<endl; cout<<"\t\t\t 你的剩余资本为:"<<money<<endl; } else{player=player-card; bet=bet-bett; money+=bett;}
求再下注,当然不能超过你所有的总钱数。
void fuctions:: Gamble (int&money,int&bett) //定义一个陪率函数
{
char ans;
bett=0;
//将 0 赋值给赌注
cout<<"你还要投入资本吗?(是'Y'/否'N'):"; //提示玩家是否还要下
注
cin>>ans;
(超级玩家)。
else{cout<<"如果你想成为高级玩家并获取密码,你必须付出 200 元,你愿
意吗?(是'H'/否'S'):";
cin>>ans;
if((ans=='h')||(ans=='H'))
{
money=money-200;
if(money<0)
{
money=money+200;
cout<<" 你 目 前 还 没 有 这 么 多 资 本 来 享 用 高 级 玩 家 的 权
} 此程序代码保证高级玩家在游戏中不会超过二十一点
2. 编写程序代码实现高级玩家查看下一张牌,且超级玩家可以指定下一张
牌的点数。(输入密码时,如果用一般的 cin 流输入,则密码会显示在屏幕
上起不到保密作用,我们用 getch()函数来接受字符,这个函数的特点是只
要按下一键就能识别,即输入字符不用输入缓冲区保存,直接进入内存,然
VC++课程设计报告
课题题目:21 点的扑克牌游戏 姓名:鲍浩东
班级:11101902 学号:1110190214 程序功能简介:
一个 21 点的扑克牌游戏,玩家一共可以要 5 张牌,但如果牌的点数超过 21。则 为输了,自动出局;在不超过 21 点的情况下,玩家与庄家比较牌的点数大小, 大者为赢。
课程设计要求:
(1)将所有的函数与相应的数据封装到类中,并改写主程序,使程序简化。 (2)程序中一共有 13 张扑克牌可以随机抽取,大于 10 的点数为 10,现要求大 于 10 的点数全部为半点。 (3)要求高级玩家永远不会输掉,即可以查看下一张牌,若大于 21 点,则拒绝, 当然,在游戏规则上不能泄露这点秘密。 (4)超级玩家可以查看下一张牌,即输入指定的字符或字符串,然后按要求输 入密码,密码正确可以看牌,并指定下一级牌点数。 (5)每次要牌后可以设定赔率,即开始下的是 10 元钱的注,如果牌好,你可以 要求再下注,当然不能超过你所有的总钱数。 (6)将界面的提示说明改成中文界面,界面的解释详细友好,可以吸引更多的 玩家。
money=money+bett;
//重新计算总资本
cout<<"你不能投入这么多的资本!"<<endl;//提示玩家下的赌注超出资
本
cout<<"请重新投入资本:";
//提示重新下注
cin>>bett;
money=money-bett;
//计算总资本
}
}
4 若玩家想获取高级密码(超级密码),可以通过扣玩家的资本使成为高级玩家
游戏程序编写过程中遇到的一些问题:
本游戏将玩家分成三个级别:普通玩家,高级玩家(享受高级密码),
超级玩家(享受高级密码和超级密码)
1.关于高级玩家权力和游戏过程设定
f1.hit(card,player);
//使用要牌函数
cout<<"请问你是高级玩家吗?(是'H'/否'S'):"; //寻找高级玩
家
(1)通过这次的编程实践,让我充分了解了我在 c++课程设计方面的学习很过
缺乏,对编写程序过程中的很多点都不理解,特别是类的概念,循环语句的使用
等多方面的不足,在编程过程中通过请教同学,看书了解了更多。 (2)关于密码设置问题,我们未在超级密码方面将密码替换成*,一方面由于我 们的超级密码是建立在高级密码的基础之上的,将高级密码隐藏成*,即可间接 保护超级玩家的权益;另一方面,超级密码函数嵌套于高级密码函数中,造成很 大麻烦。 (3)程序虽然进行了一些修改,但仍旧还有许多需要完善的地方。比如,我们