【问题标题】:Java 2D array board game console output issuesJava 2D 阵列板游戏机输出问题
【发布时间】:2022-01-28 21:35:53
【问题描述】:

我的代码

import java.util.Scanner;

/**
*
* @author jwgau
*/
public class mazeTask {

    public static void main(String[] args) {

        printMaze();
    }

    public static void printMaze() {
        int py = 8;
        int px = 1;
        Scanner scan = new Scanner(System.in);
        char choice;

        char[][] maze = {
            {'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W'}, // Row 0
            {'W', ' ', ' ', ' ', ' ', 'W', 'G', ' ', 'W'}, // Row 1
            {'W', ' ', 'W', 'W', 'W', 'W', 'W', ' ', 'W'}, // Row 2
            {'W', ' ', 'W', ' ', 'W', ' ', 'W', ' ', 'W'}, // Row 3
            {'W', ' ', 'W', ' ', 'W', ' ', 'W', ' ', 'W'}, // Row 4
            {'W', ' ', 'W', ' ', 'W', ' ', 'W', ' ', 'W'}, // Row 5
            {'W', ' ', 'W', ' ', 'W', ' ', 'W', ' ', 'W'}, // Row 6
            {'W', ' ', 'W', ' ', 'W', ' ', 'W', ' ', 'W'}, // Row 7
            {'W', 'P', ' ', ' ', ' ', ' ', ' ', ' ', 'W'}, // Row 8
            {'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W'} // Row 9
        };
        

        while (true) {
            
            //printing 2d array using nested for loops
            for (int i = 0; i < 10; i++) {
                for (int j = 0; j < 9; j++) {
                    System.out.print(maze[i][j]);
                    maze[py][px] = 'P';
                    
                }
                System.out.println("");
            }                    

            //maze[py][px] = 'P';

            System.out.println("North, south, east or west?");
            choice = scan.next().charAt(0);
            switch (choice) {
            case 'N':
                if(validMove(choice, py, px, maze) == true){
                    py = py-1;    
                    System.out.println(py);
                    maze[py][px] = 'P';
                    
                }
                continue;
            case 'S':
                if(validMove(choice, py, px, maze) == true){
                    py = py+1;
                    maze[py][px] = 'P';
                    
                }
                continue;
            case 'E':
                if(validMove(choice, py, px, maze) == true){
                    px = px+1;    
                    maze[py][px] = 'P';                    
                    
                }
                continue;
            case 'W':
                if(validMove(choice, py, px, maze) == true){
                    px = px - 1;
                    maze[py][px] = 'P';
                    
                }                    

                continue;

            }

            System.out.println("px = " + px);
            System.out.println("py = " + py);

        }
        
    }

    public static boolean validMove(char choice, int py, int px, char maze[][]){
        switch(choice){
        case 'N':
            if(maze[px][py-1] == 'W'){
                return false;
            }
            else{
                maze[py] = maze[py-1];
            }                  
            break;
        case 'S':
            if(maze[px][py+1] == 'W'){
                return false;
            }
            else{
                maze[py] = maze[py+1];
            }                  
            break;
        case 'E':
            if(maze[px+1][py] == 'W'){
                return false;
            }
            else{
                maze[px] = maze[px+1];
            }                
            break;
        case 'W':
            if(maze[px-1][py] == 'W'){
                System.out.println("Invalid move, try again");
                return false;
            }
            else{
                maze[px] = maze[px-1];
            }               
            break;                

        }
        return true;
    }

}

我目前正在使用 java 中的数组进行 2D 棋盘游戏项目,并且遇到屏幕输出不正确的问题,前几次迭代工作正常,并且我的 py/px 变量正确减少,然后没有任何输出前几轮。

玩家或“P”应该遍历数组,只有在不会与墙“w”发生碰撞时才会验证移动。

代码处于可运行状态以进行测试,或者如果有人能指出我出错的正确方向,我将不胜感激。

【问题讨论】:

  • 您是否在调试器中单步执行了代码?
  • 只有当 validMove() 方法返回 true 时,你有一个无限循环,它只会做任何事情。所以从那一刻起,你的代码就不会永远什么都不做。

标签: java arrays


【解决方案1】:

删除switch 块中的continue; 并将其移至:

            System.out.println("px = " + px);
            System.out.println("py = " + py);
            continue;

【讨论】:

  • 会有什么不同?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
相关资源
最近更新 更多