2016-12-02 7 views
1

Я пытаюсь создать программу Roomba с мячом, который отскакивает вокруг экрана, который очищает плитки, которые он проходит. Программа должна начинаться со всех серых плит, и когда мяч проходит над ними, плитки становятся белыми. В настоящее время у меня есть мяч, который отскакивает повсюду, и метод сетки, который создает сетку 5x5.Помощь в создании сетки/шара (объектов?) В Java

я столкнулся с двумя проблемами:

  1. Я не могу сделать сетку и мяч появляться в той же имитации во время выполнения программы, это либо один, либо другой.

  2. У меня возникли проблемы с поиском способа анализа, если мяч прошел через определенные квадраты в сетке, возможно, мне нужно создать объект для сетки/шара?

Мой код:

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); 
    } 
} 
} 

ответ

0

Может быть фон втягивается по шару, или наоборот? Попробуйте сначала нарисовать мяч, затем фон? Убедитесь, что мяч фактически отображается в правильном размере, а не как весь экран. Я не знаком с 2D-графикой, но, возможно, есть какая-то битва?

+0

Пробовал играть с заказом без везения, при попытке нарисовать оба они появляются для первого кадра, но не для последующих кадров. – dguerrero