マインスイーパのデザインパターン

通常のコーダー

デザインパターンを使用してマインスイーパゲームを作成しようとしていますが、マインスイーパのタイルに作成パターンを実装するのに問題があります。

マインスイーパには、ナンバータイルとマインタイルの2種類のタイルがあります。数字タイルには、横にある地雷タイルの数に応じて、数字または空白が含まれます。地雷タイルには、タイルにロードする地雷画像が含まれています。

私がこれにアプローチした方法は、タイルにファクトリメソッドを使用しようとすることです。これはJavaの例です。

抽象クラス

public abstract class Tile {
    boolean flag = false;
    boolean opened = false;

    abstract void open();

    void flag(){
        // business logic
    }

    boolean checkFlagged(){
        return flag;
    }

    boolean checkOpened(){
        return opened;
    }
}

NumberTileクラス

public class NumberTile extends Tile {
    int number;

    @Override
    void open(){
        // business logic
    }
    
    void setNumber(int number){
        this.number = number;
    }

    int getNumber(){
        return number;
    }
}

MinesTileクラス

public class MinesTile extends Tile {
    ImageIcon mineImg;

    @Override
    void open(){
        // business logic
        explode();
    }
    
    void explode(){
        // tell main board to end game
    }
    
}

クライアントコード

Tile numberTile = new NumberTile(); // get and setNumber method will not be accesible
Tile minesTile  = new MinesTile();  // explode method will not be accesible

Tile子クラスのメソッドにアクセスできないようにせずに、同じ抽象データ型を使用するにはどうすればよいですか?

抽象クラスNumberTileとの間ですべてのメソッドを抽象化する場合MinesTile、それらは使用されないメソッドをオーバーライドする必要があり、遺贈の拒否を引き起こします。

このデザインパターンの問題を解決するにはどうすればよいですか?

スタンファンデルベンド

これを実際に解決することはできません。多くのバリエーションがあるため、実装しようとしている正確なデザインパターンがわかりません。しかし、これを達成できる唯一の方法はキャストすることです。

Tile someTile = new NumberTile();

if(someTile instanceof NumberTile){
    NumberTile numberTile = (NumberTile) someTile;
    numberTile.getNumber();
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Smalltalkのデザインパターン

分類Dev

デザインパターンの例

分類Dev

PHP MVC:データマッパーパターン:クラスデザイン

分類Dev

コマンドデザインパターンの使用

分類Dev

コマンドのパターンデザイン

分類Dev

マップチャネルのデザインパターン?

分類Dev

MapReduceデザインパターンのマッパークラスとリデューサークラス

分類Dev

リソース管理のデザインパターン

分類Dev

Java、デザインパターン:ユースケースとアクターのマネージャー

分類Dev

SuperMarketシステムのデザインパターン

分類Dev

Python:クラスとデザインパターン間の通信

分類Dev

オブザーバーのデザインパターン

分類Dev

Pythonデザインパターン

分類Dev

DAOデザインパターン

分類Dev

MapMakerデザインパターン?

分類Dev

XSDデザインパターン

分類Dev

Reduxとデザインパターン

分類Dev

Reactデザインパターン

分類Dev

戦略デザインパターン

分類Dev

複合デザインパターン

分類Dev

AbstractFactoryデザインパターン

分類Dev

REACTREDUX-デザインパターン

分類Dev

サービスプロバイダーのデザインパターン

分類Dev

サービスプロバイダーのデザインパターン

分類Dev

MVCデザインパターン、サービスレイヤーの目的?

分類Dev

コントローラーのデザインパターン

分類Dev

Terraformユーザーデータパスインスタンスの詳細

分類Dev

OOPでのデータベースクエリ...デザインパターン?

分類Dev

Daoデザインパターンまたは他のデザインパターンでインターフェイスを使用する理由

Related 関連記事

  1. 1

    Smalltalkのデザインパターン

  2. 2

    デザインパターンの例

  3. 3

    PHP MVC:データマッパーパターン:クラスデザイン

  4. 4

    コマンドデザインパターンの使用

  5. 5

    コマンドのパターンデザイン

  6. 6

    マップチャネルのデザインパターン?

  7. 7

    MapReduceデザインパターンのマッパークラスとリデューサークラス

  8. 8

    リソース管理のデザインパターン

  9. 9

    Java、デザインパターン:ユースケースとアクターのマネージャー

  10. 10

    SuperMarketシステムのデザインパターン

  11. 11

    Python:クラスとデザインパターン間の通信

  12. 12

    オブザーバーのデザインパターン

  13. 13

    Pythonデザインパターン

  14. 14

    DAOデザインパターン

  15. 15

    MapMakerデザインパターン?

  16. 16

    XSDデザインパターン

  17. 17

    Reduxとデザインパターン

  18. 18

    Reactデザインパターン

  19. 19

    戦略デザインパターン

  20. 20

    複合デザインパターン

  21. 21

    AbstractFactoryデザインパターン

  22. 22

    REACTREDUX-デザインパターン

  23. 23

    サービスプロバイダーのデザインパターン

  24. 24

    サービスプロバイダーのデザインパターン

  25. 25

    MVCデザインパターン、サービスレイヤーの目的?

  26. 26

    コントローラーのデザインパターン

  27. 27

    Terraformユーザーデータパスインスタンスの詳細

  28. 28

    OOPでのデータベースクエリ...デザインパターン?

  29. 29

    Daoデザインパターンまたは他のデザインパターンでインターフェイスを使用する理由

ホットタグ

アーカイブ