0

Python で作成したゲームを Java に移植しようとしています。Python バージョンでは、すべてのメソッドと変数が 1 つの「クラス」にあり、プレーヤーは次のような辞書でした。

ゲーム.py

...
new_player={"name":"","hp":0,...}
players=[]
//to add new player
players.append(new_player.copy())

次に、プレーヤーのデータ値が個別に追加されます。

...
players[0]["name"]="bob"
players[0]["hp"]=50
...

Java バージョンでは、Player オブジェクトを定義するために使用される別のクラスと、ゲームのメイン メソッドがあります。

例 (これは小さなバージョンです):

game.java (リターン省略)

import java.utils.*;
public class game
{
    public static ArrayList<player> players = new ArrayList<player>();
    public static ArrayList<String> pdead = new ArrayList<String>();
    public static int turn = 0;
    public static void main(String[] args)
    {
        //do stuff
        players.add(new player(name));
        //do other stuff
    }
    public static void do_move(move)
    {
        //some move is selected
            players.get(turn).set_hp(10);
            //at this point compiler throws error: cannot find symbol
            //compiler does not recognize that a player should have
            //been added to the players variable
        //other stuff
    };
};

player.java (リターン省略)

public class player
{
    //arbitrary list of private variables like hp and name
    public player(new_name)
    {
        name = new_name;
        //other variables defined
    };
    public void set_hp(int amount) //Adding hp
    {
        hp += amount;
    };
    public void set_hp(int amount,String type) //taking damage
    {
        mana += amount;
        //go through types, armor, etc.
            hp -= amount;
    };
    public void display stats() //displays all player's stats before choosing move
    {
        //display stats until...
        //later in some for loop
            System.out.println(players.get(index).get_hp());
            //here compiler throws error again: cannot find symbol
            //players arraylist is in main class's public variables
        //other stuff
    };
    //other stuff
};

おそらく、2 つのクラスが一緒にコンパイルされると、メイン変数が public であり、プレーヤー変数がプログラムの進行に合わせて定義されるため、プログラムを実行できるようになります。ただし、コンパイラはこれを認識せず、エラーをスローします。これは、クラス (ちなみに、同じディレクトリ内) が互いに読み取らず、チェック中に配列/配列リストでオブジェクトが「定義」されていないためです。

変数が定義どおりにコンパイラに表示されるようにするにはどうすればよいですか? 必要に応じて、両方のクラスの現在の作業バージョンと最終的な Python バージョンをアップロードできますが、ゲームはクローズド ソースのままにしておくのが好きです。

編集: sjkm の返信に従って ArrayList の初期化を修正

4

1 に答える 1