[CareerCup] 8.1 Implement Blackjack 实现21点纸牌
8.1 Design the data structures for a generic deck of cards. Explain how you would subclass the data structures to implement blackjack.
这道题让我们设计一个21点纸牌游戏的数据结构,用面向对象的思想来设计。那么既然21点是一种特定的纸牌游戏,它可以是从普通纸牌的基础上派生出来的。所以我们先实现最基本的纸牌类Card,里面包括值和花色,还有一些基本的判断或标记可用性的函数。然后就是基本的牌堆类Deck,可以用来加入牌,洗牌,发牌以及算剩余牌数。还需要一个当前手牌类Hand,可以计算当前分数,可以加牌等。然后就是它们的派生类21点纸牌类BlackJackCard,包括计算值,计算最大最小值,判断是不是Ace等等,然后就是21点手牌类BlackjackHand,计算当前得分,判断是否爆了,是否是21点等等。以下代码为书上代码,有些函数体写实现,所以暂时无法用具体运行。
// C++ defination
enum Suit {Club, Diamond, Heart, Spade}; template<class T>
class Deck {
public:
void setDeckOfCards(vector<T> deckOfCards) {}; // ...
void shuffle() {}; // ...
int remainingCards() {
return _cards.size() - _dealtIndex;
}
vector<T> dealHead(int number) {}; // ...
T dealCard() {}; // ...
private:
vector<T> _cards;
int _dealtIndex = ;
}; class Card {
public:
Card(int c, Suit s): _faceValue(c), _suit(s) {};
virtual int value() = ;
Suit suit() { return _suit; };
bool isAvailable() { return _available; };
void markUnavailable() { _available = false; };
void markAvailable() { _available = true; };
protected:
int _faceValue;
Suit _suit;
private:
bool _available = true;
}; template<class T>
class Hand {
public:
int score() {
int score = ;
for (T card : cards) {
score += card.value();
}
return score;
}
void addCard(T card) {
cards.add(card);
}
protected:
vector<T> cards;
}; class BlackJackCard: public Card {
public:
BlackJackCard(int c, Suit s): Card(c,s) {};
int value() {
if (isAce()) return ;
else if (_faceValue >= && _faceValue <= ) return ;
else return _faceValue;
}
int minValue() {
if (isAce()) return ;
else return value();
}
int maxValue() {
if (isAce()) return ;
else return value();
}
bool isAce() {
return _faceValue == ;
}
bool isFaceCard() {
return _faceValue >= && _faceValue <= ;
}
}; class BlackjackHand: public Hand<BlackJackCard> {
public:
int score() {
vector<int> scores = possibleScores();
int maxUnder = INT_MIN, minOver = INT_MAX;
for (auto a : scores) {
if (a > && a < minOver) {
minOver = a;
} else if (a <= && a > maxUnder) {
maxUnder = a;
}
}
return maxUnder == INT_MIN ? minOver : maxUnder;
}
bool busted() { return score() > ; };
bool is21() { return score() == ; };
bool isBlackJack() {}; // ...
private:
vector<int> possibleScores() {}; // ...
};
[CareerCup] 8.1 Implement Blackjack 实现21点纸牌的更多相关文章
- [CareerCup] 3.1 Implement Three Stacks using Array 使用数组来实现三个栈
3.1 Describe how you could use a single array to implement three stacks. 这道题让我们用一个数组来实现三个栈,书上给了两种方法, ...
- [CareerCup] 3.5 Implement Queue using Two Stacks 使用两个栈来实现队列
3.5 Implement a MyQueue class which implements a queue using two stacks. LeetCode上的原题,请参见我之前的博客Imple ...
- [CareerCup] 7.4 Implement Multiply Subtract and Divide 实现乘法减法和除法
7.4 Write methods to implement the multiply, subtract, and divide operations for integers. Use only ...
- [CareerCup] 8.10 Implement a Hash Table 实现一个哈希表
8.10 Design and implement a hash table which uses chaining (linked lists) to handle collisions. 这道题让 ...
- WinForm-简单21点纸牌小游戏
纸牌游戏有很多种玩法,C#代码写的纸牌游戏,网上也能找到不少,从中也能学习到不少知识,自己动手也写一个,算是记录下学习过程吧. 纸牌21点的玩法也比较简单,就是看谁手中的所有牌相加是21点,或是离21 ...
- C++和Java中枚举enum的用法
在C++和java中都有枚举enum这个关键字,但是它们之间又不太一样.对于C++来说,枚举是一系列命名了的整型常量,而且从枚举值转化为对应的整型值是在内部进行的.而对于Java来说,枚举更像一个类的 ...
- python面对对象编程----1:BlackJack(21点)
昨天读完了<Mastering Object-oriented Python>的第一部分,做一些总结. 首先,第一部分总过八章,名字叫Pythonic Classes via Specia ...
- CareerCup All in One 题目汇总 (未完待续...)
Chapter 1. Arrays and Strings 1.1 Unique Characters of a String 1.2 Reverse String 1.3 Permutation S ...
- BlackJack Strategy
GAME SPEC: 2-deck, 104 cards total. Bellagio has 2-deck and 6-deck games. based on hard 17, dealer h ...
随机推荐
- Windows 7 与 Vmware Ubuntu 15.10_64 共享文件夹
设置共享文件夹 安装/更新最新的vmware-tools 安装 在ubuntu 内部会打开DVD ,里面的压缩包中包含vmware-toole. 先解压 ...
- linux+jre+apache+mysql+tomcat调优
一.不再为Apache进程淤积.耗尽内存而困扰 0. /etc/my.cnf,在mysqld那一段加上如下一行: log-slow-queries=queries-slow.log 重启MySQL 酌 ...
- Effective Java 20 Prefer class hierarchies to tagged classes
Disadvantage of tagged classes 1. Verbose (each instance has unnecessary irrelevant fields). 2. Erro ...
- [转] Paxos算法2-算法过程(实现)
请先参考前文:Paxos算法1 1.编号处理 根据P2c ,proposer在提案前会先咨询acceptor查看其批准的最大的编号和value,再决定提交哪个value.之前我们一直强调更高编号的pr ...
- MySql分类
基础 数据类型宽度 查看字段长度 数据类型 运算符 函数 查询 插入 更新 删除 索引 自定义存储过程和函数 视图 触发器 权限管理 备份和恢复 日志 优化 复制
- cocos2d-x之文件读写
bool HelloWorld::init() { if ( !Layer::init() ) { return false; } auto fu=FileUtils::getInstance(); ...
- c++基础回顾
#include <iostream> #include <vector> #include <string> int main(int argc, const c ...
- 探索 OpenStack 之(14):OpenStack 中 RabbitMQ 的使用
本文是 OpenStack 中的 RabbitMQ 使用研究 两部分中的第一部分,将介绍 RabbitMQ 的基本概念,即 RabbitMQ 是什么.第二部分将介绍其在 OpenStack 中的使用. ...
- MVC+AjaxFileUpload文件上传
来源:微信公众号CodeL 本次给大家分享的是ajaxfileupload文件上传插件,百度一大堆功能超炫的文件上传插件,为什么我们会选择这个插件呢? 原因是在此之前,我们尝试使用过很多基于flash ...
- 【OpenCV】全景拼接
从OpenCV3.0正式版开始,features2d中的一些接口,搬到附加库xfeatures2d中了,其中就有SIFT.SURF的特征检测方法,但是正常下载安装OpenCV并不包含附加库,因为附加库 ...