21点卡牌游戏

1.游戏玩法

在这里插入图片描述
在这里插入图片描述

游戏流程ER图:
在这里插入图片描述
类关系图:
在这里插入图片描述

2.基础类设计

2.1 Card类
功能:表示卡牌特性的类
方法:init:初始化卡牌特性:花色,大小,正负
str:rep返回正面卡牌的花色大小
flip:改变正负
在这里插入图片描述
2.2 Hand类
功能:表示玩家手上的卡牌特性及操作
方法:init:初始化手中卡牌为空列表
str:rep返回手中的卡牌花色大小
clear:清空手中卡牌(列表设为空)
add:向手中添加卡牌
give:将手中的卡牌传递给另一个手
在这里插入图片描述

3.继承类设计

3.1 Deck类
功能:表示一副牌的特性和功能
基类:Hand类
方法:基类方法(init,str,clear,add,give)
populate:向卡牌的初始化空列表添加所有卡牌
shuffle:打乱所有卡牌
deal:从一副牌中向玩家发牌,可以控制发牌人和数量
在这里插入图片描述

3.2 BJ_Card类
功能:向基类卡牌Card中添加新属性表示点数(value)
基类:Card类
方法:基类方法(init,str,flip)
value:属性方法,增添卡牌点数的新属性
在这里插入图片描述
3.3 BJ_Deck类
功能:重写Deck的populate方法,可以使得BJ_Deck可以添加BJ_Card类
基类:Deck
方法:基类的基类(Hand)的方法:init,str,clear,add,give
基类的方法:populate,shuffle,deal
populate:重写,添加BJ_Card类
在这里插入图片描述
3.4 BJ_Hand类
功能:重写Hand类的构造器,添加name,total属性
基类:Hand
方法:基类方法:(init,str,clear,add,give)
init:重写,添加name
str:添加显示total属性
total:属性方法,返回手牌的总点数(A点数的确定,分情况讨论)
is_busted:根据total判断是否“爆掉”
在这里插入图片描述
3.5 BJ_Player类
功能:表示游戏的玩家及操作
基类:BJ_Hand
方法:基类的基类Hand:str,clear,add,give
基类方法:init,str,total,is_busted
is_hitting:玩家叫牌
bust:显示爆掉的玩家
lose:显示输掉的玩家
win:显示赢的玩家
push:显示平手
在这里插入图片描述
3.6 BJ_Dealer类
功能:表示游戏的庄家及操作
基类:BJ_Hand
方法:基类的基类Hand:str_,clear,add,give
基类方法:init,str,total,is_busted
is_hitting:庄家叫牌
bust:庄家爆掉
filp_first_card:翻开庄家第一张牌
在这里插入图片描述

4.主游戏类设计

BJ_Game类
功能:创建表示一局游戏的对象
方法:init:构造器,创建玩家列表,创建一个庄家和一副牌
still_playing:属性方法:返回目前正在玩的玩家
_addition_cards:向参数player(BJ_player or BJ_Dealer)发牌
play:游戏流程方法
1.发牌(deal方法);隐藏庄家第一张牌(flip_card)
2.给玩家加牌(additional_cards);翻开庄家第一张牌(filp_first_card);返回正在玩 的玩家(still_playing)
3.给庄家加牌(additional_cards);if庄家爆掉(is_busted),所有在玩(still_playing)玩家胜利(win)else比点数(total)
4.清空卡牌(clear)
在这里插入图片描述
在这里插入图片描述

5. 辅助模块设计

Player类:初始化玩家name,score
ask_yes_no方法:询问是否方法,返回y or n
ask_number方法:返回一定范围内数字
在这里插入图片描述

6.main函数

获取玩家列表
调用BJ_Game对象的play函数
游戏循环
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/DMU_lzq1996/article/details/83212171