1

Javaで簡単な迷路ゲームをコーディングしています。プログラムは、迷路のレイアウト用の入力ファイルからテキスト「マップ」を読み込みます。ルールは簡単です: ユーザー入力によって迷路 (2D 配列で表される) をナビゲートし、洞窟 (X で表される) を回避し、「T」とマークされたスポットである「P」(プレーヤー) に到達します。現在、ほとんどのコードを書き終えました。あとは、正しく動作させるだけです。ゲームのほとんどを while ループで実行するように設定し、ブール値の「got care」を false に設定しました。これが真になると、ゲームが終了するはずです。

ただし、プレイヤーが実際に宝物を手に入れる状況をコーディングしていないので、なぜ私のコードが単に「おめでとう! 宝物を見つけました!」と吐き出すのか疑問に思っています。何もありません。誰かがこれに光を当てることができれば、私はとても感謝しています. 私のコードは、先生がメソッド、コンストラクター、および独自のクラスの作成にたどり着いたばかりなので、ループの混乱のようなものです。これが私がこれまでに持っているコードです:

import java.util.*;
import java.io.File;
public class MazeGame {

public static void main(String[] args) throws Exception {
    Scanner scan = new Scanner(new File("maze.txt"));
    Scanner user = new Scanner(System.in);
    int rows = scan.nextInt();
    int columns = scan.nextInt();
    int px = 0;
    int py = 0;
    String [][] maze = new String[rows][columns];
    String junk = scan.nextLine();

    for (int i = 0; i < rows; i++){
        String temp = scan.nextLine();
        String[] arrayPasser = temp.split("");
        for (int j = 0; j < columns; j++){
            maze[i][j] = arrayPasser[i];
        }
    }

    boolean gotTreasure = false;

    while (gotTreasure = false){
        for (int i = 0; i < rows; i++){
            for (int j = 0; j < columns; j++){
                System.out.print(maze[i][j]);
                System.out.print(" ");
        }
            System.out.print("\n");
      }


        System.out.printf("\n");
        System.out.println("You may:");
        System.out.println("1) Move up");
        System.out.println("2) Move down");
        System.out.println("3) Move left");
        System.out.println("4) Move right");
        System.out.println("0) Quit");
        int choice = user.nextInt();
        int i = 0;

        if (choice == 1 && i >= 0 && i < columns){
            for (int k = 0; k < rows; k++){
                for (int l = 0; l < columns; l++){
                    if (maze[k][l].equals(maze[px][py]) && maze[px][py-1].equals("X") == false){
                        maze[px][py] = ".";
                        maze[k][l-1] = "P";
                        maze[px][py] = maze[k][l-1];
                    }else if (maze[px][py-1] == "X"){
                        System.out.println("Cannot move into a cave-in! Try something else.");
                    }else {
                    continue;}


                    }
                }
            }
        else if (choice == 2 && i >= 0 && i < columns){
            for (int k = 0; k < rows; k++){
                for (int l = 0; l < columns; l++){
                    if (maze[k][l].equals(maze[px][py]) && maze[px][py+1].equals("X") == false){
                        maze[px][py] = ".";
                        maze[k][l+1] = "P";
                        maze[px][py] = maze[k][l+1];
                    }else if (maze[px][py+1] == "X"){
                        System.out.println("Cannot move into a cave-in! Try something else.");
                    }else {
                    continue;}

               }
             }
            }
        else if (choice == 3 && i >= 0 && i < columns){
            for (int k = 0; k < rows; k++){
                for (int l = 0; l < columns; l++){
                    if (maze[k][l].equals(maze[px][py]) && maze[px-1][py].equals("X") == false){
                        maze[px][py] = ".";
                        maze[k-1][l] = "P";
                        maze[px][py] = maze[k-1][l];
                    }else if (maze[px-1][py] == "X"){
                        System.out.println("Cannot move into a cave-in! Try something else.");
                    }else {
                    continue;}
                }
            }
        }
        else if (choice == 4 && i >= 0 && i < columns){
            for (int k = 0; k < rows; k++){
                for (int l = 0; l < columns; l++){
                    if (maze[k][l].equals(maze[px][py]) && maze[px+1][py].equals("X") == false){
                        maze[px][py] = ".";
                        maze[k+1][l] = "P";
                        maze[px][py] = maze[k+1][l];
                    }else if (maze[px+1][py] == "X"){
                        System.out.println("Cannot move into a cave-in! Try something else.");
                    }else {
                    continue;}
                }
            }
        }
        else if (choice == 0){
            System.exit(0);
        }
    }

    System.out.println("Congratulations, you found the treasure!");

    scan.close();
    user.close();
        }

    }

サンプル入力ファイルは次のとおりです。

  • 5 5
  • P.XX.
  • 。バツ...
  • ...バツ。
  • XXT..
  • ..バツ..
4

4 に答える 4

5

(ため息) 等号は 2 つではなく 1 つです。「while (gotTreasure = false)」がありますが、これは gotTreasure に値 false を代入し、ループには入りません。「while (gotTreasure == false)」に変更してループに入る。

今後の質問について: 何が起こっているのかを自分で把握するようにしてください。また、他の人に、あなたが試したこととそれについて具体的な質問があることを知らせてください。これは本質的にコードをデバッグするための要求であるため、これを手放す必要があったことは議論の余地があります。自分自身をデバッグすることを学びます。トレース ステートメントが実行されていない場合は、その時点のコードが実行されていない可能性があります。ループに入っていない場合は、ほぼ確実にループに入る条件が存在しないためです。

デバッガーの使い方を学ぶ - Eclipse (そして、他の多くの開発ツール) には優れたデバッガーがあります。ブレークポイントとは何か、ブレークポイントを設定する方法、ヒットしたときに変数を調べる方法を調べ、そこから何が問題なのかを突き止めます。

于 2012-09-29T00:46:19.773 に答える
2

while ループ条件に単純な間違いがあります。

それ以外の、

while (gotTreasure = false)

使用する必要があります。

while (gotTreasure == false)

最初のケースでは、gotTreasure に false を割り当て、2 番目のケースでは gotTreasure が false かどうかを評価しています。

于 2012-09-29T00:48:36.360 に答える
2

これがタイプミスの場合は無視し、そうでない場合は無視してください

        while (gotTreasure = false) is wrong.

gotTreasure が false かどうかをチェックしているのではなく、false を割り当てています。

gotTreasure が false かどうかを確認するには、== 演算子を使用します

       while(gotTreasure==false)

これがタイプであるかどうかを教えてください。回答を削除します。:)

于 2012-09-29T00:47:01.927 に答える