0

奇妙な理由で、ゲーム内でキャラクターを動かそうとすると、「動き」の配列スワッピングが機能せず、ゲーム内の最初の 2 つの動きのキャラクターの現在位置を出力しようとしても、何も表示されません。それは一般的に奇妙に振る舞っているだけです。誰かがおそらく私が間違っていること、または少なくともどうすればそれを改善できるかを説明してもらえますか? 感謝。

コード:

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

public class Adventure {
    private Scanner in_file;
    private int x_size, y_size, px, py, dx, dy;
    private char[][] level;
    private boolean game;
    public Adventure() {
        x_size = y_size = 20;
        level = new char[x_size][y_size];
        px = py = 1;
        dx = dy = 0;
        game = true;
    }
    public static void main(String []args) {
        Adventure adv = new Adventure();
        adv.load_game();
        adv.main_game();
        System.out.println("ADVENTURE");
    }
    public void load_game() {
        try {
            in_file = new Scanner(new File("level.txt"));
        } catch (FileNotFoundException e) {
            System.err.println("ERROR: Level could not be loaded!");
            System.exit(1);
        }
        for (int i = 0; i < level.length; i++ ) {
            for (int j = 0; j < level[i].length; j++) {
                if (in_file.hasNextInt()) {
                    int nextInt = in_file.nextInt();
                    if (nextInt == 0) 
                        level[i][j] = '-';
                    else if (nextInt == 1)
                        level[i][j] = '#';
                }
            }
        }
        in_file.close();
    }
    public void new_game() { 

    }
    public void main_game() {
        Scanner key = new Scanner(System.in);
        Adventure adv_move = new Adventure();
        level[px][py] = 'Q';
        while (game) {
            for (int i = 0; i < level.length; i++) {
                for (int j = 0; j < level[i].length; j++) {
                    System.out.print(level[i][j]);
                }
                System.out.println();
            }
            System.out.println();
            System.out.print("Enter a letter choice to move ->");
            String temp = key.nextLine();
            if (temp.equals("w")) {
                dx = -1;
                dy = 0;
            }
            else if (temp.equals("a")) {
                dy = -1;
                dx = 0;
            }
            else if (temp.equals("s")) {
                dx = 1;
                dy = 0;
            }
            else if (temp.equals("d")) {
                dy = 1; 
                dx = 0;
            }
            else
                dx = dy = 0;
            System.out.println();
            adv_move.move_check();
        }
    }
    public void move_check() { //DYSFUNCTIONAL ARRAY!!!!
        System.out.println(level[px][py]);
    //  System.out.println(level[px+dx][py+dy]);
        if (level[px+dx][py+dy] != '#') {
            level[px][py] = '-';
            px += dx;
            py += dy;
            level[px][py] = 'Q';
        }   
        else 
            System.out.print("Move invalid.\n");
    }
    public void save_game() {

    }
}
4

1 に答える 1

1

あなたが抱えている問題は、main_game()メソッドで新しいAdventureオブジェクトを作成し、それを呼び出していることです。これには、 の変数にmove_check()ロードしたレベル データがありません。したがって、常に空の char 配列を参照し、意図しない結果をもたらします。advmain()

新しいオブジェクト宣言を削除して、move_check()それ自体を呼び出すだけで、軌道に戻るはずです。

于 2012-07-18T06:00:38.810 に答える