2016-11-25 2 views
1

皆さん、私はC#を初めて使っています。私はいくつかの問題を抱えています。私は現在学校の授業をしています。私は本当にこの部分に固執しています。私はそれを見つめて何時間も何かを捜していて、私は運があります。私はこれまでのことを以下に挙げました。enumメソッドに関するC#

方向はあまり良くありません。

「4つの画像の状態のためのパブリック列挙CharacterState作成します。、攻撃防御、アイドル、およびデッド 今すぐ文字状態と取得 とセットでのパブリックプロパティStateを保持するメンバ変数の状態を作成するために。今、getとsetの状態の値を返すように設定のデフォルトの動作を記入してください。

どのような助けも非常に魅力的です!ありがとうございます

namespace WPFBattle 
{ 
    class CharacterImage: System.Windows.Controls.Image 
    { 
     public enum Attacking{ 

     } 

     public enum Defending{ 

     } 

     public enum Idle{ 

     } 

     public enum Dead{ 

     } 
     public ImageSource IdleImageSource { get; set; } 
     public ImageSource AttackingImageSource { get; set; } 
     public ImageSource TakeDamageImageSource { get; set; } 
     public ImageSource DeadImageSource { get; set; } 

     protected void UpdateImageSource() 
     { 
      switch (State) 
      { 
       case CharacterState.Attacking: 
        this.Source = AttackingImageSource; 
        break; 
       case CharacterState.TakeDamage: 
        this.Source = TakeDamageImageSource; 
        break; 
       case CharacterState.Dead: 
        this.Source = DeadImageSource; 
        break; 
       case CharacterState.Idle: 
       default: 
        this.Source = IdleImageSource; 
        break; 
      } 
     } 

     protected override void OnRender(DrawingContext dc) 
     { 
      UpdateImageSource(); 
      base.OnRender(dc); 
     } 

     public CharacterState State 
     { 
      get { return state; } 
      set 
      { 
       state = value; 
       this.Dispatcher.Invoke((Action)(() => 
       { 
        UpdateImageSource(); 
       })); 
      } 
     } 
    } 
} 
+0

さて、あなたは4つの空の列挙型の代わりに、4つの値を持つ1つだけ持っています。 – Kinetic

+0

コード内にCharacterStateとは何ですか? – Kinetic

+0

そして私はあなたの質問が何であるかまだまだわかりません。 – Kinetic

答えて

4

enumからはじまります。

4つの画像の状態のためのパブリック列挙CharacterState作成:あなたのコードから

...、攻撃防御、アイドル、及び死者を、あなたは各状態のための単一の列挙型を作成しました。 Enumはオプションを定義するのに便利です。あなたの場合、あなたの文字の状態を定義するenumを持つことになっています。

public enum CharacterState { 
    Attacking, 
    Defending, 
    Idle, 
    Dead 
} 

...今のgetとセットで文字の状態とパブリックプロパティStateを保持するメンバ変数の状態を作成します。

public class Character { 

    public Character() 
    { 
     State = CharacterState.Idle; 
    } 

    private CharacterState state; //-Member variable (private) 

    public CharacterState State 
    { get 
     { 
      return state; // note the casing in State and state 
     } 
     set 
     { 
      State = value; 
     } 
} 

次に、あなたはその状態プロパティを介して、あなたのキャラクターの現在の状態にアクセスすることができます。

var character = new Character(); 
CharacterState state = character.State; // returns Idle. 
// or set it 
character.State = CharacterState.Attacking; 
Console.WriteLine($"Take cover! character is {character.State}"); 
//- logs "Take cover! character is Attacking" 

これは事を明確にします。

+0

ご返信いただきありがとうございます!私は列挙型の部分を修正しましたが、私はちょっと混乱しています。 "今は文字変数と状態を保持するメンバ変数の状態を作成し、 を取得して設定します。"私はその問題を解決する方法を正確にはわかりません。 – firmfiasco

+0

私はいくつかのコメントで答えを更新しました。 'state'はメンバ変数であり、' State'プロパティからのみ更新でき、異なるケーシングと 'private/public'修飾子に注意してください。 'state'はクラス内からのみアクセスでき、' State' *はそれをカプセル化します。これは、 'State'というパブリックプロパティにアクセスして' state'を読み書きできることを意味します。 –

+0

ありがとうございました! – firmfiasco

1

あなたのenumは間違っていると宣言されています。これはあなたが望むものです。

enum CharacterState 
{ 
    Attacking, 
    Defending, 
    Idle, 
    Dead 
} 

class CharacterImage 
{ 

    private CharacterState state; 
    public CharacterState State 
    { 
     get { return state; } 
     set 
     { 
      if (state == value) 
       return; 

      state = value;    
     } 
    } 
} 

ます。また..

public CharacterState State { get; set; } 

としてあなたの財産を書くことができますこれは多分値比較部を除いて、上記のプロパティと同じコードをコンパイルします。

if (state == value) 
    return; 
1

最初に、あなたが書いた文は、という4つのイメージ状態の公開列挙を作成します。。これは、ちょうど4つの可能な値を持つ1つのオブジェクトです。作成し、プロパティ/フィールドメンバを使用して内部値を管理します。たぶん、それは次のように来る:

namespace WPFBattle 
{ 
    public enum CharacterState{ 
     Attacking = 1, 
     Defending = 2, 
     Idle = 3, 
     Dead 
    } 

    class CharacterImage: System.Windows.Controls.Image 
    { 

     public CharacterState _state; 

     public ImageSource IdleImageSource { get; set; } 
     public ImageSource AttackingImageSource { get; set; } 
     public ImageSource TakeDamageImageSource { get; set; } 
     public ImageSource DeadImageSource { get; set; } 

     protected void UpdateImageSource() 
     { 
      switch (_state) 
      { 
       case CharacterState.Attacking: 
        this.Source = AttackingImageSource; 
        break; 
       case CharacterState.TakeDamage: 
        this.Source = TakeDamageImageSource; 
        break; 
       case CharacterState.Dead: 
        this.Source = DeadImageSource; 
        break; 
       case CharacterState.Idle: 
       default: 
        this.Source = IdleImageSource; 
        break; 
      } 
     } 

     protected override void OnRender(DrawingContext dc) 
     { 
      UpdateImageSource(); 
      base.OnRender(dc); 
     } 

     public CharacterState State 
     { 
      get { return _state; } 
      set 
      { 
       _state = value; 
       this.Dispatcher.Invoke((Action)(() => 
       { 
        UpdateImageSource(); 
       })); 
      } 
     } 
    } 
} 
0
public enum CharacterState { 
    Attacking, 
    Defending, 
    Idle, 
    Dead 
} 

public class Character { 

    public Character() 
    { 
     State = CharacterState.Idle; 
    } 

    private CharacterState state; //-Member variable (private) 

    public CharacterState State 
    { get 
     { 
      return state; // note the casing in State and state 
     } 
     set 
     { 
      State = value; 
     } 
}