协助在Java中创建网格/球(对象?)

时间:2016-12-02 21:50:23

标签: java object graphics grid simulation

我正在尝试创建一个Roomba程序,其中一个球在屏幕周围反弹,清理它经过的瓷砖。程序应该从所有灰色瓷砖开始,当球经过它们时,瓷砖会变成白色。目前我拥有在任何地方都能反弹的球以及一种可以创建5x5网格的网格方法。

我遇到了两个问题:

  1. 我无法让网格和球在运行程序时出现在同一个模拟中,它可以是其中之一。

  2. 我找不到分析球是否已经越过网格中的某些方格的方法,或许我需要为网格/球创建一个对象?

  3. 我的代码:

    import edu.princeton.cs.introcs.StdDraw;
    
    public class Roomba {
    
    private static int windowWidth = 200;
    private static int windowHeight = 200;
    
    private static double x = 100;
    private static double y = 100;
    private static double vx = 2;
    private static double vy = 4;
    private static int radius = 5;
    
    private static boolean inGame = true;
    
    public static void updateLocations() {
        x += vx;
        y += vy;
    }
    
    public static void drawGrid() {
        StdDraw.setScale(0, 5);
    
        int[][] grid = new int[5][5];
    
        for (int x = 0; x < grid.length; x++) {
            for (int y = 0; y < grid.length; y++) {
                grid[x][y] = 255;
            }
        }
    
        for (int x = 0; x < grid.length; x++) {
            for (int y = 0; y < grid.length; y++) {
                StdDraw.square(x, y, 1);
            }
        }
    
    }
    
    public static void updateVelocities() {
    
        if (y + radius >= windowHeight) {
            vy = -vy;
        } else if (y - radius <= 0) {
            vy = -vy;
        }
    
        if (x >= 194 || x <= 6) {
            vx = -vx;
        }
    
    }
    
    public static void setBackground() {
        StdDraw.clear(StdDraw.GRAY);
    //      drawGrid();
    }
    
    public static void drawBall() {
        StdDraw.setPenColor(StdDraw.BLACK);
        StdDraw.filledCircle(x, y, radius);
        // StdDraw.setPenColor(StdDraw.RED);
        // StdDraw.filledSquare(x + 3, y + 3, 1);
        StdDraw.setPenColor(StdDraw.BLACK);
        StdDraw.text(100, 70, "x is: " + x + " y is: " + y);
    
    }
    
    public static void draw() {
        setBackground();
        drawBall();
    }
    
    public static void main(String[] args) {
        StdDraw.setCanvasSize(800, 800);
    
        StdDraw.setXscale(0, windowWidth);
        StdDraw.setYscale(0, windowHeight);
    
        while (true) {
            if (inGame) {
                draw();
                updateVelocities();
                updateLocations();
            } else {
                StdDraw.text(100, 100, "Game Over");
            }
    
            // change to if all tiles have been cleaned
            // if (x + radius > windowWidth || x - radius < 0) {
            // inGame = false;
            // }
    
            StdDraw.show(20);
        }
    }
    }
    

1 个答案:

答案 0 :(得分:0)

也许是背景是在球上还是反之?尝试首先画出球然后是背景?确保球实际上以正确的尺寸渲染,而不是整个屏幕。我不熟悉2D图形,但也许有一些z战斗?