用C语言实现21点游戏

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

用C语言实现21点游戏

作者:纪辉进

来源:《现代信息科技》2020年第06期

摘; 要:C语言是实践性很强的一门课程,要学好C语言,就得多编写代码多练习;C语言课程不仅在计算机类专业的开设,很多高校连非计算机专业也在学习设;“填鸭式”“验证式”教学已经让学生苦不堪言,对学习提不起兴趣,将21点扑克牌游戏案例引入C语言的教学,借此激发学生的学习热情,积累项目经验,达到提升学生实践动手能力的目的。

关键词:C语言;情境教学;任务驱动;项目案例;21点扑克牌游戏

中图分类号:TP311.1 ; ; ;文献标识码:A 文章编号:2096-4706(2020)06-0099-03

Abstract:C language is a very practical course. To learn C language well,you have to write more code and practice more;C language courses are not only offered in computer majors,but also in non computer majors in many colleges and universities;“cramming method” and “verification” teaching have made students miserable and have no interest in learning. This paper introduces the case of BlackJack card game into the teaching of C language,hoping to stimulate students’enthusiasm for learning,accumulate project experience and improve students’practical ability.

Keywords:C language;situational teaching;task driven;project cases;blackjack game

0; 引; 言

C语言是一门面向过程的程序設计语言,学完本门课程后要能熟练地编写顺序结构、选择结构和循环结构的程序;按教材案例进行“验证式”的学习,不会举一反三、发散思维,对知识不会综合运用,就如同“死读书”。

越来越多的行业、岗位运用计算机和软件来处理问题,是因为软件的灵活,能按照特定的语法,在规则范围内灵动地组合,能解决日常生活中无穷无尽的需求;书本上的知识,我们要活学活用;将生活化的案例引入“C语言程序设计”课程,对提升学生的逻辑思维素质、实践动手能力都大有好处,特别是游戏情境案例,能提高学生学习兴趣,激发主动学习的动力,帮助学生探索新知,构建知识体系;本文将探讨21点扑克牌游戏的实现算法。

1; 项目背景

1.1; 开发环境

开发语言:C语言。

开发工具:Visual Studio 2012/Visual C++ 6.0。

1.2; 项目需求

21点扑克牌游戏规则如下:一副扑克牌有“黑桃A”到“黑桃K”“红桃A”到“红桃K”“梅花A”到“梅花K”“方块A”到“方块K”,共52张,“A”算1点,“2”算2点,以此类推,“10”算10点,“J”“Q”“K”都按10点计算点数;另外“A”既可计算为1点,也可计算为11点,当成11点的前提条件是总点数不超出21点的范围,否则只能当成1点,这意味着对庄家和玩家怎么有利怎么算;游戏开始先给庄家发两张牌,其中一张作为底牌不展示牌面,另一张显示牌面;后给玩家发两张牌,牌面都展示出来;然后重复询问玩家是否要牌,如果玩家要牌,再次展示庄家和玩家的所有牌面(庄家底牌不显示),直到玩家不要牌或玩家牌面超过21点为止;每给玩家发

一张牌就重新展示庄家和玩家牌面,并询问玩家是否要牌;玩家不要牌后庄家根据牌面点数决定是否要牌,直到庄家牌面赢或超出21点的范围为止;谁的牌面越趋近21点且不超过21点谁赢,同为21时庄家赢,决出胜负后游戏进入下一轮。游戏程序执行效果如图1所示。

2; 项目设计

2.1; 数据模型

C语言中常用的数据类型有int、float、double、char;屏幕上要输出如“黑桃A”的字符串,需要用到一维字符数组;一副扑克牌有52张,需要用到二维字符数组;char pk[52][7]={"黑桃A",...,"黑桃K",...,"方块K"};用一维整型数组表示点数intpoint[52]={1,2, (10)

10,10,10,…,1,2,…,10,10,10,10};每张牌每局只能发一次,用一维整型数组记录牌是否发出过,未发为0,发出为1,int already[52]={0}。

记录庄家和玩家拿到的牌是扑克牌数组的第几张,我们只用保存数组下标,庄家极限概率可得到4个A、4个2、3个3,共11张牌,玩家极限可得到4个A、4个2、3个3,共11张牌,玩家可能计算失误多要一张共12张牌;int boss[11],player[12];A可当11点计算的前提是庄家或玩家有A牌,要记录庄家玩家A牌个数:int bossA、int playerA;要记录牌的张数和点数:int bossi、playeri、bossPoint、playerPoint;模块化可降低程序复杂度,为方便在各函数中访问以上数据,必须将数据设置为全局变量,还要做好随机种子的初始化,为取随机数做好准备。

2.2; 程序流程图

21点游戏程序设计流程图如图2所示。

3; 核心代码

3.1; 发牌实现代码

int getpk()//发一张有效牌,牌数组下标0-51随机,buf为0牌未发过为1发过,发过得重发

{int r, buf;do{ r=rand()%52; buf=0;if (already[r]= =1)buf=1;else already[r]=1;}while (buf);

return r;}

3.2; 计算玩家牌面点数和代码

相关文档
最新文档