扑克牌小练习
-
目标:创建一副扑克牌(不包括大小王),打印该扑克牌
-
使用枚举改造程序
-
用接口改造程序,加入大小王
emum 枚举定义类型
export enum Color {
heart = "♥",
spade = "♠",
club = "♣",
diamond = "♦"
}
export enum Mark {
A = "A",
two = "2",
three = "3",
four = "4",
five = "5",
six = "6",
seven = "7",
eight = "8",
nine = "9",
ten = "10",
eleven = "J",
twelve = "Q",
king = "K"
}
interface 接口定义
import { Color, Mark } from "./enums";
export type Deck = Card[]
export interface Card {
getString(): string
}
export interface NormalCard extends Card {
color: Color
mark: Mark
}
// 加入大小王类型并且继承卡片类型
export interface Joker extends Card {
type: "big" | "small"
}
utils 辅助函数类
import { Deck, NormalCard, Card, Joker } from "./types";
import { Mark, Color } from "./enums";
export function createDeck(): Deck {
const deck: Deck = [];
const marks = Object.values(Mark)
const colors = Object.values(Color)
for (const m of marks) {
for (const c of colors) {
deck.push({
color: c,
mark: m,
getString() {
return this.color + this.mark;
}
} as Card)
}
}
let joker: Joker = {
type: "small",
getString() {
return "jo";
}
}
deck.push(joker)
joker = {
type: "big",
getString() {
return "JO"
}
}
deck.push(joker);
return deck;
}
export function printDeck(deck: Deck) {
let result = "\n";
deck.forEach((card, i) => {
result += card.getString() + "\t";
if ((i + 1) % 6 === 0) {
result += "\n";
}
})
console.log(result);
}
使用
import { createDeck, printDeck } from "./funcs";
const deck = createDeck();
printDeck(deck);