使用接口 -- 改造扑克牌(三)

146 阅读1分钟

扑克牌小练习

  1. 目标:创建一副扑克牌(不包括大小王),打印该扑克牌

  2. 使用枚举改造程序

  3. 用接口改造程序,加入大小王

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);