c++21点游戏的代码和报告_第1页
c++21点游戏的代码和报告_第2页
c++21点游戏的代码和报告_第3页
c++21点游戏的代码和报告_第4页
c++21点游戏的代码和报告_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数学与计算机学院 课程设计说明书 课 程 名 称: 面向对象程序设计-课程设计 课 程 代 码: 题 目: 21 点的扑克牌游戏 年级/专业/班: 09/软件工程/1 班 学 生 姓 名: 学 号: 1104 开 始 时 间: 2011 年 06 月 13 日 完 成 时 间: 2011 年 06 月 21 日 课程设计成绩: 学习态度及平 时成绩(30) 技术水平与实际 能力(20) 创新 (5) 说明书撰写质量(45) 总 分 (100) 指导教师签名: 年 月 日 21 点的扑克牌游戏 目 录 1 1 引引 言言 .1 1 1.1 问题的提出 .1 1.2 任务与分析.1 2 2 程序的主要功能程序的主要功能 .2 2 2.1 新建用户功能.2 2.2 判断密码功能.2 2.3 判断进程功能 .2 2.4 显示功能.2 2.5 获得牌的功能.2 2.6 初始化功能.2 3 3 程序运行平台程序运行平台 .3 3 4 4 总体设计总体设计 .4 4 5 5 程序类的说明程序类的说明 .5 5 6 6 模块分析模块分析 .6 6 6.1 新建用户模块 .6 6.2 显示模块 .6 6.3 判断密码模块 .8 6.4 判断游戏进程模块 .10 6.5 获得一张牌模块 .11 6.6 初始化模块 .12 7 7 系统测试系统测试 .1313 8 8 结论结论 .1616 参考文献参考文献 .1717 21 点的扑克牌游戏 摘摘 要要 随着计算机的普及,计算机游戏逐渐进入了这个时代,本次利用学到的 c+ 编写了一个 21 点的扑克牌游戏,该游戏具有新建用户,判断牌等功能 关键词:关键词:21 点的扑克牌游戏;计算机; -1- 21 点的扑克牌游戏 1 引引 言言 1.1 问题的提出问题的提出 设计一个 21 点的扑克牌游戏,玩家一共可以要 5 张牌,但如果牌的点数超过 21,则暴了,自 动出局;在不超过 21 点的情况下,玩家与庄家比牌的点数大小,大者为赢。 1.2 任务与分析任务与分析 (1) 将所有的函数与相应的数据封装到类中。 (2) 程序中一共有 13 张扑克牌可以随机抽取,大于 10 的点数全部为半点:只需 设计随机取下一张牌的成员函数时使用 if 语句判定牌的点数是否大于 10,大于 10 的 牌对其重新赋值为 0.5 即可。 (3) 要求庄家永远不会暴庄,即庄家可以查看下一张牌,若大于 21 点,则拒绝, 当然,在游戏规则上不能泄露这点秘密:在函数中首先随机产生下一张牌,接着用条 件语句判定原有点数与新牌的点数之和是否大于 21 点,然后决定是否取牌。 (4) 高级玩家可以查看下一张牌,即按 H 键,然后按要求输入密码,密码正确可 以看牌,并决定是否要牌:设计一成员函数,判定玩家是否继续要牌之前加入对玩家 是否输入 H 键的判定,如果有输入则调用为处理玩家输入密码而单独编写的成员函数, 在该函数中,首先判定玩家的密码输入是否正确,不正确则返回 0,正确则返回 1。 (5) 每次要牌后可以设定赔率,即如果开始下的是 10 元钱的注,如果牌好,你可 以要求再下注,当然不能超过你所有的总钱数:设计一成员函数,检查玩家的睹注累 计不超过他所拥有的总资本。 (6) 将界面的提示说明用中文界面,界面的解释详细友好,可以吸引更多的玩家。 -2- 21 点的扑克牌游戏 2 程序的主要功能 2.1 新建用户功能新建用户功能 新建两个用户。分别是电脑和用户玩家,为他们输入名字。 2.2 判断密码功能判断密码功能 判断密码是否正确,用户是否为高级用户。 2.3 判断进程功能判断进程功能 每次用户摸牌调用该功能进行判断玩家是否胜利或者失败。 2.4 显示功能显示功能 显示游戏进程,及用户和电脑摸到的牌 2.5 获得牌的功能获得牌的功能 为用户随机获得一张牌 2.6 初始化功能初始化功能 当进行下一局的游戏时候,自动调用该功能,进行玩家数据的统计和所有标志位 的初始化。 -3- 21 点的扑克牌游戏 3 程序运行平台 Vs2008。 -4- 21 点的扑克牌游戏 4 总体设计 图 4.1 系统总体框架图 主 函 数 新 建 用 户 显 示 信 息 判 断 密 码 判 读 牌 获 得 牌 初 始 化 -5- 21 点的扑克牌游戏 5 程序类的说明 GameGame 类的声明类的声明 class Game int color5; int num5; static int time2; static int money; static int score2; char *name ; int stopflag; static int currentodds;/当前赌注 static int ucode;/ 高级玩家的密码 public: Game(int Stop = 0); void StartMenu();/开始菜单 void Menu();/游戏选项菜单 void Exit();/退出游戏 void Help();/游戏帮助 void ShowPoke(int m, int n);/显示单张扑克牌 void Show(int j);/显示当前游戏界面 void InitUsers();/初始化游戏 void InitFlag();/初始化所有标志位 int JudgeCode(int);/判断密码 static void InitData();/初始化数据 void GetCard(int i);/玩家获得卡片 void CpuGetCard(int i);/电脑获得卡片 void CheckCode(int i,int m, int n);/进入高级玩家模式 void SetOdds();/设置赌注 int Sflag();/设置标志位 static int Judge(Game /判断游戏进度和胜利与否 static void Start(Game /初始化用户 ; -6- 21 点的扑克牌游戏 6 模块分析 6.16.1 新建用户模块新建用户模块 系统将提示用户输入玩家和电脑的名字 流程图 提示用户输入名称 开始 用户输入玩家和电脑的名称 结束 void Game:InitUsers() char Name100; coutName; name = new char (strlen(Name) + 1); strcpy(name, Name); 6.26.2 显示模块显示模块 显示模块将显示用户和玩家当局的扑克。 void Game:Show(int j) int i; if(j = 0) -7- 21 点的扑克牌游戏 cout_ _n; cout 赌注:currentodds*2 money $moneyendl; coutsetw(15)玩家:namesetw(10)分数:scorej endl; for(i = 0; i timej; +i) cout _ ; coutendl; for(i = 0; i timej; +i) coutPokeColorcolori ; coutendl; for(i = 0; i timej; +i) if (numi = 10) cout10 ; else coutPokeNumnumi ; coutendl; for(i = 0; i timej; +i) if (numi = 10) cout 10 ; else cout PokeNumnumi ; coutendl; for(i = 0; i timej; +i) cout PokeColorcolori ; coutendl; for(i = 0; i timej; +i) cout ; if(j = 0) coutn BlackJackn; else cout 10) tempscore = 10; else tempscore = n; couttemp; if(temp = h) couttempcode; if(JudgeCode(tempcode) ShowPoke(m,n); cout 21) cout玩家放弃n; stopflag = 1; else +time0; numi = n; colori = m; score0 += tempscore; money -= currentodds; else cout密码错误! 21) coutyou lose!endl; money -= currentodds; cout很遗憾你失去了$currentodds score1) coutyou win!n; money += currentodds*2; cout恭喜你获得了$currentodds*2endl; else coutyou lose!n; cout很遗憾你失去了$currentoddsendl; return 1; return 0; 6.56.5 获获得一张牌模块得一张牌模块 若用户选择继续,系统调用随机函数进行 void Game:GetCard(int i) int m,n,temp; char ch; if(time0 != 0) cout是否继续(y )?; coutch; else ch = y; if(ch = y) SetOdds(); m = rand()%4; n = rand()%13 +1; if(n 10) temp = 10; else temp = n; if (strcmp(name,12) = 0) -12- 21 点的扑克牌游戏 CheckCode(i, m, n); else +time0; numi = n; colori = m; score0 += temp; if(ch = n) cout玩家放弃!endl; stopflag = 1; if(ch = q) Menu(); 6.66.6 初始化模块初始化模块 系统将初始化所有标志位和一些数据,进行下一轮的游戏。 void Game:InitData() int i; for (i = 0; i 2; +i) timei = 0; scorei = 0; currentodds = 10; void Game:InitFlag() stopflag = 0; -13- 21 点的扑克牌游戏 7 系统测试 首先进入 VC+6.0,打开工程 21 点游戏.dsw,然后进入源程序,也可以不打开工 程,直接双击 person 文件夹下的 debug 或 release 子文件夹下的 person.exe 文件即 可运行程序。 游戏的主界面 -14- 21 点的扑克牌游戏 上图是用户输入名称和显示扑克的界面。 高级玩家有查看摸到的牌。 -15- 21 点的扑克牌游戏 游戏结束,进行下一轮的游戏 -16- 21 点的扑克牌游戏 8 结论 这个程序设计是第三次课程设计,我选择的是二十一点的扑克牌游戏,这个课题 用到了 C+语言程序设计的知识,通过这次课程设计,使我对 C+课程设计有了更深的 了解,对课本上的知识有了进一步的掌握,同时也使我对自己的专业知识有了进一步 的巩固加深。 这个程序,我觉得创新之处就是我讲死气沉沉的 debug,变的生动起来,一改以 前人做这个课程设计固定的模式,无法吸引用户去玩,我尝试着用符号对扑克牌进行 绘制,最后成功了。 总之,在这次课程设计过程中,我收获了很多,既为我以后学习设计有了很大的 帮助,也为将来的人生之路有了很好的铺垫。 -17- 21 点的扑克牌游戏 参考文献 1 李强,贾云霞 编著. Visual C+项目开发实践. 北京:中国铁道出版社,2003 2Islamabad. Software tools for forgery detectionJ. Business line.2001. (5). 3 朱立华 编著.面向对象程序设计及 c+. 人民邮电出版社,2010 代码代码 #include #include #include #include #include using namespace std; char PokeColor4 = 3,4,5,6; char PokeNum14 = 0,A,2,3,4,5,6,7,8,9,I,J,Q,K; class Game int color5; int num5; static int time2; -18- 21 点的扑克牌游戏 static int money; static int score2; char *name ; int stopflag; static int currentodds;/ static int ucode; public: Game(int Stop = 0); void StartMenu(); void Menu(); void Exit(); void Help(); void ShowPoke(int m, int n); void Show(int j); void InitUsers(); void InitFlag(); int JudgeCode(int); static void InitData(); void GetCard(int i); void CpuGetCard(int i); void CheckCode(int i,int m, int n); -19- 21 点的扑克牌游戏 void SetOdds(); int Sflag(); static int Judge(Game static void Start(Game ; int Game:time2 = 0; int Game:money = 1000; int Game:score2 = 0; int Game:currentodds = 0; int Game:ucode = 654; void Game:InitData() int i; for (i = 0; i 2; +i) timei = 0; scorei = 0; currentodds = 10; -20- 21 点的扑克牌游戏 void Game:InitFlag() stopflag = 0; void Game:StartMenu() char load=; cout_ _nnnnn; cout 二十一点 nnnn MADE BY LIUn; cout ; for(int i = 0; i = strlen(load); +i) coutloadi; Sleep(50); coutn_ _endl; coutLoading success!endl; getchar(); -21- 21 点的扑克牌游戏 void Game:Menu() int i, j = 1; while(j = 1) cout_ _n; coutsetw(20) 菜单; coutn1 开始游戏n2 帮助n3 退出nnnnn; couti; switch(i) case 1:return; case 2:Help(); break; case 3:Exit(); break; -22- 21 点的扑克牌游戏 void Game:Help() cout_ _nn; cout游戏起源n21点游戏为一款极具趣味性的牌类游戏,最 早出现n 在十六世纪,起源于法国,法语称:vingt-et-un (单单n 字面来看是和,因为法文数字本身的复杂性,就是简n 单的), 因此在广为流行后该游戏就叫“”。后传入n 英国并广泛流传,如果玩家拿到黑心“A”和黑心“J”n 就会给予额外的奖励,英文的名字叫黑杰克(Blackjack) nnn; cout_ _nn; cin.sync (); getchar(); -23- 21 点的扑克牌游戏 void Game:Exit() exit(0); Game:Game (int Stop) stopflag = Stop; void Game:Show(int j) int i; if(j = 0) cout_ _n; cout 赌注:currentodds*2 money $moneyendl; -24- 21 点的扑克牌游戏 coutsetw(15)玩家:namesetw(10)分数: scorejendl; for(i = 0; i timej; +i) cout _ ; coutendl; for(i = 0; i timej; +i) coutPokeColorcolori ; coutendl; for(i = 0; i timej; +i) if (numi = 10) cout10 ; else coutPokeNumnumi ; coutendl; for(i = 0; i timej; +i) if (numi = 10) cout 10 ; else cout PokeNumnumi ; -25- 21 点的扑克牌游戏 coutendl; for(i = 0; i timej; +i) cout PokeColorcolori ; coutendl; for(i = 0; i timej; +i) cout ; if(j = 0) coutn BlackJackn; else coutn_ _n; void Game:ShowPoke(int m, int n) cout _endl; -26- 21 点的扑克牌游戏 coutPokeColorm n; if(n = 10) cout10 n; else coutPokeNumn n; if(n = 10) cout 10n; else cout PokeNumnn; cout PokeColormn; cout endl; void Game:InitUsers() char Name100; coutName; name = new char (strlen(Name) + 1); strcpy(name, Name); void Game:GetCard(int i) int m,n,temp; char ch; if(time0 != 0) cout是否继续(y )?; coutch; else ch = y; if(ch = y) SetOdds(); m = rand()%4; n = rand()%13 +1; if(n 10) -28- 21 点的扑克牌游戏 temp = 10; else temp = n; if (strcmp(name,12) = 0) CheckCode(i, m, n); else +time0; numi = n; colori = m; score0 += temp; if(ch = n) cout玩家放弃! 21) cout电脑放弃! 10) tempscore = 10; else tempscore = n; couttemp; if(temp = h) couttempcode; if(JudgeCode(tempcode) ShowPoke(m,n); cout 21) cout玩家放弃n; stopflag = 1; else +time0; numi = n; colori = m; score0 += tempscore; money -= currentodds; else cout密码错误!endl; +time0; numi = n; colori = m; score0 += tempscore; money -= currentodds; -32- 21 点的扑克牌游戏 int Game:JudgeCode(int m) if(m = ucode) return 1; else return 0; void Game:SetOdds() int temp, flag = 0; char ch; if(money = 0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论