-2

私はフラッシュに非常に慣れていませんが、かなり早く学習しています。配列などについては理解していますが、男の子たちのために遊戯王ゲームを作ろうと約束しました。すでに出ているものもありますが、オリジナルにいくつか変更を加えたいと思います。私が乗り越えられない問題は、配列名です。あなたが使用するほとんどのカードゲームは、rankとの 2 種類suitです。遊戯王ではnametypeattackdefenseなど10個くらい使います。

このすべてを念頭に置いて、私はGoogleで検索し、これを行う2つの方法を見つけました。XMLファイルの使用方法はわかりませんが、最も有望な方法はclass、カードクラスで使用されるカード定義を作成することですカード名だけを保存しました。

本質的には、カードクラスがすべての異なるカード名を保持している間、ドラゴンという名前のカードがそのすべての値を保持しているとします。このようにして、カード クラスから 6 枚のカード名を配ることができ、各カードはそのカードの値から値を呼び出すことができます。もちろん、何をすべきかを知っていることと、プログラミングの方法を知っていることは、2 つの別個のことです。誰かがこれが機能する方法を教えてください。私は数週間だけフラッシュを学ぼうとしていることに注意してください.

編集、私は自分の質問にさらに 5 時間回答することを許可されていないため、以下の回答に返信して今のところ編集します。

Floranさん、お返事ありがとうございます。私はコンパレータを十分に簡単に解決できると思います。難しかったのは、保持する必要のあるすべてのデータでした。例として ["Alexandrite Dragon1", "monster", "light", 4, "dragon", 2000, 100] は、アレキサンドライト ドラゴンのステータスです。私は、アレキサンドライト ドラゴンの配列と言うように、すべてカード デフ クラスに保持されているカードごとに 1 つずつ実行することを考えていました。

その後、配列が [アレキサンドライト ドラゴン、ガンバラ ナイト] などになるように、これらのそれぞれを保持するカード配列が必要になるので、カードを配ったときに、誰かがカード配列 [0] からアレックス ドラゴンを引いた場合、おそらくそのカードの攻撃を取得するには、カード [0] [5] またはカード [0[5]] のようなものが取得される可能性があります。これが機能するかどうかは明らかにわかりません.3日間Googleなどを検索した後、質問する方が簡単かもしれないと考えました.

4

1 に答える 1

0

現在取り組んでいる問題は 2 つあります。

  1. 構造
  2. ルール

構造とルールについて考えるのは別々に行われるかもしれませんが、カードにルールを適用する必要があり、これが多くのゲームの基本的なアイデアを決定するため、少し圧縮しようとします.

カードは、すでに述べたように、ゲーム カードを表すために必要なすべてのデータを備えている必要があります。これは、表示できる意味のある名前を付けるラベルを保持していることを意味し、タイプ、攻撃、防御などのいくつかのプロパティも同様です。

package net.icodeapps.examples {
  public class Card {
    public var label:String,
               type:String,
               attack:int,
               defense:int;
  }
}

これは、カードを作成する最も基本的な方法です。しかし、カードが保持するデータを操作するには、何らかのコンパレーターが必要です。どちらのカードがより強力かということです。

package net.icodeapps.examples {
  public class CardComparator {
     public function attackCompare(card1:Card, card2:Card):Card {
       if (card1.attack < card2.attack) return -1;
       if (card1.attack > card2.attack) return 1;
       return 0;
     }

     public function defenseCompare(card1:Card, card2:Card):Card {
       if (card1.defense < card2.defense) return -1;
       if (card1.defense > card2.defense) return 1;
       return 0;
     }
  }
}

このようにして、攻撃または防御でより強いカードを決定できます。値を決定するためのより複雑な方法が必要な場合:

package net.icodeapps.examples {
  public class CardComparator {
    public function compare(card1:Card, card2:Card):Card {
      const diff1:int = card1.attack - card2.defense,
            diff2:int = card2.attack - card1.defense;
      if (diff1 < diff2) return -1;
      if (diff1 > diff2) return 1;
      return 0;
    }
  }
}

しかし、ご覧のとおり、パターンは同じです。「動作」から状態を分離します (ただし、これはほんの小さなコンテキストを示したものです)。タイプなどの属性が役割を果たす場合は、コンパレーターを拡張します。クラス プロパティを強化する必要がある場合は、Card クラスにメソッドを追加します。

これで、カードを作成して比較できます。次はコレクションで、配列またはベクターにすることができます。ただし、これらを使用してプロパティを保存しないでください。これはあなたを地獄の台所に連れて行くだけです.

しかし、これはスターターだと思います。

于 2012-12-31T16:01:06.327 に答える