
21点软件工程实践.doc
24页软件工程实践报告——————————21点扑克牌游戏一、需求分析阶段1、编写目的该程序用来模拟21点扑克牌游戏,玩家最多可以要5张牌,但如果牌的点数之和超过21点,则自动出局;在不超过21点的情况下,玩家与庄家比牌的点数的大小,大者为赢者2、游戏规则分析点数计算:每张牌都有点数, 2 到 10 的牌的点数就是其牌面的数字; J 、 Q 、 K 的点数是 10 分; A 有两种算法, 1 或者 11 ,如果 A 算为 11 时总和大于 21 ,则 A 算为 1 例如 (A,8) 是 19 点,(A,7,J) 则为 18 点 爆牌:玩家手中牌的总点数超过 21 点黑杰克(BlackJack):一张 A 带一张 10 点的牌,比其他 21 点的牌大,例如(A,Q)闲家获得黑杰克,可以获得所下注的1.5倍 停牌:玩家不再要牌,等待其他玩家操作要牌:闲家根据自己手上的点数决定是否要牌,如果要牌,则系统再发一张牌给玩家如果要牌后总点数超过 21 ,则算爆牌,玩家输掉本轮游戏;若要牌后点数为 21 点,则不能再要;如果要牌后总点数不到 21 点,则玩家可以继续“要牌”、“停牌”、“加倍”庄家持牌总点数少于16,则必须要牌,直到超过16,如果庄家的总点数等于或多于 17 点,则必须停牌。
如果庄家手中有A,且A作11点时大于16点,做1点时小于或等于16点,则由庄家自己选择是否要牌 加倍:双倍下注(Double) 如果您已经抽取了两张纸牌,在这两张牌不是“黑杰克”的前提下,如果认为第三张牌可以让您赢过庄家的手牌,您可以要求「双倍押注」 您的赌注将增加双倍,而您只可以再抽取一张额外纸牌 保险:发过牌后如果庄家手中拿到明牌A,玩家就有机会买保险,保险金是玩家当初下注的一半如果押过保险后,庄家是黑杰克(即庄家的另一张牌为10、J、Q、K),那么需要陪给玩家2倍的保险金 如果玩家选择保险:庄家是黑杰克时,庄家只赢得保险金庄家不是黑杰克,庄家首先收走保险金,然后进行要牌、比较的程序,与前述相同 如果玩家拿到21点,仍能拿到全部的酬金 如果玩家不选择保险:庄家是黑杰克时,收走玩家赌金庄家不是黑杰克,仍然进行要牌、比较等程序,与前述相同 对子:闲家可以选择在自己或其他闲家上下注押对子,如果所压的闲家获得对子(即两张相同种类的牌),则下注闲家胜,庄家赔11倍的筹码 分牌:若玩家获得对子,则可以选择分牌,将这两张牌分成两手牌,由这个玩家一人操作,每手牌的赌注与开始的赌注相同分牌后不能“加倍”,拿到 BlackJack 牌型也只算普通的 21 点。
牌型比较: 所有闲家都与庄家比较 黑杰克为特殊牌型,比其他所有牌型都大除黑杰克,其他牌型都以点数比较大小 庄家和闲家点数相同,或都拿到黑杰克,则为平局 庄家和闲家都爆牌,系统判断庄家赢3、数据分析庄家:手牌,点数和,本金;玩家:手牌,点数和,本金,投注;二、模块设计阶段1、基本设计概念和和处理流图要牌加倍分牌玩家开始 庄家要牌停牌操作操作点数和点数和比较结束2、结构21点游戏玩家庄家手牌本金投注数手牌本金3、比较表庄家<21=21>21黑杰克不是玩家<= >且<21>21黑杰克不是黑杰克不是且=不是且!=<=21>21结果输平局赢输平局输赢平局输赢输4、主要模块设计模块1:函数名:initial()参数:玩家总数(包含庄家)功能:初始化各玩家的信息;模块2:函数名: Betting()参数:玩家总数;功能:实现玩家下注模块3:函数名:Showprincipal();参数:玩家总数(包含庄家)功能:显示各玩家的本金;模块4:函数名:Dealing();参数:玩家和玩家编号功能:给玩家和庄家发牌;模块5:函数名:Insurance();参数:玩家总数功能:实现处理玩家是否投保险;模块6:函数名: Playerplay();参数:玩家总数功能:实现玩家的操作:要牌,加倍,分牌,停牌;模块7:函数名:Bankerplay();参数:无功能:实现庄家的操作:要牌和停牌;模块8:函数名:Compare();参数:玩家总数功能:实现玩家与庄家的手牌的比较;其他。
三、程序实现流程初始化游戏信息 Initial():系统发2张牌 Dealing()玩家下注Betting();玩家操作Playerplay();分牌Divide()加倍Double()要牌Want()庄家操作Bankerplay();要牌Want();比较结果Compare()继续结束程序视图:这里说明下结果输赢只判断原始投注的输赢,押对子和保险的输赢不显示;代码:#include "stdafx.h"#include












