C语言 21点游戏
C语言21点游戏
C语言21点游戏#include#include#include#include#includeint Bookies_score=1000,/*庄家金币*/Rlayer_score=1000;//玩家金币int Bookiesscore=0,/*庄家当前点数*/Rlayerscore=0;//玩家当前点数int Random,/*玩家随机数*/Randoms;//庄家随机数int Bets_P;//玩家下注int Card;//是否发牌int i=1;int s=1;int main(void){Star_interface();//开始界面getch();system("CLS");//---------------------------------以下为产生玩家随机数发牌代码Judge_WorL();//输或者赢函数}//------------以下开始界面int Star_interface(){int i;system("color 9B");printf("\t\t\t C语言游戏:二十一点\n");printf("\n\n\n\n\n\n\n");printf(" 〓〓〓〓〓〓〓〓");printf("\n 〓\n 〓〓〓〓〓〓〓〓〓〓〓〓〓〓\n 〓\n 〓\n");printf(" 〓〓〓〓〓〓〓〓\n");printf("\n\n");printf("\t\t\t ①:查看规则②:开始游戏\n\n");printf("\t\t\t 制作人:小二\n\n");printf("\t\t\t 版本号:1.0\n\t\t\t");scanf("%d",&i);switch(i){case 1:system("CLS");printf("\t\t\t 二十一点游戏规则\n\n\n\t 介绍:手中所有的牌点数之和不超过21点,谁更接近21点,就赢得游戏。
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点小游戏
//wait.h#include <time.h>#include<string.h>#include <stdio.h>void wait(int milli){clock_t start;start=clock();while( ( clock()-start ) < milli );}//utility.h//Isaac Shaffer//Utility Libray// void Pause(),int GetInt(int L,int H),void signature(), int random(long hi, long lo)#include<iostream.h>#include<stdlib.h>#include<conio.h>#include<time.h>//=========================================================void pause()//displays a message and waits for the user to hit a key{cout<<"Press Any Key To Continue"<<endl;getch();}//=========================================================int GetInt(int L=0,int H=10){int ent;cout<<"Please Enter A Number Between "<<L<<" and "<<H<<endl; cin>>ent;while((ent<L)||(ent>H)){cout<<"Error"<<endl;cout<<"Value must be between "<<L<< " and "<<H<<endl; cin>>ent;}return(ent);}//==========================================================void sign()//Displays ISAAC SHAFFER{cout<<"This Program Was Written By Isaac Shaffer"<<endl; }//============================================================= int random(long hi,long lo)//This Program Finds A Random Number Between Hi and Low{int ran;srand((unsigned)time(NULL));ran=rand()%(hi-(lo-1))+lo;return(ran);}class Ccard{private:double money;//有多少钱double bet;//赌注int win;int lose;int draw;char a[7];public:int playerturns,cputurns;//计算机实际发了多少牌double player,cpu;//计算机和玩家的点数Ccard();//构造函数,初始化void firstplaytwo();//最初两张牌void results();void BET();//接受玩家下注double getmoney();//返回钱数void modifypassword();//修改密码int password();//设置密码void rules();//游戏规则void replay(char&);//是否再来一局void print();//输出最后结果void Hit(double&);//要一张牌void gaojiplayer();//设置高级玩家void superplayer();//设置超级玩家};Ccard::Ccard(){playerturns=0;cputurns=0;money=100;bet=0;win=0;lose=0;draw=0;player=0;cpu=0;strcpy(a,"111111");}void Ccard::firstplaytwo()//计算机和玩家的点数{double playercard1,playercard2,cpucard1,cpucard2;playerturns=2;cputurns=2;playercard1=random(13,1);//取得1到13的随机数cout<<"\n\t\t\t发牌"<<endl;wait(350);//等待350msplayercard2=random(13,1);wait(150);cpucard1=random(13,1);wait(350);cpucard2=random(13,1);if(playercard1>10){playercard1=0.5;}if(playercard2>10){playercard2=0.5;}if(cpucard1>10){cpucard1=0.5;}if(cpucard2>10){cpucard2=0.5;}player=playercard1+playercard2;cpu=cpucard1+cpucard2;cout<<"\t\t\t您总的点数为:"<<player<<endl;cout<<"["<<playercard1<<"]";cout<<"["<<playercard2<<"]";cout<<endl;cout<<"\t\t\t计算机有一张"<<cpucard1<<"显示"<<endl; cout<<endl;cout<<"[*]"<<"["<<cpucard1<<"]";}double Ccard::getmoney()//返回赌金{return money;}void Ccard::rules()//游戏规则{cout<<"\t\t\t********欢迎玩21点游戏********"<<endl;cout<<"\t\t\t*******请看游戏游戏规则*******"<<endl;cout<<"\t\t\t1:您最多能要五张牌"<<endl;cout<<"\t\t\t2:如果您溢出您将输了."<<endl;cout<<"\t\t\t3:如果您赢了将赢得双倍赌金."<<endl;cout<<"\t\t\t4:计算机的牌点数总是超过16点"<<endl;cout<<"\t\t\t即在小于16点时计算机再要牌"<<endl;cout<<"\t\t\t";pause();}void Ccard::BET()//下注{double bet1=0;system("cls");cout<<"\t\t\t您现在有:$"<<money<<endl;cout<<"\t\t\t您想下多大赌注: ";cin>>bet1;if(bet1>0&&bet1<=money){bet+=bet1;money=money-bet1;}else {cout<<"\t\t\t输入错误!您下的赌金必须介于0与您所有的赌本之间!请重新输入:\n";BET();}}void Ccard::results()//输出结果{if(cpu==player){cout<<"\t\t\t打成平局"<<endl;draw++;money=money+bet;}if(player>21)//玩家超过21点{cout<<"\t\t\t很遗憾,您输了!"<<endl;lose++;}else{if(cpu<player)//玩家赢{cout<<"\n\t\t\t恭喜您,您赢了";money=money+(bet*2);win++;}}if(cpu>21)//计算机超过21点{cout<<"\t\t\t计算机输了"<<endl;if(player<21){cout<<"\n\t\t\t恭喜您,您赢了";win++;money=money+(bet*2);}}else{if(cpu>player)//计算机赢了{cout<<"\t\t\t很遗憾,您输了"<<endl;lose++;}}}void Ccard::replay(char &ans)//是否再玩{cout<<"\n\t\t\t您是否想再玩一局?若想按(Y或y)键,否则按(N或n)键";cin>>ans;}void Ccard::print() //输出最后结果{cout<<"\t\t\t\t赢的次数:"<<win<<endl;cout<<"\t\t\t\t输的次数:"<<lose<<endl;cout<<"\t\t\t\t平局次数:"<<draw<<endl;cout<<"\t\t\t\t您的赌本:"<<money<<endl;}int Ccard::password()//密码设置{char str[7];char ch;int i=0;cout<<"\t\t\t请输入六位数密码:";cout.flush();//清输出缓冲区ch=getch();while(ch!='\r')//当输入x字符时循环结束{str[i++]=ch;cout<<'*';cout.flush();ch=getch();}str[i]=0;//输入的密码在str数组中system("cls");if (strcmp(a,str)!=0){cout<<"\t\t\t密码输入错误!\n\t\t\t退出输入请按(Q或q),继续输入按(C或c)!";cin>>ch;system("cls");if(ch=='q'||ch=='Q')return 0;else password();}return 1;}void Ccard::Hit(double &total)//发牌程序{double card1;card1=random(13,1);if(card1>10){card1=0.5;}total=total+card1;cout<<"\t\t\t这张牌的点数为 :"<<card1<<endl;cout<<"\t\t\t总点数为 :"<<total<<endl;}void Ccard::gaojiplayer()//设置高级玩家{playerturns++; //玩家手中的牌书3增加一张if(playerturns>5) //判断玩家手中的牌数是否超过5张{cout<<"\t\t\t对不起!您要的牌数不能超过五张";return;//超过,不能继续要牌}char ans;double card;card=random(13,1);if(card>10){card=0.5;}cout<<"\t\t\t您已有的总点数是:"<<player<<endl;cout<<"\t\t\t您下一张牌的点数是:"<<card<<endl;cout<<"\t\t\t请问是否要这张牌?要(Y或y)否(N或n)";cin>>ans;if((ans=='y')||(ans=='Y')){ playerturns++;player=player+card;cout<<"\t\t\t您的牌面总点数是:"<<player<<endl;}}void Ccard::superplayer()//设置超级玩家{playerturns++; //玩家手中的牌书3增加一张if(playerturns>5) //判断玩家手中的牌数是否超过5张{cout<<"\t\t\t对不起!您要的牌数不能超过五张";return;//超过,不能继续要牌}double n;cout<<"\t\t\t您的牌面总数是:"<<player<<endl;cout<<"\t\t\t计算机牌面总数是:"<<cpu<<endl;playerturns++;cout<<"\t\t\t请输入您要的下一张牌的点数:";cin>>n;if(n<=10&&n>0){player=player+n;cout<<"\t\t\t您要的点数是:"<<n<<endl;cout<<"\t\t\t您现在的牌面总点数是:"<<player<<endl;}else{cout<<"输入的牌面点数必须在0到10之间。
21点游戏编程
{
char password2[20]="super";
char str[20];
do{
char ch;
int i=0;
cout<<"\n请您输入密码,按回车键结束:"<<endl;
cout.flush();
ch=getch();
void deal(float &player,float&cpu,int &playerturns,int &cputurns);
void hit(float &total);
void hit2(float &total);
void hit3(float &total);
void BET(int &bet,int &money);
game.replay(ans);
}while((ans=='y')||(ans=='Y'));
game.print(win,lose,draw,money);
cout<<endl;
cout<<"\t\t\t\t";
return(0);
}
//------------------------------------------------------------------------
{
return(0);
}
cout<<"如果您是普通玩家,请按1."<<endl; //不同的玩家选择不同的游戏模式
21点游戏课程设计
/*玩家最多可以要5张牌,但是如果牌的点数之和超过21,则自动出局,在不超过21点的情况下,玩与庄家比牌的点数大小,大者为赢家。
*/#include <iostream>#include <cstdlib>#include <ctime>using namespace std;class CCard{private:int naPip[5]; //定义一个数组,一共是5张牌。
int nNumber; //发了多少张牌。
int nDollar; //有多少钱int nGamble; //赌注int nWin; //赢局数int nLose; //输局数int nDraw; //输局数public:CCard(); //构造函数void FirstPlayTwo();//最初两张牌int GetNumber();//返回牌张数int GetPip(); //返回点数void DisplayPip();//一次全部显示牌面点数。
void DisplayPip(int ); //除了第一张牌,一次全部显示牌面点数(针对计算机牌的显示)void TurnPlay();//出了一张牌void Win();//赢了计算赌注void Lose();//输了void Draw();//平局int setGamble(int );//设置赌注,赌本不够返回1int getMoney();//返回钱数void DisplayInfo();//打印必要的信息int GetCurrentCard();//返回当前牌点。
};CCard::CCard(){nNumber=0;//开始没有发牌nDollar=100;//初始赌本为0for(int i=0;i<5;i++)naPip[i]=0; //五张牌全部为0nGamble=0;nWin=nLose=nDraw=0; //没输没赢没有平局}int CCard::getMoney(){return nDollar;}void CCard::DisplayInfo()//打印相关信息。
C语言课程设计指导书21点双人对战与人机对战
《C/C++语言课程设计》指导书一、课程设计概要课题名称:21点双人对战和人机对战二、课题背景概述21点扑克是牌类游戏中的比较基础游戏,其基本打法为双人共玩一副洗好的52张牌(大小王拿走),采用回合制比每回合输赢,直至打完一副牌算总积分决出胜负。
每回合双方轮流拿牌,每人牌数2-5张,每回合拿牌结束时统计两人手上牌的总点数,并裁决本回合输赢。
如果轮到一方拿牌而放弃,则本回合此人不能再拿牌;如果手上牌的点数超过21点,则算爆。
如果双方都没爆,则点数较高者获胜;如果一方爆另一方没爆,则没爆者获胜;如果双方都爆,则爆的少的人(点数超过21点较少者)获胜。
牌点计算方式:牌面10、J、Q、K均算10点;牌面2-9的点数同数字;花牌A既可以当1点用,也可以当11点用,具体当什么用,由持有花牌者按有利于自己的策略决定,但是计算机裁决程序总是会按最有利于持花牌者的算法自动进行点数计算。
三、课程设计目标1、课题实现的功能目标渐进开发实现21点双人对战和人机对战,并最终实现其类封装和面向对象程序设计。
2、知识应用能力的培养目标通过项目开发、调试、完善的过程,渐进地理解、正误、巩固和掌握基本数据类型的使用和转换、顺序-分支-循环的组合应用、变量声明和引用、函数的定义/声明/调用、数组和指针使用、结构体和类的使用等语法知识,熟练掌握常用测试和调试技术手段,达到理论联系实践、融会贯通的目的。
3、数学建模能力的培养目标随机数产生无重复无遗漏牌张、随机插牌、A牌的用法、计算胜率(在最后的人机对战要用)都涉及一定数学建模和算法设计应用能力,因此在无形中也锻炼了这种能力。
4、软件工程方法论培养目标从项目开发过程体会、理解和自觉应用程序设计和测试的思路及方法。
理解和应用ADT概念和面向对象程序设计思想的由顶向下设计方法,从顶层抽象设计开始,通过过程抽象和数据抽象,逐层分解、渐进推进程序设计实现和测试改进,理顺程序设计和测试完善的思路。
C语言21点纸牌游戏系统详细设计
printf("输掉:%d局\n", nLose);
printf("平局:%d局\n",nDraw);
printf("剩余资金:%d元\n",nMoney);
}
void Wait_f(int nMilli)
{
int nStart1,nStart2;
{
printf("%d\n",nnn);
printf("您想要哪一张牌");
scanf("%d",&a);
}
system("cls");
do
{
printf("想要继续要牌吗(H开启作弊模式)\n");/*询问玩家是否接着要牌*/
scanf(" %c",&chAnswer);
if((chAnswer=='h')||(chAnswer=='H'))
printf("总点数是:%d点\n", * npTotal);
}
void Results_f(int nPlayer,int nCpu,int nBet,int * npMoney,int * npDraw,int
* npWin,int * npLose)/*统计结果(输赢平及输赢平的局数)*/
{
printf("4:庄家点数等于或大于16时游戏停止。\n");
printf("5:您将获得100元初始基金!\n");
printf("提示:游戏中“是”输入“y”,“否”输入“n”。\n");
c#小游戏21点代码和界面
public partial class Form1 : Form{public int a;public int b;public int i;public int[] ab = new int[12];//数组ab存放临时的牌的图片号public int zhuangnumber;//用于存放庄家点数public int gamernumber;//用于存放游戏者点数public PictureBox[] ptb = new PictureBox[12];public Form1(){InitializeComponent();}//生成牌与点数private void First(out int a, out int b, int q){Random rd = new Random();a = rd.Next(0, 51);if (a >= 0 && a <= 3){b = 2;}else if (a >= 4 && a <= 7)b = 3;}else if (a >= 8 && a <= 11) {b = 4;}else if (a >= 12 && a <= 15) {b = 5;}else if (a >= 16 && a <= 19) {b = 6;}else if (a >= 20 && a <= 23) {b = 7;}else if (a >= 24 && a <= 27) {b = 8;}else if (a >= 28 && a <= 31) {b = 9;}else if (a >= 32 && a <= 47) {b = 10;}else if (a >= 48 && a <= 51) {if (q >= 0 && q <= 21) {b = 10;}elseb = 1;}else{b = 0;Console.Read();}//用递归算法随即生成之前未出现的牌public void Bijiao(out int a, out int b, int q, int[] abc) {int i;Random rd = new Random();a = rd.Next(0, 51);if (a >= 0 && a <= 3){b = 2;}else if (a >= 4 && a <= 7){b = 3;}else if (a >= 8 && a <= 11){b = 4;}else if (a >= 12 && a <= 15){b = 5;}else if (a >= 16 && a <= 19){b = 6;}else if (a >= 20 && a <= 23){b = 7;}else if (a >= 24 && a <= 27){b = 8;}else if (a >= 28 && a <= 31){b = 9;}else if (a >= 32 && a <= 47){b = 10;else if (a >= 48 && a <= 51){if (q >= 0 && q <= 21){b = 10;}elseb = 1;}else{b = 0;Console.Read();}for (i = 0; i < 52; i++){if (abc[i] == a)Bijiao(out a, out b, q,abc);elsebreak;}}//不要牌后比较出赢家并把庄家隐藏的牌显现private void buttonResult_Click(object sender, EventArgs e){if (zhuangnumber > gamernumber){for (i = 1; i < 6; i++){if (ab[i] != 100)this.ptb[i].Image = this.imageList1.Images[ab[i]];}bel2.Text = zhuangnumber.ToString();MessageBox.Show("庄家赢了!开始下一局!");}else if (zhuangnumber == gamernumber){for (i = 1; i < 6; i++){if(ab[i]!=100)this.ptb[i].Image = this.imageList1.Images[ab[i]];}bel2.Text = zhuangnumber.ToString();MessageBox.Show("庄家赢了!开始下一局!");}else{for (i = 1; i < 6; i++){if (ab[i] != 100)this.ptb[i].Image = this.imageList1.Images[ab[i]];}bel2.Text = zhuangnumber.ToString();MessageBox.Show("你赢了!开始下一局!");}}private void结束ToolStripMenuItem_Click(object sender, EventArgs e){Application.Exit();}//游戏规则在第二个Form上private void游戏规则ToolStripMenuItem_Click(object sender, EventArgs e){Form2 myform = new Form2();myform.Show();}//开始在panel上添加PictureBox并设置其属性,生成四张牌,各两张(庄家有一张隐藏)private void开始ToolStripMenuItem_Click_1(object sender, EventArgs e){for (i = 0; i < 12; i++){this.ptb[i] = new PictureBox();this.ptb[i].SizeMode = PictureBoxSizeMode.CenterImage;this.ab[i] = new int();this.ptb[i].Visible = true;ab[i] = 100;//初始化数组abthis.ptb[i].Image = this.imageList1.Images[52];//初始化PicturBox 的图片 }for (i = 0; i < 6; i++){this.panelT.Controls.Add(this.ptb[i]);this.ptb[i].Width = 85;this.ptb[i].Height = 120;this.ptb[i].Top = 11;this.ptb[i].Left = 17 + 85 * i + 15 * (i + 1);}for (i = 6; i < 12; i++){this.panelB.Controls.Add(this.ptb[i]);this.ptb[i].Width = 85;this.ptb[i].Height = 120;this.ptb[i].Top = 11;this.ptb[i].Left = 17 + 85 * (i - 6) + 15 * (i - 5); }bel2.Visible = true;ble4.Visible = true;First(out a, out b, zhuangnumber);zhuangnumber = b;this.ptb[0].Image = this.imageList1.Images[a];ab[0] = a;First(out a, out b, gamernumber);if (ab[0] == a){while (ab[0] == a){First(out a, out b, gamernumber);}gamernumber = b;this.ptb[6].Image = this.imageList1.Images[a];ab[6] = a;}else{gamernumber = b;this.ptb[6].Image = this.imageList1.Images[a];ab[6] = a;}First(out a, out b, zhuangnumber);if (ab[0] == a || ab[1] == a){while (ab[0] == a || ab[1] == a){First(out a, out b, zhuangnumber);}zhuangnumber = zhuangnumber + b;ab[1] = a;}else{zhuangnumber = zhuangnumber + b;ab[1] = a;}bel2.Text = "未知!";First(out a, out b, gamernumber);if (ab[0] == a || ab[1] == a || ab[2] == a){while (ab[0] == a || ab[1] == a || ab[6] == a){First(out a, out b, gamernumber);}gamernumber = gamernumber + b;this.ptb[7].Image = this.imageList1.Images[a];ab[7] = a;}else{gamernumber = gamernumber + b;this.ptb[7].Image = this.imageList1.Images[a];ab[7] = a;}ble4.Text = gamernumber.ToString();}//要的牌必须是未出现的牌,接着检测是否有点数爆了private void buttoninfo_Click(object sender, EventArgs e) {Bijiao(out a,out b,zhuangnumber,ab);for (i = 1; i < 5; i++){if (ab[i] != 100 && ab[i + 1] == 100){ab[i + 1] = a;break;}}zhuangnumber = zhuangnumber + b;bel2.Text = "未知!";Bijiao(out a, out b, gamernumber, ab);for (i = 7; i < 11; i++){if (ab[i] != 100 && ab[i + 1] == 100){ab[i+1] = a;this.ptb[i+1 ].Image = this.imageList1.Images[ab[i+1]];break;}}gamernumber = gamernumber + b;ble4.Text = gamernumber.ToString();if (zhuangnumber > 21 && gamernumber > 21){for (i = 1; i < 6; i++){if (ab[i] != 100)this.ptb[i].Image = this.imageList1.Images[ab[i]];}bel2.Text = zhuangnumber.ToString();MessageBox.Show("平局!开始下一局!");}else if (zhuangnumber > 21){for (i = 1; i < 6; i++){if (ab[i] != 100)this.ptb[i].Image = this.imageList1.Images[ab[i]];}bel2.Text = zhuangnumber.ToString();MessageBox.Show("庄家爆了!你赢了!开始下一局!");}else if (gamernumber > 21){for (i = 1; i < 6; i++){if (ab[i] != 100)this.ptb[i].Image = this.imageList1.Images[ab[i]];}bel2.Text = zhuangnumber.ToString();MessageBox.Show("你爆了!庄家赢了!开始下一局!");}}//洗牌,界面为初始界面private void button1_Click(object sender, EventArgs e){for (i = 0; i < 12; i++){this.ptb[i].Visible = false; }bel2.Visible = false;ble4.Visible = false;}}。
c语言21点小游戏设计
user=user+usercurrent;
switch(usercurrent)
{
case 1:printf("you have got a %cA\n",3);break;
case 2:printf("you have got a %c2\n",3);break;
case 38:printf("computer have got * %cQ\n",5);break;
case 39:printf("computer have got * %cK\n",5);break;
case 40:printf("computer have got * %cA\n",6);break;
case 29:printf("computer have got * %c3\n",5);break;
case 30:printf("computer have got * %c4\n",5);break;
case 31:printf(");break;
case 6:printf("you have got * %c6\n",3);break;
case 7:printf("you have got * %c7\n",3);break;
case 8:printf("you have got * %c8\n",3);break;
case 44:printf("computer have got * %c5\n",6);break;
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点游戏代码
card[i]=NULL;
}
int showpoint();
void showpoker();
void reset();
};
class Newgame
{
private:
Poker *poker;
Player *player[5];
int k=m_num%13;
switch(k)
{
case 1:{if(m_type=='H') cout<<"oììòA ";
if(m_type=='C') cout<<"???¨A ";
if(m_type=='D') cout<<"???éA ";
if(m_type=='S') cout<<"oúìòA ";
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>
#include <time.h>
#include"string.h"
#include<iostream>
using namespace std;
///////////////////////
return NULL;
}
int Poker::sum(int a,int b,int c)
{
return card[a].outnum()+card[b].outnum()+card[c].outnum();
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,用于打印玩家或计算机的信息。
C语言
二、学生信息专业计算机科学与技术学号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; //扑克牌花色};一、需求说明21点纸牌游戏是一个很具有使用价值的扑克牌小游戏。
21点程序源代码
game.super(); break;
default:
cout<<"选择错误,程序退出!"<<endl;
}
return(0);
}
void CCard::setmoney(int a)
{
money=a;
}
//--------------------------------------------------------------------------------
{
do{
cout<<"你输入的字母错误,请从新输入."<<endl;
cin>>ans;
}while((ans!='H'&&ans!='h'&&ans!='s'&&ans!='S'));
}
if((ans=='h')||(ans=='H'))
//fuctions.
class CCard {
private:
float player; //玩家点数
float cpu; //电脑点数
int win; //赢的次数
game.deal(player,cpu,playerturns,cputurns); //为计算机和玩家个发两张牌
do{
cout<<"\n你想继续要牌还是不再要牌?h/s:"; //询问玩家是否要牌
cin>>ans;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int Random,/*玩家随机数*/Randoms;//庄家随机数
int Bets_P;//玩家下注
int Card;//是否发牌
int i=1;
int s=1;
int main(void)
while(1)
{
Judge_C();
i=2;
if(Rlayerscore>21)
{
printf("\n\n\n\t\t\t你的点数超过21点!你输了!");
Judge_M();
s=1;
if(Random==2){NUM_2();Rlayerscore+=2;}
if(Random==3){NUM_3();Rlayerscore+=3;}
if(Random==4){NUM_4();Rlayerscore+=4;}
if(Random==5){NUM_5();Rlayerscore+=5;}
//default:
}
printf("\t\t\t\t按任意键开始游戏");
//---------------------------------以上为开始界面
//---------------------------------
}
int Game_interface()
{
if(Randoms>10){Randoms=10;}
if(Randoms==1){if(Bookiesscore+11>21){Randoms=1;}else{Randoms=11;}}
Bookiesscore+=Randoms;
printf("\t\t\t玩家当前%d点 庄家当前%d点\n",Rlayerscore,Bookiesscore);
if(Random==6){NUM_6();Rlayerscore+=6;}
if(Random==7){NUM_7();Rlayerscore+=7;}
if(Random==8){NUM_8();Rlayerscore+=8;}
if(Random==9){NUM_9();Rlayerscore+=9;}
if(Random==10){NUM_10();Rlayerscore+=10;}
if(Random==12){NUM_J();Rlayerscore+=10;}
if(Random==13){NUM_Q();Rlayerscore+=10;}
if(Random==14){NUM_K();Rlayerscore+=10;}
i=1;
break;
}
if(Rlayerscore>Bookiesscore)
{
system("CLS");
printf("\n\n\n\t\t\t\t恭喜!你赢了!");
Rlayer_score=Rlayer_score+Bets_P;
if(Randoms>10){Randoms=10;}
if(Randoms==1){if(Bookiesscore+11>21){Randoms=1;}else{Randoms=11;}}
Bookiesscore+=Randoms;
}
Sleep(1000);
}
i=1;
{
if(Rlayerscore<=Bookiesscore)
{
printf("\n\n\n\t\t\t\t对不起,你输了!");
Judge_M();
s=1;
break;
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
int Bookies_score=1000,/*庄家金币*/Rlayer_score=1000;//玩家金币
}
}
}
}
}
}
int Judge_M()
{
Rlayer_score=Rlayer_score-Bets_P;
Bookies_score=Bookies_score+Bets_P;
printf("\t\t 庄家金币:%d 玩家金币:%d\n",Bookies_score,Rlayer_score);
printf("\t\t --------------------------------\n");
}
int Judge_C()
{
for(i;i<3;i++)
printf("④自己判断,只要不超过21,都可以再摸一张。\n\n\t\t\t ");
printf("⑤玩家点数超过21点(爆牌),则为输. 点数相等时,庄家赢.\n\n\t\t\t 点数大则大.\n");
getch();
break;
case 2:
break;
printf("\n 〓\n 〓〓〓〓〓〓〓 〓〓〓〓〓〓〓\n 〓\n 〓\n");
{
Star_interface();//开始界面
getch();
system("CLS");
//---------------------------------以下为产生玩家随机数发牌代码
Judge_WorL();//输或者赢函数
}
//------------以下开始界面
int Star_interface()
{
int i;
system("color 9B");
printf("\t\t\t C语言游戏:二十一点\n");
printf("\n\n\n\n\n\n\n");
printf(" 〓〓〓〓〓〓〓 ቤተ መጻሕፍቲ ባይዱ 〓");
}
int Judge_WorL()
{
while(1)
{
Game_interface();//游戏界面
if(Rlayer_score==0){printf("\t\t\t 您已经没有金币了!\n \t\t\t 游戏结束!\n");break;}
if(Bookies_score<=0){printf("\t\t\t您真厉害,庄家已经没有金币了!\n \t\t\t 游戏结束!\n\n\n");break;}
printf(" 〓〓〓〓〓〓〓 〓\n");
printf("\n\n");
printf("\t\t\t ①:查看规则 ②:开始游戏\n\n");
printf("\t\t\t 制作人:小二\n\n");
printf("\t\t\t 版本号:1.0\n\t\t\t");
break;
}
printf("\n\n 是否继续发牌? 1是/2否");
scanf("%d",&Card);
if(Card==1)
{
system("CLS");
Bookiesscore=0;
Rlayerscore=0;
i=1;
getch();
system("CLS");
}
//以下为扑克牌图形绘制调用函数
int NUM_A(){
printf("┏━━━━━┓\n");
printf("┃ ◆ ┃\n");
Bookies_score=Bookies_score-Bets_P;
Bookiesscore=0;
Rlayerscore=0;
i=1;
s=1;
getch();
system("CLS");
break;
}else
scanf("%d",&i);
switch(i)
{
case 1:
system("CLS");
printf("\t\t\t 二十一点游戏规则\n\n\n\t 介绍:手中所有的牌点数之和不超过21点,谁更接近21点,就赢得游戏。\n\n ");
printf("\t\t\t ①:2 到 10 的牌的点数就是其牌面的数字.\n\n \t\t\t ②:J 、 Q 、 K 的点数是 10 分.\n\n\t\t\t ③:A 有两种算法,1或者11,如果 A 算为11时总和\n\n \t\t\t 大于21,则 A 算为1.\n\n\t\t\t ");
Rlayer_score=Rlayer_score+Bets_P;
Bookies_score=Bookies_score-Bets_P;
Bookiesscore=0;
Rlayerscore=0;