2017-01-10 11 views
0

私は少しテキストゲームを作っています。開始ダイアログは私の主な(静的な)方法です。そこから、あなたの選択に応じて他の方法にあなたを送ります。静的メソッドと非静的メソッドでインスタンスを使用する必要があります

今私は、これが動作するには、クラスのインスタンスを持つ必要があると思います。例えば

Program p = new Program(); 

if(stuff){ 
    p.room1(); 
} 
else{ 
    p.room2(); 
} 

それらの他の方法の中では変更されるグローバル変数があります。

だからmainメソッドの上にあります:

public bool hasItem = false; 

のでROOM1は()私は、メインメソッドで何かを台無しにしています知っている

public void room1(){ 
    if(stuff){ 
     p.hasItem = true; 
    } 
} 

、次のようになります。メインメソッドの内側または外側にインスタンス "p"を宣言しますか?私は両方を試しましたが、両方の方法でエラーが発生します。

編集:他の場所で使用するために、メインメソッド以外の静的な「プログラム」を宣言しました。助けてくれてありがとう!

+1

私はあなたの質問に全く従っていません。問題は、あなたが 'hasItem'を宣言する場所を知らないということですか?私はあなたが* item *を持っているもの(部屋、世界、プレーヤー、何でも)を表すオブジェクトのメンバ変数として宣言することをお勧めします。 –

+0

私はそれが方法の外で宣言することによってそれをしたと思った。そうじゃないの? – coinbird

答えて

2

最初に、メインのメソッドの外側にあるスタティックProgramを作成するか、アーキテクチャに応じてメインメソッド内にプログラムを宣言することができます。

第2に、インスタンスメソッド内からインスタンスを参照する必要はありません。フィールド名を使用するだけです。そのように:あなたはそれについて明示的にしたい場合は

public void room1(){ 
    if(stuff){ 
     hasItem = true; 
    } 
} 

あなたはthis.hasItemを使用することができます。


また、新しいクラスを作成して状態を維持してください。メインのメソッドを持つクラスのインスタンスメンバーを持つことは厄介な設計です。

+0

それが私の問題を解決しました。ありがとうございました! – coinbird

関連する問題