0

私はカード ゲーム (この例ではマジック ザ ギャザリングを考えてください) を設計しており、カードの情報を取得してデータベースに保存したいと考えています。このゲームには、特定のカードに関連付けられたイベント (たとえば、1 枚のカードが「これが場に出たとき、対戦相手は 2 点のダメージを受ける」と書かれている場合) があります。設計上の決定により、ビルダー ファクトリで大まかにカードを作成することになりましたが、代わりにカードを取得してデータベースに保存することを検討しています。ほとんどのカードは基本「Card」クラスのインスタンスであるため、すべてのカードに共通する機能 (名前、コストなど) をロードするのは簡単ですが、これらのイベントを 1 つのイベントに結び付ける良い方法を見つけるのに苦労しました。カードの種類。私がこれまでに考えた唯一の方法は、関数名をデータベースに保存し、遅延バインディングを使用してカードがロードされたときにイベントを登録することでした。これを行うより良い方法はありますか?

私が見つけた唯一の同様の投稿はこれです:データベースに関数名を保存してから実行する

eval() を使用するという答えは、遅延バインディングに似ているようですが、反対票が投じられました。しかし、この機能を実行する方法について、これ以上の提案はありませんでした。

4

1 に答える 1

0

これは有用なアプローチのように思えますが、それが良いものかどうかは疑問です.

データベース内のカード表現から適切なオブジェクトを構築してみませんか? オブジェクトデータベースを使用するか、オブジェクトリレーションマッピングを使用する可能性が高いです。このようにして、各タイプのカードをクリーンで読みやすく使いやすい方法で表現しながら、共通の基本クラスから派生した特殊なクラスの豊富なインスタンスを操作できます。

したがって、共通のテーブルを使用して、次のようにすべてのカードを格納します。

+-------------------------------------------------+
| card type | data1 | data2 | data3 | ... | dataN |
+-------------------------------------------------+
| Card      | 123   | 456   | 789   | ... | abc   |
| CardS1    | 123   | 456   | 789   | ... | abc   |
| CardS3    | 123   | 456   | 789   | ... | abc   |
| CardS2    | 123   | 456   | 789   | ... | abc   |
...

そして、このようなクラス階層:

+---------------------------+
| class Card                |>-+
+---------------------------+  |
| var data1                 |  |
| var data2                 |  |
| var data3                 |  |
| ...                       |  |
| var dataN                 |  |
| baseMethod1()             |  |
| baseMethod2()             |  |
+---------------------------+  |
                               |
+---------------------------+  |
| class CardS1. public Card |<-+
+---------------------------+  |
| specialMethod_1_1()       |  |
+---------------------------+  |
                               |
+---------------------------+  |
| class CardS2. public Card |<-+
+---------------------------+  |
| specialMethod_2_1()       |  |
| specialMethod_2_2()       |  |
+---------------------------+  |
                               |
+---------------------------+  |
| class CardS3. public Card |<-+
+---------------------------+
| specialMethod_3_1()       |
+---------------------------+
于 2013-04-15T06:01:52.740 に答える