そのJavaScriptは(拡張)クラスがあります!


JavaScriptのクラスを拡張しましょう.
私は、ジブリッシュカードと呼ばれる1ページのJavaScriptゲームを書きました.それは戦争のようです.だけど.
それは典型的なカードデッキを使用しませんでした、そして、カードの名前はユーザー定義されました.これは、カードがゲームにあったもののリストと名前があったそれらのカードのサブセットを必要とすることを意味します.さらに、私はユーザーが彼の引っ張り杭でカードを知っている必要がありました、そして、カードはコンピュータが彼の引っ張り杭で持っていました.私はまた、ユーザーとコンピュータのカードを知っている彼らの廃棄杭を持っていた.それはカードオブジェクトの6つの配列です!
そこでデッキクラスを作りました.

単純なクラス
class Deck {

    constructor() {
        this.unplayedCards = []
    }

    addCardtoDeck(card) {
        this.unplayedCards.push(card)
    }


    findCard(id) {
        return this.unplayedCards.find(card => card.id === id)
    }

}
私は、カードがすでにPlayedカードで使われていなかったのを知っている必要があったので、カードの配列を呼びました.私はこのクラスのAddCardToDeckに2つの機能を持っていました.そして、私が話したすべてのそれらの異なるデッキで満たされて、ゲームが最初に始まったとき、大きかったです.そして、時々、FindCard機能が非常に役に立つので、私はカードオブジェクトを見つける必要があります.
しかし、私はまた、命名されたカードが存在したかを追跡する必要がありました.コンピュータはただカードを名付けただけでした、そして、私は名前を付けられて名前のないカードをユーザーのために別々にしておく必要はありませんでした.
むしろ、それらの名前のカードを全てのデッキクラスで追跡し、デッキクラスをAllCardクラスに拡張しました.

スーパーの拡張と利用
class AllCards extends Deck {

    constructor() {
        super()
        this.namedCards = []
    }

    addCardtoDeck(card) {
        super.addCardtoDeck(card)
        if (card.name) {
            this.namedCards.push(card)
        }
    }

    resetNamed() {
        this.namedCards = this.unplayedCards.filter(card => card.name)
    }

}
これはデッキから延びているので、FindCardとAddCardToDeck機能にアクセスできました.私のコンストラクタはunplayedcard配列とnamedcard配列の両方を必要としました.コンストラクタでSUM ()メソッドを呼び出して、デッキクラスからコードを使用しました.
私はカードをカードとしてAddCardToDeckを介してそれらの配列に記入したとして名前を決定したので、私はまた、その機能を拡張しなければならなかった.あなたはスーパーを呼び出す拡張機能で見ることができます.AddCardToDeck (カード)カードを自分のUnplayedCards配列に追加しますが、NamedCard配列に任意の名前のカードを追加する新しいコードがあります.
カードのオブジェクトの2つの余分な配列を避けたので、これは、ユーザーのデッキとコンピュータのデッキで無意味な配列になります.
また、私はresetName ()と呼ばれるallCardsクラスだけで関数を作成しました.ユーザーが再び再生したいならば、私はそれが再利用してデータベースからすべてのカードの詳細を再アップロードしたくないので、それは最も最近のゲームの間、名前をつけられたどんなカードででもnamedcards配列を再現します.
また、私は2つのゲームデッキで私はすべてのカードのリポジトリのために使用する必要はなかったので、私はデッキから別のクラスを拡張するために使用される多くの機能があった.

もう一つの拡張クラス
class PlayableDeck extends Deck {

    constructor() {
        super()
        this.playedCards = []
    }

// here is where I placed all the functions 
// only applicable to this class.

}

これは{*}デッキから拡張され、これを作成するためにスーパーを使用します.UnplayedCards配列がまた、最後の改造以来、どのカードがプレイされているかを追跡するゲームデッキの配列を作成します.あなたがそうするならば、捨てられた山.私はそのカードを呼んだ.
私がPlayableDeckクラスを持っていた今、私はデッキクラスに座る必要がなかったゲームプレイのために機能のスルーを作成することができました.

  • drawcard () -ランダムに未再生カードを描画する

  • movecardToplay ( Card )- PlayedCard配列にカードを移動する( drawcard ()から取得したカードを指定する).

  • removeEdfromDeck ()-カードを再生から削除するこれは相手が自分のカードを受け取る時に使用される.

  • totalCount ()とtotalUnplayedds ()は、描画を追跡し、杭を破棄します.これらはまた、再起動するときにゲームを失ったときに知っているために重要です!

  • clear () -この関数は、新しいゲームをきれいに開始できるようにゲーム終了後にすべてのカードをクリアします.

  • 3ユニークな類似のオブジェクト!
    クラスを拡張することによって、私は私のコードで使用される3デッキオブジェクトを持つことができました.私がコード化機能をコード化する間、それはコードクリーナーとテストをより簡単にしました.
    クラスを拡張!それは簡単です!