2016-12-02 6 views
1

私が通過するタイルをきれいにする画面の周りを跳ねるボールで、Roombaプログラムを作成しようとしています。プログラムはすべての灰色のタイルで始まり、ボールがその上を通過するとタイルが白くなります。現在、私はどこでもバウンスしているボールと5x5グリッドを作成するグリッドメソッドを持っています。Javaでグリッド/ボール(オブジェクト?)を作成する手助け

は、私は2つの問題に遭遇している:プログラムを実行している間

  1. 私はグリッドとボールが同じシミュレーションに表示させることができないが、それは、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

関連する問題