C语言21点纸牌游戏系统详细设计
- 格式:docx
- 大小:60.93 KB
- 文档页数:14
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语言课程设计》题目:程序设计基础课程设计班级:姓名:指导教师:所属系部:电子科学与技术系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语言过程中用来锻炼我们编程能力的一种简单有效的方式。
编写二十一点游戏的目的就是在编写过程中学习和掌握各种编程的能力,二十一点游戏中有我们经常接触到的一些头文件,和小的函数体,以及一些相关知识,能让我们在实践中得到锻炼。
一、设计目的与要求1、程序设计的源程序功能如下:(1)将所有的函数与相应的数据封装到类中,并改写主程序,使程序简化。
(2)程序中一共有13张扑克牌可以随机抽取,大于10的点数为10,现要求大于10的点数全部为半点。
(3)要求庄家永远不会暴庄,即庄家可以查看下一张牌,若大于21点,则拒绝,当然,在游戏规则上不能泄露这点秘密。
(4)高级玩家可以查看下一张牌,即按h键,然后按要求输入密码,密码正确可以看牌,并决定是否要牌。
(5)每次要牌后可以设定赔率,即如果开始下的是10元钱的注,如果牌好,你可以要求再下注,当然不能超过你所有的总钱数。
(6)将界面的提示说明改成中文界面,界面的解释详细友好,可以吸引更多的玩家。
二、课程设计(1)题目要求把源程序封装在类中,需要编写一个类来封装所有相关函数和变量,同时对main主函数进行改写,以完成题目的要求。
(2)题目要求把抽到的大于10点的牌的点数设为半点,只需要设计随机取下一张牌的成员函数时用if语句判定牌的点数是否大于10,大于10的牌对其重新赋值为即可。
(3)题目要求超级玩家在输入密码后可以查看下一张牌,只需设计一成员函数,判定玩家是否继续要牌之前加入对玩家是否输入h键的判定,如果有输入,则调用为处理玩家输入密码而单独编写的成员函数,在该函数中,首先判定玩家的密码输入是否正确,不正确则返回0,正确则返回1。
(4)题目要求玩家可以根据手上的牌决定是否下注,只需设计一成员函数,检查玩家的赌注累计不超过他所拥有的总资本。
三、设计描述1、为满足上述第一条要求,在程序中增加了一个类play,封装到类中的函数有:void replay();四、调试分析1、游戏开始2、游戏过程3、游戏结果五、总结主函数的设计显得有些繁冗杂乱,有很多的程序段有简化的空间。
/*玩家最多可以要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/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点游戏课程设计一、课程目标知识目标:1. 学生理解21点游戏的规则,掌握基本的算牌策略。
2. 学生掌握概率的基本概念,并能应用于21点游戏中。
3. 学生理解期望值在游戏决策中的应用。
技能目标:1. 学生能够运用加减法进行快速计算,提高心算能力。
2. 学生能够通过分析概率,制定有效的21点游戏策略。
3. 学生能够通过小组合作,进行游戏实践,提高沟通与协作能力。
情感态度价值观目标:1. 学生培养对数学的兴趣,认识到数学在生活中的实际应用。
2. 学生在游戏中学会遵守规则,培养良好的竞技精神。
3. 学生通过游戏体验,理解风险与决策的重要性,形成正确的价值观。
课程性质:本课程为实践性较强的数学应用课程,结合学生年级特点,注重培养学生的实际操作能力和团队协作能力。
学生特点:六年级学生具备一定的数学基础和逻辑思维能力,好奇心强,喜欢挑战性游戏。
教学要求:教师应引导学生将所学数学知识应用于游戏中,激发学生的学习兴趣,提高学生的实践能力。
同时,注重培养学生的情感态度价值观,使学生在游戏中学会遵守规则,形成正确的价值观。
通过分解课程目标为具体学习成果,便于后续教学设计和评估。
二、教学内容1. 游戏规则介绍:讲解21点游戏的基本规则,包括游戏目标、牌的点数计算、牌的组合方式及游戏流程。
2. 算牌策略学习:分析游戏中的概率问题,引导学生学习基本的算牌策略,如“牌型概率”、“牌数概率”等。
3. 概率与期望值:结合课本中概率知识,讲解期望值在21点游戏中的应用,让学生了解如何通过期望值来判断游戏策略的优劣。
4. 实践操作:组织学生进行小组实践,让学生在游戏中运用所学知识,提高心算能力和决策能力。
5. 教学内容安排和进度:- 第一课时:游戏规则介绍,算牌策略学习;- 第二课时:概率与期望值讲解,实践操作指导;- 第三课时:学生实践,总结经验,交流心得。
6. 教材章节关联:- 《数学》课本:概率章节,结合课本知识进行讲解;- 《实践活动手册》:设计实践任务,让学生在课后进行练习。