0

グリッドと言うときは、多次元配列を意味します。2D ゲームを作成していて、データ テキスト ファイルからレベルを読み込めるようにしたいので、これが必要です。たとえば、この 2D 配列があるとしますlevel[3][3]。シンプルな 3x3 マップ。また、次のようなテキスト ファイルもあります。

1 2 3 
4 5 6
7 8 9

C++ では、次のように簡単に実行できます。

for (x=0; i<map_width; x++)
{
    for (y=0; y<map_height; y++)
    {
        fscanf(nameoffile, "%d", map[x][y]);
    }
}

これにより、テキスト ファイルのすべての内容がそれに応じて配列に配置されます。ただし、Javaでこれを行う方法がわかりません。それに応じてデータを配列に配置するだけの同等のものはありますか? スキャナークラスについては既に知っていますが、使い方がわかりません。私はグーグルを検索しましたが、役に立ちませんでした。あまり説明しません。助けてください!具体的には、ファイルをスキャンし、読み取った int を配列の適切な場所に配置する方法を知りたいです。

私の現在のコードはこれですが、NoSuchElementException がスローされます。

public void loadMap() {
    Scanner sc = null;
    try {
        sc = new Scanner(inputmap);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
            map[x][y] = sc.nextInt();
        }
    }

inputmap はファイルでmap[][]、マップ上の各タイルのデータのグリッドで、幅と高さはコンストラクターで事前に指定されています。

4

3 に答える 3

0

テキストファイルが実際にどのようにフォーマットされるかということになると、あなたの質問は非常に役に立ちません。例えば、

123 
456
789

とは大きく異なります

1 2 3
4 5 6
7 8 9

さらに、それらが常に int であるか、または

1 2 3
4 5 6
a b c

これらのテキスト ファイルの内容を正確に説明していただければ、さらにお役に立てます。私ができる最善のことは、スキャナーを使用して一般的なものを入力する方法を示すことです。

Java の for ループは似ていますが、Scanner オブジェクトを初期化する必要があります。

Scanner input = new Scanner(myFile); //whatever file is being read

for (x=0; i<map_width; x++)
{
    for (y=0; y<map_height; y++)
    {
        int nextTile = input.nextInt(); //reads the next int
        // or
        char nextTile = input.nextChar(); //reads the next char
    }
}

それ以上に、これらの入力ファイルの実際の内容についてもっと知る必要があります。

編集:

コードから for ループを直接コピーしましたが、内側と外側の for ループを交換したい場合があります。幅は内側のパラメーター (左から右に読む) であるべきではありませんか?

于 2011-03-21T03:29:03.857 に答える
0

Java でも同様に機能java.util.Scannerします。ファイルのオブジェクトを作成し、 nextIntfscanf の代わりにそのメソッドを使用します。

于 2011-03-21T03:00:32.803 に答える