“21点”纸牌游戏实验报告

合集下载

C++21点游戏课程设计报告

C++21点游戏课程设计报告

1 题目内容及设计要求1.1 问题描述本次C++课程设计题目是“21点纸牌游戏”,系统的主要功能是娱乐游戏,有电脑和玩家一起玩这个游戏,玩家设法使自己的牌达到总分21并要比电脑开的点数大而且不超过这个数值。

扑克牌的分值取它们的面值。

J,Q,K分别是5,6和6分。

1.2 要求分析编写程序实现游戏,该程序是模拟古老的21点扑克牌游戏,实现1对1的人机大战。

要求游戏过程中任意一方牌的点数之和超过21点,则自动出局;在不超过21点的情况下,玩家下注由电脑随机发牌与庄家比累积牌的点数的大小,大者为赢家。

2 总体设计2.1 总体功能框图2.2 主要算法流程图3. 详细设计程序流程图。

图2-1 算法流程图3程序清单及注释// 21点游戏.cpp : 定义控制台应用程序的入口点。

//#include "stdafx.h"#include<iostream>#include<math.h>#include<time.h>using namespace std;int x=1;int mima;int rand(int n ); //声明bool win();bool win1();bool win2();//定义变量win为逻辑型变量void money(); //运行赌注int main(){cout<<"\t※※※※※※※※※※欢迎进入21点※※※※※※※※※※\n\n";cout<<"\t\t 游戏规则:\n";cout<<endl;cout<<"\t\t 1.玩家最多可下赌注1~100;\n";cout<<endl;cout<<"\t\t 2.如果牌点数的总数超过21点则暴点,自动判数;\n";cout<<endl;cout<<"\t\t 3.计算机方在大于等于16点时不再要牌。

实验一 21点纸牌游戏

实验一 21点纸牌游戏

冰之龙设计实验一21点纸牌游戏专业:软件工程班级:09软工学号:1200911041XX 姓名:XXX实验日期:2010-09-30 实验地点:B102 指导老师:吴景岚一.实验原理“21点”是一个古老的扑克牌游戏,游戏规则是:各个参与者设法使自己的牌达到总分21而不超过这个数值。

扑克牌的分值取它们的面值,A充当1分或者11分(由玩家自己选择一种分值),J.Q和K人头牌都是10分。

二.实验目的庄家对付1到7个玩家。

在一局开始时,包括庄家在内的所有参与者都有两张牌。

玩家可以看到他们的所有牌以及总分,而庄家有一张牌暂时是隐蔽的。

接下来,只有愿意,各个玩家都有机会依次再拿一张牌。

如果某个玩家的总分超过了21(称为“引爆”),那么这个玩家就输了。

在所有玩家都拿了额外的牌后,庄家将显示隐藏的牌。

只要庄家的总分等于或小于16,那么他就必须再拿牌,如果庄家引爆了,那么还没有引爆的所有玩家都将获胜。

引爆的玩家打成平局。

否则,将余下的各玩家的总分与庄家的总分做比较,如果玩家的总分大于庄家的总分,则玩家获胜。

如果二者的总分相同,则玩家与庄家打成平局。

三.实验方法1.首先定义表示扑克牌花色与面值的枚举类型,这样程序可读性更强2.其次,方法Game()用来运行游戏,下面为用伪代码描述的整个游戏的流程:洗牌给庄家和玩家发最初的二张牌隐藏庄家的第一张牌显示庄家和玩家手中的牌依次向玩家发额外的牌显示庄家的第一张牌给庄家发额外的牌if(庄家引爆)没有引爆的玩家人赢引爆的玩家平局elsefor(每个玩家)if(玩家没有引爆且玩家的总分比庄家大) 宣布玩家赢else if(玩家的总分与庄家相等) 宣布平局else 宣布玩家赢四.实验步骤(1)建立工程game_of_21_point(2)将软件包中的utlity.h复制到game_of_21_point文件夹中,并将utility.h加入到工程中。

(3)建立头文件card.h,声明相关用户自定义类型,结构体Card 的运算符 << 进行重载,具体内容如下://文件路径名:game_of_21_point\card.h#ifndef__CARD_H__#define__CARD_H__Typedef enum{ //扑克牌面值:ACE(A),TWO(2)到TEN(10),JACK(J),QUEEN(Q),KING(K)ACK=1,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,JACK,QUEEN,KING} RankType;Typedef enum{ //扑克牌花色:(梅花),DIAMONDS(方块),HEARTS(红桃)和SPADES(黑桃)CLUBS,DIAMONDS,HEARTS,SPADES} suitType;Struct card{ //扑克牌结构体RankType rank;suitType suit;};Ostream &operator<<(ostream,const card &card)//操作结果:重载<<运算符{ //输出花色if(card.suit==CLUBS) outStream<< “梅花”;else if(card.suit==DIAMONDS) outStream<<“方块”;else if(card.suit==HEARTS) outStream<<“红桃”;else if(card.suit==SPADES) outStream<<“黑桃”;//输出面值if(card.rank==ACE) outStream<<“A”;else if(card.rank==JACK) outStream<<“J”;else if(card.rank==QUEEN) outStream<<“Q”;else if(card.rank==KING) outStream<<“K”;else cout<<(int)card.rank;return outStream;}#endif(4)建立头文件game_of_21_point.h,声明及实现21点游戏类GameOf21Point.具体内容如下://文件路径名:game_of_21_point\game_of_21_point.h#ifndef__GAME_OF_21_POINT_H__#define__GAME_OF_21_POINT_H__#include“card.h”#define LEN_OF_MAX_NAME 21//21点游戏类 Gameof21point声明Class Gameof21point{ private:Card deck[52];int dealpos;card hands[8][21];int numofcard[8];char name[8][LEN_OF_MAX_NAME];int numofplayer;void shuffle();int GetTotalscore(card hand[21],int n);void showstatus(int num,bool hideFirsrcardAndTotalscore=false);card Dealonecard(){ return deck[dealpos++];}public:Gameof21Point();Virtual~GameOf21Point(){ }Void Game();};GameOf21Point::GameOf21Point(){int curPos=0;for(int suitPos=0;suitPos<4;suitPos++){ deck[curPos].suit=(suitType) suitPos;Deck[curPos].rank=(RankType) rankPos;curPos++;}}cout << “多少人加入游戏?(1~7):”;cin >> numOfPlayer;while(numOfPlayer<1 || numOfPlayer>7){cout << “人数只能在1~7之间,请重新输入人数:”;cin >>numOfPlayer;}dealPos=0;int i;for(i=0;i<numOfPlayer;i++) numOfCard[i]=0;strcpy(name[0],“庄家”);for(i=1;i<numOfPlayer;i++){ cout <<“输入第”<<i<<“位玩家的姓名:”;cin >> name[i];}cout << “游戏开始” << endl;}Void GameOf21Point::Shuffle(){Rand::SetRandSeed();for (int curPos=51;curPos>0;curpos--){int pos=Rand::GetRand(curPos+1);swap (deck[pos],deck[curPos]);}}int GameOf21Point::GetTotalScore(Card hand[21],int n) {int pos;int totalscore=0;for(pos=0;pos<n;pos++){if (hand[pos].rank==ACE totalscore+=11;else if (hand[pos].rank>TEN) totalscore+=10;else totascore+=(int)hand[pos].rank;}for(pos=0;totalscore>21&&pos<n;pos++){ if (hand[pos].rank==ACE) totalscore-=10;}return totalscore;}Void GameOf21Point::showstatus(int num,bool hideFirstcardAndTotalscore){cout << name[num] << “:”;if (hideFirstcardAndTotalscore) cout << “<隐藏>”;else cout << hands[num][0];for (int i=1;i<numOfcard[num];i++)cout << hands[num][i];for(i=1;i<numOfPlayer;i++){if(GetTotalscore(hands[i],numOfcard[i])<=21)cout << name[i] << “,恭喜你,你赢了!” <<endl;else cout << name[i] <<“,哎,你打平局了!”<<endl;}}else{for(i=1;i<=numOfPlayer;i++){ if(GetTotalscore(hand[i],numOfcard[i])<=21&&GetTotalscore(hands[i],numOfcard[i]) >GetTotalscore (hands[0],numOfcard[0]){ cout << name[i] << “,恭喜你,你赢了!” << endl;}elseif(GetTotalscore(hands[i],numOfcard[i])==GetTotalscore(hands[0],numOfcard[0]) { cout << name[i]<< “,唉,你打平局了!” << endl;}else{ cout << name[i] << “,对不起,你输了!” << endl;}}}}#endif(5)建立源程序文件 main.cpp,实现main()函数,具体代码如下:#include“utility.h”#include“game_of_21_point.h”int main(void){do{ GameOf21Point objGame;objGame.Game();if (!hideFirstcardAndTotalscore)cout << “总分值 << GetTotalscore(hands[num],numOfcard[num]);cout << endl;if (GetTotalscore(hands[num],numOfcard[num])>21)cout << name[num]<<“引爆!”<< endl;}Void GameOf21Point::Game(){Shuffle()int i,j;for(i=0;i<2;i++)hands[0][numOfcard[0]++]=DealOneCard();ShowStatus(0,ture);for(i=1;i<=numOfPlayer;i++){for(j=0;j<2;j++)hands[i][numOfcard[i]++]=DealOneCard();ShowStatus(i);}cout << endl;for(i=1;i<numOfPlayer;i++){ cout << name[i] << “,你想再要一张牌吗”;if (UserSaysYes()){ hands[i][numOfcard[i]++]=DealOneCard();ShowStatus(i);}}ShowStatus(0);While (GetTotalscore(hands[0],numOfCard[0])<=16){ hands[0][numOfCard[0]++]=DealOneCard();ShowaStatus(0);}cout << endl;if (GetTotalscore(hands[0],numOfCard[0])>21){ cout << “你想再玩一次吗”;}while (UserSaysYes());syetem(“PAUSE”);return 0;}(6)编译及运行21点游戏五.实验测试与结论测试时,屏幕显示如下:多少人加入游戏?(1~7):2输入第1位玩家的姓名:方超输入第2位玩家的姓名:赵建游戏开始庄家:<隐藏>方块7方超:梅花3 红桃2 总分值5赵建:方块9 红桃10 总分值19方超:你想再要一张牌吗(y,n)?y方超:梅花3 红桃2 黑桃k 总分值15赵建:你想再要一张牌吗(y,n)?n庄家:梅花Q 方块7 总分值17方超:对不起,你输了!赵建:恭喜你,你赢了!你想再玩一次吗(y,n)?n。

用汇编语言实现21点游戏基本功能

用汇编语言实现21点游戏基本功能

【实验名称】用汇编语言实现21点游戏基本功能【实验目的】熟悉汇编语言的基本用法【实验内容】准确判断任意牌型的大小,辨认玩家与庄家的输赢情况;累计玩家各牌局的输赢比和详细记录。

【实验步骤】提要:a)每次发牌时随机单张产生A~Kb)A记1点c)在给游戏者发牌前,游戏者可增加奖励或扣除的积分d)用屏幕显示当前牌点情况和操作信息,然后用键盘输入游戏者的操作流程:1.给参加游戏的人基本积分为1002.首先电脑自身产生一张底牌(显示)3.给参加游戏的人发一张牌4.询问游戏者是否要牌,若不要牌,则跳转到第9步5.重复第3个步骤6.计算牌点的和(J、Q、K记为10点,2~10分别记2~10点)7.若牌点和最小值大于21点,跳转第14步骤8.重复步骤4~79.判断电脑自身的牌点最大是否大于游戏者,若大于,则跳转第14步骤10.电脑自身再发一张牌(显示)11.重复第6步骤12.若牌点和最小大于21点,跳转第15步骤13.重复步骤9~1214.提示电脑赢的信息,扣除游戏者积分10分,跳转第16步骤15.提示游戏者赢的信息,奖励游戏者积分10分16.显示电脑底牌和当前游戏者剩余积分17.询问是否继续玩下一盘,若要重复2~1718.结束子程序调用:流程图:【实验程序】DATA SEGMENTBUFF1DB'****************************************'DB''DB'Welcome you to run this game!'DB''DB'****************************************','$' N DB?JIFEN DB?DIPAI DB?PAIDIAN DB?QH1DB?QH2DB?SH DB'10','$'JK DB'PEI LV(10OR5)?','$'MESSAGE0DB'DOU YOU WANT TO MORE?','$'MESSAGE1DB'************YOU WIN!************','$'MESSAGE2DB'************YOU LOST!************','$'MESSAGE3DB'Go on or not?','$'MESSAGE4DB'This is dipai:','$'MESSAGE5DB'This is JIFEN:','$'MESSAGE6DB'******THE GAME IS OVER!******','$'MESSAGE7DB0AH,0DH,'This is your PAIDIAN:','$'DATA ENDSSTACK SEGMENT STACKDW256DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXBEGIN:CALL XX0A1:MOV JIFEN,50A2:CALL RANDMOV DIPAI,BLCALL CHULIMOV QH1,BLJB1:CALL XXMOV AH,0INT16HCMP AL,59HJE JICALL XX21MOV N,5JMP A3JI:MOV N,10CALL XX20A3:CALL RANDCALL XX19MOV PAIDIAN,BLCALL DISP0CALL CHULIMOV QH2,BLCALL XX4A4:MOV AH,0INT16HCMP AL,4EHJE HCCMP AL,59HJNE A4A5:CALL RANDCALL XX19MOV PAIDIAN,BLCALL DISP0CALL CHULIA6:ADC QH2,BLA7:CMP QH2,21JA A14CALL XX4A8:JMP A4ZZ:CALL XX0JMP A2HC:CALL RETURNA9:MOV AL,QH2CMP QH1,ALJA A14A10:CALL RANDMOV PAIDIAN,BLCALL DISP0CALL CHULIA11:ADC QH1,BLA12:CMP QH1,21JA A15A13:JMP A9A14:CALL XX14CALL JIANCMP JIFEN,10JB A18JMP A16A15:CALL XX15CALL JIAA16:CALL XX16MOV AL,DIPAIMOV PAIDIAN,ALCALL DISP0CALL DISP1A17:CALL XX17 AG:MOV AH,0INT16HCMP AL,59hJE ZZCMP AL,4EHJE A18JNE AGA18:CALL XX18MOV AH,4CHINT21HRAND PROCPUSH CXPUSH DXPUSH AXSTIMOV CX,0FFFFH YS:DEC CXJNE YSMOV AH,0INT1AHMOV AX,DXAND AH,3MOV DL,13DIV DLMOV BL,AHADC BL,1POP AXPOP DXPOP CXRETRAND ENDPDISP0PROCCALL SPACECALL SPACECALL SPACEMOV AL,PAIDIANCMP AL,9JA OTHERCMP AL,1JE AADD AL,30HT:MOV DL,ALMOV AH,2INT21HRETOTHER:CMP AL,10JE SHICMP AL,11JE JCMP AL,12JE QMOV AL,4BHJMP TJ:MOV AL,4AHJMP TQ:MOV AL,51HJMP TA:MOV AL,41HJMP TSHI:LEA DX,SHMOV AH,09HINT21HRETDISP0ENDPDISP1PROCLEA DX,MESSAGE5MOV AH,9INT21HMOV AL,JIFENCMP AL,100JB MMMOV CL,100CBWDIV CLMOV BL,AHOR AL,30HMOV DL,ALMOV AH,2INT21HMOV AL,BL MM:MOV CL,10CBWDIV CLMOV DL,ALMOV AH,2INT21HMOV DL,30HMOV AH,2INT21HRETDISP1ENDPJIAN PROCCMP N,10JA XSBB JIFEN,10JMP TU1X:SBB JIFEN,20 TU1:RETJIAN ENDPJIA PROCCMP N,10JA YADC JIFEN,10JMP TUY:ADC JIFEN,20 TU:RETJIA ENDPXX PROCLEA DX,JKMOV AH,9INT21HRETXX ENDPXX0PROCMOV AX,0600HMOV CX,0000HMOV DX,184FHMOV BH,07HINT10HMOV AH,02HMOV DH,5MOV DL,15MOV BH,00HINT10HLEA DX,BUFF1INT21HCALL RETURNRETXX0ENDPXX4PROCCALL RETURNLEA DX,MESSAGE0MOV AH,09INT21HRETXX4ENDPXX14PROCCALL RETURNLEA DX,MESSAGE2MOV AH,9INT21HRETXX14ENDPXX15PROCCALL RETURNLEA DX,MESSAGE1MOV AH,9INT21HRETXX15ENDPXX16PROCCALL RETURNlea dx,MESSAGE4MOV AH,9INT21HRETXX16ENDPXX17PROCCALL RETURNLEA DX,MESSAGE3MOV AH,9INT21HCALL RETURNRETXX17ENDPXX18PROCLEA DX,MESSAGE6MOV AH,9INT21HRETXX18ENDPSPACE PROCMOV DL,20HMOV AH,2INT21HRETSPACE ENDPCHULI PROCCMP BX,10JB DMOV BX,10D:ADD BX,0RETCHULI ENDPRETURN PROCMOV AH,2MOV DL,0AHINT21HMOV DL,0DHINT21HRETRETURN ENDPXX19PROCLEA DX,MESSAGE7MOV AH,9INT21HRETXX19ENDPXX20PROCCALL SPACEMOV DL,59HMOV AH,2INT21HCALL SPACERETXX20ENDPXX21PROCCALL SPACEMOV DL,4EHMOV AH,2INT21HCALL SPACERETXX21ENDPRETCODE ENDSEND START。

软件综合实验报告_21点游戏

软件综合实验报告_21点游戏

综合实验报告( 2008-- 2009年度第1学期)实验名称:软件综合实验题目:21点游戏院系:计算机科学与技术系班级:计算0701班组长学号:1071220103组长姓名:丁炳淼指导教师:石敏设计周数: 2 周成绩:日期:2009年1月9日一、综合实验的目的与要求㈠实验目的:掌握用图解决实际问题的方法。

培养综合运用已经学过的程序设计知识,针对实际问题建立相应的数据模型的能力。

综合运用所学过的知识分析实际问题和解决问题的能力,熟练掌握一种开发平台并编写出高效、完整的实用程序。

进一步提高编程能力。

㈡实验要求:图形用户界面包含一个含“开始”、“要牌”、“结束”三个按钮和分别代表“当前分数”和“历史最高分数”的两个标签的Panel对象,以及一个使用CardLayout布局策略的Panel对象,设其中叠放了一幅52张的扑克牌(有“红心”、“黑桃”、“草花”、“方片”四种花色,每种花色有A到K共13张牌)。

当用户点击“开始”按钮时,当前分数清零,“要牌”按钮被激活;当用户点击“要牌”按钮时,计算机在52张牌中随机跳出一张显示给用户,并将其分数添加在“当前分数”的标签中显示出来;如果当前分数超过21,则用户输掉了一局,“要牌”按钮变灰,用户不能再要牌;如果用户点击“结束”按钮,结束当前一局游戏,查看当前分数是否超过历史最高分数,是则更新历史最高分数。

二、设计正文⑴实验题目21点游戏⑵程序总体结构在同一个文件夹下由文件夹cards,存放了名为0.gif~52.gif,代表扑克的图1、图形界面(构造函数以及布局设置,图片的加入及初始)2、事件监听器(ActionListener和WindowListener)3、事件处理的设计(Actionperformed和窗口时间处理)4、main方法⑶界面设计用边布局管理器BorderLayout():north设置为电脑庄家的面板comcards,作边布局BorderLayout(),从左到右面板包括标签“电脑庄家”,文本区拿到牌点数和当前总分数;south设置为玩家的面板mycards,也作作边布局BorderLayout(),从左到右面板包括标签“玩家”,文本区各次拿到牌的点数和当前总分数;west设置了介绍面板introduce,作网格布局GridLayout(3,1)放入3各文本区:2个为介绍,最下面的为用户输入name用;east为设置分数的面版rank,作网格布局GridLayout(3,1),包含1个标签wager,作提示信息,然后为玩家当前分数和历史最高分数的文本区;中央区为一个GridLayout (1,2)网格布局,其左边再加入一个按钮面板作GridLayout(3,2),放入6个按钮,实现5个,另一个作空。

21点c++程序设计报告

21点c++程序设计报告
VC++课程设计报告
课题题目: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;}

Java实训报告纸牌游戏黑杰克

Java实训报告纸牌游戏黑杰克

《Java实训》设计报告纸牌游戏黑杰克专业:软件技术班级:09-23班学号:*********姓名:***石家庄科技信息职业学院信息工程系2011年10月15日项目简介纸牌游戏黑杰克一、项目需求黑杰克简称为21点,1700年左右法国赌场就有这种21点的纸牌游戏。

该游戏由 2 到 6 个人玩,使用除大小王之外的52 张牌,游戏者的目标是使手中的牌的点数之和不超过21 点且尽量大。

有着悠久的历史。

发牌:一开始给每个玩家发一张牌,这张牌是底牌,只有玩家自己知道是什么,然后只发给要牌的玩家。

如果所有玩家都不再要牌,则开牌计分。

计分:2到10都是按牌面计算点数,直接累加。

J、Q、K按10点计算,A一般记作11点累加,此时如果点数大于21点则将A记作1点。

爆分:21点为最大点数值,如果玩家手中的牌点数大于21点,则属于爆分,玩家手中点数将归0,判定为输。

要牌:玩家在底牌之后可以继续要牌,知道点数满意或爆分为止。

下注:玩家在每局开局前可下注,定当前局输赢的钱数。

输赢:21点位最大点数,哪个玩家点数大,就哪个玩家赢。

二、项目设计下面是5个Java源文件的总体设计。

(1)BlackJack.java(主类)BlackJack 类负责创建主窗口,该类含有main方法,游戏从该类开始执行。

BlackJack类有5种类型的对象,分别是:Dealer,Scanner,Player,Computer,Card,对象。

(2)Card.java对于一张扑克牌来说,主要有牌面值及花色,Card类用faces数组及suits数组分别存储所有牌面值及花色,并提供了getFace()方法及getSuit()方法获取一张扑克的面值及花色信息。

(3)CardsInHand.java玩家手上的牌。

(4)Dealer.java荷官的抽象只是实现了两个较核心的能力,一个是发牌,一个是洗牌。

发牌涉及到一个随机算法的问题,是比较重要的运算处理。

(5)Player.java玩家类的抽象是非常明显的,完全模拟了现实中一个玩家的属性及行为,属性有:赢次数、输次数、拥有现金数、手上的牌。

21点游戏

21点游戏
实验步骤与内容
1分析
2层次图
3流程图
4关键代码
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
char c;
char c1[2];
int no;
}Card;
Card card[54]={{3,"A",1},{3,"2",2},{3,"3",3},{3,"4",4},{3,"5",5},{3,"6",6},{3,"7",7},{3,"8",8},{3,"9",9},{3,"10",10},{3,"J",10},{3,"Q",10},{3,"K",10},
else {printf("\n电脑总点数:%d\n",sum[0]); printf("玩家总点数:%d\n",sum[1]);printf("恭喜您获胜了!\n");}}
else if(sum[0]>21&&sum[1]>21)
{
if(sum[0]<sum[1]) {printf("\n电脑总点数:%d\n",sum[0]); printf("玩家总点数:%d\n",sum[1]);printf("电脑胜!\n");}
}
for(k=0;k<=i;k++)

21点游戏实验报告

21点游戏实验报告

实验一21点游戏一、实验目的1.掌握使用Java语言进行结构化程序设计;2.熟悉Java基本语法,基本数据类型,各种运算符及表达式的使用,掌握运算符优先级,熟悉使用Java的选择语句,循环语句。

3.熟悉Eclipse开发环境,编写简单的Application程序,并编译和执行。

二、实验要求1.调试程序、编译,运行后得到正确的结果;2.写出实验报告,要求记录编译和执行Java程序当中的系统错误信息提示,并给出解决办法。

三、实验环境1.计算机一台;2.JDK、MyEclipse工具软件。

四、实验内容编写并运行21点游戏。

具有菜单形式的界面掌握Random类基本用法设计胜负判定算法五、实验步骤1.了解21点游戏的基本规则2.用0到53代表52张扑克牌3.完成洗牌发牌模块4.设计胜负判定算法六、实验结果源代码为:package youxi21dian;import java.util.Scanner;import java.util.Random;public class Dian21 {/*** @param args*/static int bb[]=new int[52];static String aa[]=new String[52];static Scanner s=new Scanner(System.in);static Random r=new Random();static int s1=0,s2=0,p=0;//同意发排,s1,s2表示甲方和乙方的最后点数public static void main(String[] args) {// TODO Auto-generated method stubfor(int i=0;i<52;i++)bb[i]=i%13+1;for(int i=0;i<13;i++)aa[i]="红桃"+(i+1);for(int i=13;i<26;i++)aa[i]="黑桃"+(i%13+1);for(int i=26;i<39;i++)aa[i]="方片"+(i%13+1);for(int i=39;i<52;i++)aa[i]="梅花"+(i%13+1);System.out.println("欢迎使用游戏21点!");System.out.println("请选择盘点方:0甲方,1 乙方!");int f=s.nextInt();if(f==0)System.out.println("您为:甲方;对方为:乙方!");else System.out.println("您为:乙方;对方为:甲方!");xipai();System.out.println("现在开始发牌!");int j=1,y=1;fapai(j,y);while(j==1||y==1){System.out.println("如果需要发牌请按1!若不需要请按0!");System.out.print("甲方请选择:");int a=s.nextInt();j=a;System.out.print(" 乙方请选择:");int b=s.nextInt();y=b;System.out.println("");fapai(j,y);}System.out.println("结果为:");result();}//洗牌public static void xipai(){int t;String l;for(int m=0;m<1000;m++){int i=r.nextInt(51);t=bb[i];bb[i]=bb[51-i];bb[51-i]=t;l=aa[i];aa[i]=aa[51-i];aa[51-i]=l;}}//发牌public static void fapai(int j,int y){if(j==1){System.out.print("甲方为: ");System.out.print(aa[p]);System.out.println(" "+"点数为:"+" "+bb[p]);s1=s1+bb[p++];}else System.out.println("甲方不需要发牌!");if(y==1){System.out.print("乙方为: ");System.out.print(aa[p]);System.out.println(" "+"点数为:"+" "+bb[p]);s2=s2+bb[p++];}else System.out.println("乙方不需要发牌!");}//结果public static int result(){System.out.print("甲方点数为: "+s1);System.out.println(" 乙方点数为: "+s2);if(s1>21&&s2>21){System.out.println("双方点数均超过21点,都被爆掉了!平局!");return 0;}if(s1>21&&s2<=21){System.out.println("甲方点数超过21点,被爆掉了!乙方胜!");return 0;}if(s2>21&&s1<=21){System.out.println("乙方点数超过21点,被爆掉了!甲方胜!");return 0;}if(s2>s1){System.out.println("乙方胜!");return 0;}else if(s2==s1){System.out.println("平局!");return 0;}else {System.out.println("甲方胜!");return 0;}}}结果为:欢迎使用游戏21点!请选择盘点方:0甲方,1 乙方!1您为:乙方;对方为:甲方!现在开始发牌!甲方为: 梅花13 点数为: 13乙方为: 梅花12 点数为: 12如果需要发牌请按1!若不需要请按0!甲方请选择:1乙方请选择:1甲方为: 梅花11 点数为: 11乙方为: 红桃4 点数为: 4如果需要发牌请按1!若不需要请按0!甲方请选择:0乙方请选择:0甲方不需要发牌!乙方不需要发牌!结果为:甲方点数为: 24 乙方点数为: 16甲方点数超过21点,被爆掉了!乙方胜!。

21点游戏

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点纸牌游戏课程设计报告(李志文)

21点纸牌游戏课程设计报告(李志文)

《高级语言程序设计》课程设计报告设计题目21点纸牌游戏设计专业计算机科学与技术(教育方向)班级06教育班姓名李志文学号0611140522007年6 月4日目录1.设计目标 (2)2.设计思想 (2)3.类及对象设计 (5)4.程序源代码 (6)5.调试记录 (19)6.总结 (22)21点纸牌游戏设计1.课程设计题目描述、要求及设计目标1.1 题目描述一个21点的扑克牌游戏。

本程序取点于手机游戏,游戏规则与手机游戏相同。

玩家一共可以要5张牌,但如果牌的点数超过21,则暴了,自动出局;在不超过21点的情况下,玩家与庄家比牌的点数大小,大者为赢。

1.2 要求及设计目标(1)将所有的函数与相应的数据封装到类中,并改写主程序,使程序简化。

(2)程序中一共有13张扑克牌可以随机抽取,大于10的点数为10,A根据情况点数不同,当前点数小于11时为11点,大于10时则为1点。

(3)要求庄家永远不会暴庄,即庄家可以查看下一张牌,若大于21点,则拒绝,当然,在游戏规则上不能泄露这点秘密。

(4)高级玩家可以查看下一张牌,即按H键,然后按要求输入密码,密码正确可以看牌,并决定是否要牌。

(5)将界面的提示说明全部设计为中文界面,界面的解释详细友好,可以吸引更多的玩家。

2.设计思想本程序设计了一个Game_21类,包含16个类成员函数。

考虑达到更好的封装性,程序所有功能都在类里实现,主函数只调用了一个类的开始成员函数充分体现了类的面向对象编程的优点。

程序中一共有13张扑克牌可以随机抽取,设计了一个random函数实现。

大于10的点数为10,A根据情况点数不同,当前点数小于11时为11点,大于10时则为1点。

用if判断语句控制。

庄家永远不会暴庄,庄家取下一张牌之前先判定取牌后总点数是否会大于21点,大于的话就拒绝取下一张,小于时就继续取牌,在函数中首先随机产生下一张牌,接着用条件语句判定原有点数与新牌的点数之和是否大于21点,然后决定是否取牌。

C 21点纸牌游戏实践报告

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++程序的多文件组织。

数学建模纸牌游戏21点(蒙特卡罗法)

数学建模纸牌游戏21点(蒙特卡罗法)
步骤5
根据玩家选择,计算此次游戏的输赢情况,并更新赌金 和筹码数。
步骤6
重复步骤2至5多次(例如10000次),记录每次游戏 的输赢情况。
模拟结果分析
分析1
计算每次游戏的输赢概率。分析庄家和玩家的赢率,了解游戏的 基本策略。
分析2
绘制输赢概率与牌面点数的关系图。了解不同牌面点数对输赢的 影响。
分析3
庄家胜利条件
庄家手中的牌点数超过其他所有玩家手中牌 点数总和时,庄家胜利。
基本策略
01
02
03
保持点数
玩家应尽量让自己的牌点 数接近21点,避免超过21 点。
观察庄家
玩家应密切关注庄家的牌 点数变化,以便调整自己 的策略。
适时加倍
当庄家手中的牌点数较大 时,玩家可以适时加倍自 己的牌点数,以增加获胜 概率。
03
游戏通常使用一副或两副标准的扑克牌,每副牌有52张, 大小顺序为2-A-K-Q-J-10-9-8-7-6-5-4-3。
蒙特卡罗方法简介
蒙特卡罗方法是一种基于随机抽样的数值计算 方法,通过模拟大量随机样本的统计特性来求 解问题。
在21点游戏中,蒙特卡罗方法可以用来模拟玩 家和庄家抽取纸牌的过程,通过计算各种可能 的牌型组合出现的概率来预测游戏结果。
根据胜负分析和赔率调整要牌 和停牌的阈值。
测试与验证
通过模拟大量游戏,测试策略 的有效性。
优化反馈
根据测试结果,持续优化和改 进策略。
06
结论与展望
研究总结
01
成功应用蒙特卡罗方法对21点游戏进行数学建模,通过大量随 机模拟分析游戏策略和胜率。
02
发现最优策略并非一直加牌,而是根据当前牌面和庄家牌面进

c语言21点游戏程序设计报告

c语言21点游戏程序设计报告

C语言21点游戏程序设计报告摘要本报告介绍了一个基于C语言开发的21点游戏程序设计。

通过使用C语言的函数、分支、循环和文件输入输出等特性,我们实现了一个可以在终端上运行的21点游戏。

该游戏模拟了在赌场中玩的21点游戏,玩家可以与计算机进行对战。

实现该游戏的主要目的是加深对C语言的理解和熟练运用,同时提供一个供玩家娱乐的游戏平台。

介绍21点游戏,也称为Blackjack,是一种非常流行的纸牌游戏。

游戏的目标是通过在不超过21点的情况下,比对手的点数更高来赢得游戏。

玩家通过抽取一张张纸牌,计算自己的点数并决策是否继续抽牌。

点数最接近21点且不超过21点的一方将获胜。

游戏规则1.游戏开始后,玩家和计算机将各自获得两张初始牌,其中计算机的一张牌是暗牌。

2.玩家可以选择是否继续抽牌,若选择继续,将再抽取一张牌并计算点数。

3.若玩家的点数超过21点,则玩家判负,游戏结束。

4.若玩家选择停止抽牌,则计算机将暂停抽牌并计算自己的点数。

5.若计算机的点数超过21点,则计算机判负,玩家获胜。

6.若计算机的点数在17点及以上,且不超过21点,则比较双方点数大小,点数较大的一方获胜。

7.若计算机的点数小于17点,则计算机继续抽牌,并根据规则进行判断。

8.比赛结束后,可以选择重新开始或退出游戏。

程序设计思路1.定义一个结构体Card,用于表示一张扑克牌,结构体包含花色和点数两个成员变量。

2.定义一个结构体Player,用于表示一个玩家或计算机,结构体包含姓名和点数两个成员变量。

3.定义函数initialize_deck,用于初始化一副扑克牌。

4.定义函数shuffle_deck,用于洗牌,将扑克牌顺序打乱。

5.定义函数deal_card,用于发牌给玩家和计算机。

6.定义函数calculate_points,用于计算玩家或计算机的点数。

7.定义函数print_card,用于打印一张扑克牌的信息。

8.定义函数print_player,用于打印玩家或计算机的信息。

21点游戏实验报告

21点游戏实验报告

西安郵電學院实验报告学院名称:通信与信息工程学院实验名称:用汇编语言编写21点游戏班级:信息安全0801班成员:组长:何鎏(29)组员:盖作为(26) 雷倩(27)封飞(28) 庞兰(30)【实验名称】用汇编语言实现21点游戏基本功能【实验目的】熟悉汇编语言的基本用法【实验内容】准确判断任意牌型的大小,辨认玩家与庄家的输赢情况;累计玩家各牌局的输赢比和详细记录。

【实验步骤】提要:a)每次发牌时随机单张产生A~Kb)A记1点c) 在给游戏者发牌前,游戏者可增加奖励或扣除的积分d) 用屏幕显示当前牌点情况和操作信息,然后用键盘输入游戏者的操作流程:1. 给参加游戏的人基本积分为1002. 首先电脑自身产生一张底牌(显示)3. 给参加游戏的人发一张牌4. 询问游戏者是否要牌,若不要牌,则跳转到第9步5. 重复第3个步骤6. 计算牌点的和(J、Q、K记为10点,2~10分别记2~10点)7. 若牌点和最小值大于21点,跳转第14步骤8. 重复步骤4~79. 判断电脑自身的牌点最大是否大于游戏者,若大于,则跳转第14步骤10. 电脑自身再发一张牌(显示)11. 重复第6步骤12. 若牌点和最小大于21点,跳转第15步骤13. 重复步骤9~1214. 提示电脑赢的信息,扣除游戏者积分10分,跳转第16步骤15. 提示游戏者赢的信息,奖励游戏者积分10分16. 显示电脑底牌和当前游戏者剩余积分17. 询问是否继续玩下一盘,若要重复2~1718. 结束子程序调用:流程图:【实验程序】DATA SEGMENTBUFF1 DB '****************************************'DB ' 'DB ' Welcome you to run this game! 'DB '****************************************','$' N DB ?JIFEN DB ?DIPAI DB ?PAIDIAN DB ?QH1 DB ?QH2 DB ?SH DB '10','$'JK DB 'PEI LV(10 OR 5)?','$'MESSAGE0 DB 'DOU YOU W ANT TO MORE?','$'MESSAGE1 DB '************YOU WIN!************','$'MESSAGE2 DB '************YOU LOST!************','$'MESSAGE3 DB 'Go on or not?','$'MESSAGE4 DB 'This is dipai:','$'MESSAGE5 DB ' This is JIFEN:','$'MESSAGE6 DB '******THE GAME IS OVER !******','$'MESSAGE7 DB 0AH, 0DH,'This is your PAIDIAN:','$'DATA ENDSSTACK SEGMENT STACKDW 256 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DSMOV AX,0PUSH AXMOV AX,DA TAMOV DS,AXMOV AX,STACKMOV SS,AXBEGIN: CALL XX0A1: MOV JIFEN,50A2: CALL RANDMOV DIPAI,BLCALL CHULIMOV QH1,BLJB1: CALL XXMOV AH,0INT 16HCMP AL,59HJE JICALL XX21MOV N,5JMP A3JI: MOV N,10A3: CALL RANDCALL XX19MOV PAIDIAN,BLCALL DISP0CALL CHULIMOV QH2,BLCALL XX4A4: MOV AH,0INT 16HCMP AL,4EHJE HCCMP AL,59HJNE A4A5: CALL RANDCALL XX19MOV PAIDIAN,BLCALL DISP0CALL CHULIA6: ADC QH2,BLA7: CMP QH2,21JA A14CALL XX4A8: JMP A4ZZ: CALL XX0JMP A2HC: CALL RETURNA9: MOV AL,QH2CMP QH1,ALJA A14A10: CALL RANDMOV PAIDIAN,BLCALL DISP0CALL CHULIA11: ADC QH1,BLA12: CMP QH1,21JA A15A13: JMP A9A14: CALL XX14CALL JIANCMP JIFEN,10JB A18JMP A16CALL JIAA16: CALL XX16MOV AL,DIPAIMOV PAIDIAN,ALCALL DISP0CALL DISP1A17: CALL XX17AG: MOV AH,0INT 16HCMP AL,59hJE ZZCMP AL,4EHJE A18JNE AGA18: CALL XX18MOV AH,4CHINT 21HRAND PROCPUSH CXPUSH DXPUSH AXSTIMOV CX,0FFFFH YS: DEC CXJNE YSMOV AH,0INT 1AHMOV AX,DXAND AH,3MOV DL,13DIV DLMOV BL,AHADC BL,1POP AXPOP DXPOP CXRETRAND ENDPDISP0 PROCCALL SPACECALL SPACECALL SPACEMOV AL,PAIDIANJE AADD AL,30HT: MOV DL,ALMOV AH,2INT 21HRETOTHER: CMP AL,10JE SHICMP AL,11JE JCMP AL,12JE QMOV AL,4BHJMP TJ: MOV AL,4AHJMP TQ: MOV AL,51HJMP TA: MOV AL,41HJMP TSHI: LEA DX,SHMOV AH,09HINT 21HRETDISP0 ENDPDISP1 PROCLEA DX,MESSAGE5MOV AH,9INT 21HMOV AL,JIFENCMP AL,100JB MMMOV CL,100CBWDIV CLMOV BL,AHOR AL,30HMOV DL,ALMOV AH,2INT 21HMOV AL,BLMM: MOV CL,10CBWMOV AH,2INT 21HMOV DL,30HMOV AH,2INT 21HRETDISP1 ENDPJIAN PROCCMP N,10JA XSBB JIFEN,10JMP TU1X: SBB JIFEN,20 TU1: RETJIAN ENDPJIA PROCCMP N,10JA YADC JIFEN,10JMP TUY: ADC JIFEN,20 TU: RETJIA ENDPXX PROCLEA DX,JKMOV AH,9INT 21HRETXX ENDPXX0 PROCMOV AX,0600HMOV CX,0000HMOV DX,184FHMOV BH,07HINT 10HMOV AH,02HMOV DH,5MOV DL,15MOV BH,00HINT 10HMOV AH,09HINT 21HCALL RETURNRETXX0 ENDPXX4 PROCCALL RETURNLEA DX,MESSAGE0MOV AH,09INT 21HRETXX4 ENDPXX14 PROCCALL RETURNLEA DX,MESSAGE2MOV AH,9INT 21HRETXX14 ENDPXX15 PROCCALL RETURNLEA DX,MESSAGE1MOV AH,9INT 21HRETXX15 ENDPXX16 PROCCALL RETURNlea dx,MESSAGE4MOV AH,9INT 21HRETXX16 ENDPXX17 PROCCALL RETURNLEA DX,MESSAGE3MOV AH,9INT 21HCALL RETURNRETXX18 PROCLEA DX,MESSAGE6MOV AH,9INT 21HRETXX18 ENDPSPACE PROCMOV DL,20HMOV AH,2INT 21HRETSPACE ENDPCHULI PROCCMP BX,10JB DMOV BX,10D: ADD BX,0RETCHULI ENDPRETURN PROCMOV AH,2MOV DL,0AHINT 21HMOV DL,0DHINT 21HRETRETURN ENDPXX19 PROCLEA DX,MESSAGE7MOV AH,9INT 21HRETXX19 ENDPXX20 PROCCALL SPACEMOV DL,59HMOV AH,2INT 21HCALL SPACERETXX20 ENDPCALL SPACEMOV DL,4EHMOV AH,2INT 21HCALL SPACERETXX21 ENDPRETCODE ENDSEND START【实验公平性概率及分析】【实验分析与心得体会】盖作为:雷倩:刚刚拿到题目的时候,有点犯愁,汇编语言以前不曾接触过,只是通过这个学期的学期当时觉得要编写一个游戏很困难。

“21点”纸牌游戏实验报告

“21点”纸牌游戏实验报告

课程设计报告课程名称:面向对象程序设计与开发课程设计设计题目:“21点”纸牌游戏年级:09系别:计算机学院专业:计算机科学与技术小组成员名单:陈坚鹏李浩艺陈子龙任课教师:莫家庆老师完成时间:2012年 3 月30 日肇庆学院计算机学院课程设计结果评定目录“21点”纸牌游戏 (1)1 概述 (1)2 实验内容 (1)3 概要设计 (2)4 测试结果和分析 (5)5 课程设计体会 (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张三,唉,你打平局了!李四,对不起,你输了!你想再玩一次吗(y,n)?2、需求分析(1)测试边界内的值。

程序设计实验案例之21点扑克游戏模拟系统

程序设计实验案例之21点扑克游戏模拟系统

程序设计实验案例之21点扑克游戏模拟系统程序设计实验案例之21点扑克游戏模拟系统一、引言21点扑克游戏是一种非常具有挑战性和娱乐性的纸牌游戏。

它的规则简单易懂,但是需要玩家具备一定的策略性和心理素质。

本文将介绍一个由程序设计实验案例所构建的21点扑克游戏模拟系统。

二、系统功能1. 模拟21点扑克游戏的规则和流程。

2. 提供玩家与电脑对战的功能。

3. 自动计算双方的得分和比较结果。

4. 展示游戏结果和分数统计。

5. 可以调整游戏的难度和设置。

三、系统设计1. 游戏规则和流程设计在程序中首先需要设计和实现21点扑克游戏的规则和流程。

包括发牌、计算点数、判断输赢等功能。

程序应当能够模拟真实游戏中的操作,例如可以选择抽牌、停牌等。

2. 界面设计界面设计是一个重要的环节,它直接关系到用户的游戏体验和操作。

界面应当简洁明了,美观大方。

可以考虑使用图形界面或者命令行界面,以适应不同用户的需求。

3. 数据模型设计系统应当有一个数据模型来存储和管理游戏中的数据,例如牌的数值和花色、玩家的得分等。

在设计中需要考虑如何有效地表示和存储这些数据,以便于后续的操作和计算。

4. 算法设计系统需要设计和实现一些算法来实现游戏的核心功能。

例如,计算牌的点数可以根据牌的数字和花色来判断,不同的牌的点数计算方式可能不同。

另外,系统还需要设计算法来判断输赢和计算得分。

5. 异常处理设计在编写程序时,需要考虑到各种可能出现的异常情况,并设计相应的异常处理机制。

例如,判断玩家是否爆牌,发牌时是否牌已经用完等。

四、系统实现和测试1. 程序编码根据系统设计,进行程序编码。

可以使用C++、Java、Python等编程语言来实现。

在编码过程中,要注意代码的可读性和灵活性,避免出现冗余代码和死循环。

2. 调试和测试编码完成后,需要进行调试和测试,确保程序能够正常运行和达到预期结果。

可以进行单元测试和集成测试,对系统的各个功能模块进行逐个检验。

五、使用和优化1. 使用和体验将系统部署到用户可以方便访问的平台上,例如PC、手机等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计报告
课程名称:面向对象程序设计与开发课程设计设计题目:“21点”纸牌游戏
年级:09
系别:计算机学院
专业:计算机科学与技术
小组成员名单:陈坚鹏李浩艺陈子龙任课教师:莫家庆老师
完成时间:2012年 3 月30 日
肇庆学院计算机学院
课程设计结果评定
目录
“21点”纸牌游戏 (1)
1 概述 (1)
2 实验内容 (1)
3 概要设计 (2)
4 测试结果和分析 (5)
5 课程设计体会 (5)
“21点”纸牌游戏
1 概述
本课程设计通过编写相关代码实现“21点”游戏。

使用语言:C++语言
编译环境:VC++ 6.0
2 实验内容
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
张三,唉,你打平局了!
李四,对不起,你输了!
你想再玩一次吗(y,n)?
2、需求分析
(1)测试边界内的值。

(2)测试边界值。

(3)测试边界外的值。

(4)输出结果。

3 概要设计
1、存储结构
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,Q UEEN,KING
}RankType;
typedef enum{
//扑克牌花色:CLUBS(梅花),DIAMONDS(方块),HEARTS(红桃),SPADES(黑桃)
CLUBS,DIAMONDS,HEARTS,SPADES
}SuitType;
struct Card{ //扑克牌结构体
RankType rank; //扑克牌面值
SuitType suit; //扑克牌花色
//21点游戏类gameof21point声明
class GameOf21Point{
private:
Card deck[52]; //一副扑克牌
int dealPos; //发牌位置
Card hands[8][21]; //hand[0]存储于庄家手中的扑克牌,hand[1~7]存储于各位玩家手中的扑克牌
int numOfCard[8]; //庄家numOFCard[0]及玩家numOFCard[1~7]手中的扑克牌数
char name[8][LEN_OF_MAX_NAME]; //庄家与玩家姓名
int numOfPlayer; //玩家人数
void Shuffle(); //洗牌,将扑克牌混在一起以便产生一种随机的排列
int GetTotalScore(Card hand[21],int n); //返回一手扑克牌的总分值
void ShowStatus(int num,bool hideFirstCardAndTotalScore=false); //显示庄家(对应num=0)或玩家(对应num>0)当前的状态
Card DealOneCard(){return deck[dealPos++];} //发一张扑克牌
public:
GameOf21Point();
virtual~GameOf21Point(){}
void Game(); //运行游戏
};
2、函数
ostream& operator<<(ostream& outStream, const Card &card)
//该函数用来重载<<运算符
void Shuffle();
//该函数实现洗牌功能,将扑克牌混在一起以便产生一种随机的排列
int GetTotalScore(Card hand[21],int n);
//该函数用来返回一手扑克牌的总分值
void ShowStatus(int num,bool hideFirstCardAndTotalScore=false);
//该函数用来显示庄家(对应num=0)或玩家(对应num>0)当前的状态Card DealOneCard(){return deck[dealPos++];}
//该函数用来发一张扑克牌
int GameOf21Point::GetTotalScore(Card hand[21],int n )
//返回一手扑克牌的总分值
V oid Game();
//该函数实现游戏的运行,开始。

3、流程图
4 测试结果和分析
5 课程设计体会
本次课程设计,使我对C++面向对象程序设计有了进一步的认识和掌握,在设计的过程中,我们更好的懂得了团队合作的重要性,程序设计过程中,出现过几次小错误,都是在头文件处出现的,通过大家的努力还有查阅了相关资料,最后终于把问题解决了。

相关文档
最新文档