2016-03-25 3 views
-1

Так что я пытаюсь создать случайные прямоугольники, которые игрок должен избегать. Мой метод столкновений работал с одним, случайно созданным прямоугольником. Я хочу нарисовать 10 или около того, а затем добавлю финишную прямую и таймер. Прямо сейчас, я понимаю свою проблему, но я не знаю, как это исправить. Движение шара/игрока выполняется путем изменения координат x или y на 10, а затем перекраивания круга. В настоящее время у меня есть прямоугольники в одном методе рисования, поэтому каждый раз, когда игрок перемещает прямоугольники, они регенерируются. Я бы хотел, чтобы они оставались в одном месте после начального случайного поколения. Я действительно не знаю, как это сделать, хотя ... Кроме того, если я могу заставить прямоугольники оставаться в одном месте, будет ли мой метод столкновения работать с несколькими прямоугольниками? или мне нужно будет пересмотреть это?Несколько методов paint() в Java-апплете?

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

import java.awt.*; 
import java.awt.Rectangle; 
import java.awt.Shape; 

import javafx.scene.shape.*; 
import java.awt.event.*; 
import java.util.Random; 
import java.awt.geom.Area; 
import javax.swing.JOptionPane; 

import java.applet.Applet; 

public class Main extends Applet 
implements ActionListener{ 
boolean end = false; 
private Rectangle rectangle; 
//creates buttons to move player 
    private Button run = new Button("Run"); 
    private Button jump = new Button("Jump"); 
private Button fall = new Button("Fall"); 
//creates player and obstacles 
private Circle player = new Circle(110,110,20); 
private makeRect block = new makeRect(150, 120, 30, 10); 
//initiates the buttons with actionListener 
public void init(){ 
    add(run); 
    add(jump); 
    add(fall); 
    run.addActionListener(this); 
    jump.addActionListener(this); 
    fall.addActionListener(this); 
} 
//draws the player and blocks on the screen 

    public void paint(Graphics g){ 
    for(int numBlocks = 0; numBlocks<11; numBlocks++){ 
    block.draw(g);} 
    player.draw(g); 
} 
//if methods to be control movement 
public void actionPerformed(ActionEvent e){ 


     if(e.getSource() instanceof Button){ 
     if(e.getSource() == run) 
      player.horiz(10); 
     else if (e.getSource()== jump){ 
      player.vert(-10); 
      } 
     else if (e.getSource()== fall){ 
      player.down(10); 
      } 
     repaint(); 
     collision(); 
    } 

} 
public void collision(){ 
    if(player.getBounds().intersects(block.getBounds())){ 
     JOptionPane.showMessageDialog(this, "Game Over", "Game Over", JOptionPane.YES_NO_OPTION); 
     System.exit(ABORT); 
     end = true; 
    } 

} 


class Circle{ 
private final Color theColor = Color.BLUE; 
private int radius; 
private int x,y; 
public Circle(){ 
    x = 110; y = 110; 
    radius = 20; 
} 

public Circle(int x0, int y0, int rad){ 
    x = x0; y = y0; radius = rad; 
} 
public void draw(Graphics g){ 
    g.fillOval(x - radius, y-radius, 2*radius, 2*radius); 
    g.setColor(theColor); 
} 
public void horiz(int val){ 

    for(int c = 0; c<val+1; c++){ 
     x++; 
     repaint();} 
} 
public void vert(int val){ 
    y += val; 
} 
public void down(int val){ 
    y += val; 
} 
public Rectangle getBounds(){ 
    return new Rectangle(x-radius, y-radius, 2*radius, 2*radius); 
} 


} 
class makeRect{ 
private int Xmax = 250; 
private int Xmin = 140; 
private int Wmax = 50; 
private int Hmax = 25; 
private int Wmin = 10; 
private int Hmin = 5; 
Random rand = new Random(); 
private int randx; 
private int randh; 

private int x, y, width, height; 
public makeRect(){ 
    x = 150; y = 120; 
    width = 30; height = 10; 
} 


public makeRect(int x0, int y0, int w0, int h0){ 
    x = x0; y = y0; width = w0; height = h0; 
} 
public void draw(Graphics g) { 

int randx = rand.nextInt((Xmax-Xmin)+1)+Xmin; 
int randh = rand.nextInt((Hmax-Hmin)+1)+Hmin; 
int randw = rand.nextInt((Wmax-Wmin)+1)+Wmin; 
g.drawRect(randx, 110+randh, randh, randw); 

} 
public Rectangle getBounds(){ 
return new Rectangle(randx, 110+randh, 30, 10); 
} 
} 
} 

Спасибо!

ответ

0

Для этого вам понадобится сначала построить 10 прямоугольников (рассмотрим использование массива) при инициализации, с произвольным постучением для каждого. Я имею в виду, что рандомизация постулирования происходит, когда выстраиваются прямые, а не когда они нарисованы.

У вас есть один и тот же прямоугольник, нарисованный 10 раз в разных местах при каждом вызове paint().

Смежные вопросы