Como aumentar o tamanho das bolinhas a cada 8 toques na parede?

2 respostas
L

Pessoal preciso saber como é que eu vou fazer pra poder aumentar o tamanho das bolinhas, quando no contador marcar 8 toques na parede, ou seja, a cada 8 toques nas paredes, ela aumenta de tamanho. Obrigado.
Aqui está a classe Bola…

import java.awt.*;
import javax.swing.*;


/**
 * @author Alisson A classe bola é um componente para ser pintada em qualquer
 *         janela. A bola controla sua posição e orientação em relação a janela
 *         que estiver sendo pintada. @Todo os direitos reservados
 */

public class Bola extends JPanel {
	
	private int x = 50, y = 150, direcaoX = 1, direcaoY = 1, tamanho = 30, idade;
	private int ALTURA = 460; // Limite da janela (igual do JogoPainel)
	private int LARGURA = 500; // Limite da janela (igual do JogoPainel)
	private Color cor = Color.BLUE; // Cores para a bolinha (WHITE, GREEN,
										// BLACK, BLUE, RED)

	/**
	 * O construtor da bola que recebe os parametros inicias da bola
	 * 
	 * @param x
	 *            = Posição inicial no eixo x (cresce esquerda para direita)
	 * @param y
	 *            = Posição inicial no eixo y (cresce de cima para baixo)
	 * @param direcaoX
	 *            = (1 = para direita; -1 para esquerda)
	 * @param direcaoY
	 *            = (1 para baixo; -1 para cima)
	 * 
	 */
public Bola(int x, int y, int direcaoX, int direcaoY) {
		super();

		// Usando os metodos set para testar os limites dos valores
		this.setX(x);
		this.setY(y);
		this.setDirecaoX(direcaoX);
		this.setDirecaoY(direcaoY);
	}

	/**
	 * Construtor da bola que não faz nada e inicializa a bola com os valores
	 * padrão dados na inicialização das variáveis.
	 */
public Bola() {}

	
	/* funções utilizadas somente como teste nesse exemplo */
	/*
	 * Pinta a bola na tela dada por g
	 */
public void paintComponent(Graphics g) {
		super.paintComponent(g); // Pinta o fundo da tela
		g.setColor(cor); // Cor da bola
		g.fillOval(x, y, tamanho, tamanho); // Pinta a bola nas posições x e y
											// Com largura e altura.
		g.setColor(Color.WHITE);
		g.drawString(String.valueOf(idade),(direcaoX+x)+(tamanho/2),(direcaoY+y)+(tamanho/2));
}


	/**
	 * Define a movimentação da bola em relação a sua posição inicial x e y.
	 */
public void moveBola() {
		// Trata os limites da tela
		if (x >= LARGURA - tamanho) {
			idade++;
			direcaoX = -1;
		} else if (x <= 0) {
			idade++;
			direcaoX = 1;
		}

		if (y >= ALTURA - tamanho) {
			idade++;
			direcaoY = -1;
		} else if (y <= 0) {
			idade++;
			direcaoY = 1;
		}
		x += direcaoX; // Acrescenta 1 ou -1 conforme valor da direção
		y += direcaoY; // Acrescenta 1 ou -1 conforme valor da direção
	}

	// ----------------------------- METODOS get e
	// set----------------------------//
	/**
	 * @return the x
	 */
	public int getX() {
		return x;
	}

	/**
	 * @param x
	 *            the x to set
	 */
	public void setX(int x) {
		if (x < LARGURA + tamanho) {
			this.x = x;
		}
	}

	/**
	 * @return the y
	 */
	public int getY() {
		return y;
	}

	/**
	 * @param y
	 *            the y to set
	 */
	public void setY(int y) {
		if (y < ALTURA + tamanho) {
			this.y = y;
		}
	}

	/**
	 * @return the direcaoX
	 */
	public int getDirecaoX() {
		return direcaoX;
	}

	/**
	 * @param direcaoX
	 *            the direcaoX to set
	 */
	public void setDirecaoX(int direcaoX) {
		if ((direcaoX == 1) || (direcaoX == -1)) { // '||' == 'ou' == 'or'. '&&'
													// == 'e' == 'and'
			this.direcaoX = direcaoX;
		}
	}

	/**
	 * @return the direcaoY
	 */
	public int getDirecaoY() {
		return direcaoY;
	}

	/**
	 * @param direcaoY
	 *            the direcaoY to set
	 */
	public void setDirecaoY(int direcaoY) {
		if ((direcaoX == 1) || (direcaoX == -1)) {
			this.direcaoY = direcaoY;
		}
	}

	/**
	 * @return the tamanho
	 */
	public int getTamanho() {
		return tamanho;
	}

	/**
	 * @param tamanho
	 *            the tamanho to set
	 */
	public void setTamanho(int tamanho) {
		if ((tamanho < ALTURA) && (tamanho < LARGURA)) {
			this.tamanho = tamanho;
		}
	}

	/**
	 * @return the aLTURA
	 */
	public int getALTURA() {
		return ALTURA;
	}

	/**
	 * @param aLTURA
	 *            the aLTURA to set
	 */
	public void setALTURA(int aLTURA) {
		ALTURA = aLTURA;
	}

	/**
	 * @return the lARGURA
	 */
	public int getLARGURA() {
		return LARGURA;
	}

	/**
	 * @param lARGURA
	 *            the lARGURA to set
	 */
	public void setLARGURA(int lARGURA) {
		LARGURA = lARGURA;
	}

	/**
	 * @return the cor
	 */
	public Color getCor() {
		return cor;
	}

	/**
	 * @param cor
	 *            the cor to set
	 */
	public void setCor(Color cor) {
		this.cor = cor;
	}
	public int getIdade(){
		return idade;
	}
	// ---------------------------FIM-METODOS get e
	// set--------------------------//

}

E a classe JogoPainel…

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Alisson Classe que desenha a janela do jogo. Necessária para pintar
 *         os objetos que serão acrescentados na janela. @Todos os direitos reservados
 * 
 */
public class JogoPainel extends JPanel implements Runnable {  //Implements ActionListener   
	
	ArrayList<Bola> lista = new ArrayList<Bola>(); //Array pra criar várias bolinhas 
	Bola bola = new Bola();// Cria a bola
	public JButton botao,button; //
	public JTextField campo; //
	private static final int LARGURA = 500; // Largura da janela
	private static final int ALTURA = 500; // Altura da janela
	private Thread animacao; // Controla a chamada de run
	private int tempoEspera = 12; // Tempo entre uma pintura da tela e outra
	private boolean rodando = true; // Define se está ou não rodando
	
public JogoPainel() {
		setBackground(Color.BLACK);
		setLayout(new BorderLayout());
		setPreferredSize(new Dimension(LARGURA, ALTURA));
		campo = new JTextField(5);
		botao = new JButton("Play/Pause"); //Cria um botao @2B
		botao.addActionListener(new ActionListener(){ //Dá ação ao botão @2B

public void actionPerformed(ActionEvent e){
	// Determina que quando pressionado o botao, ele executará uma ação (pausando e rodando as bolinhas)
	if(rodando){  
		rodando=false; 
	}else { 
		rodando=true;
	}
}
});
//botao que cria "x" bolinhas
	button = new JButton("Insert");
	button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
	Integer criadorBola = Integer.parseInt(campo.getText()); //implementação do botão ao textField
	criadorBola = criadorBola -1;
	for(int i=0;i<=criadorBola;i++){
		lista.add(criaBola());					
	}
}
});

//Adiciona os botoes ao painel
JLabel txt = new JLabel("Quantas bolinhas você deseja inserir ?"); //Cria um label @2B
JPanel painel = new JPanel(); //Cria um painel @author 2B
painel.add(txt, BorderLayout.SOUTH); 
painel.add(campo, BorderLayout.SOUTH);
painel.add(button, BorderLayout.SOUTH);
painel.add(botao, BorderLayout.SOUTH);//Adiciona o botao ao painel na parte Sul da tela @2B
add(painel, BorderLayout.SOUTH); //Adiciona o painel na parte Sul da tela @2B
}
private Bola criaBola() {
		Bola bolinhas;
		// posiçoes iniciais x,y das bolinhas criadas aleotariamentes
		int x = (int)(Math.random()*420);
		int y = (int)(Math.random()*420);
		int ex;
		int cy;
		if(x%3 ==1){
			 ex = 1;
			}else{ex = 2;}
		if(y%3 ==1){
			cy = 1;
			}else{cy = 2;}
		
		bolinhas = new Bola(x,y,ex,cy);
		return bolinhas;
	}	
	/*
	 * Quando a janela aparece (addNotify) chama iniciarJogo
	 */
public void addNotify() {
		super.addNotify();
		iniciarJogo();
	}

private void iniciarJogo() {
		if (animacao == null || !rodando) {
			animacao = new Thread(this);
			animacao.start();

		}
	}

	/*
	 * Roda a animação da bola
	 */
public void run() {

		while (true) { // loop do jogo para sempre
			if (rodando) {
				for (Bola bola : lista) {	
					if(bola.getIdade()>=30){
						
					}
					bola.moveBola(); // Chama para mover a bola
			    }		
					repaint(); // Pede para repitar a bola
			}
					try { // Inicia o tratamento de evento(erro)
					Thread.sleep(tempoEspera);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
		}
	}
	

	/*
	 * Pinta a tela (super) e os componentes (bolas)
	 */
public void paintComponent(Graphics g) {
		super.paintComponent(g); // Repinta a tela
		for (Bola bola: lista){
		bola.paintComponent(g); // Repinta os componentes
		
	}
}
public static void main(String args[]) {
	  	JogoPainel jogoPainel = new JogoPainel(); // Cria a janela JogoPainel;
		JFrame jogo = new JFrame("Grupo 1 - 2B Informática"); // Cria a moldura
		jogo.add(jogoPainel); // Adicina a moldura jogo a janela jogoPainel
		jogo.pack(); // Alinha a janela na moldura
		jogo.setVisible(true); // Torna a janela visível.
		// Fecha o programa ao clicar no x da janela
		jogo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

2 Respostas

Marky.Vasconcelos

No metodo moveBola, onde voce fez os ifs que acredito que é onde voce testa se colide com a parede, aumente algum contador e verifique isso na fase de processar logica.

L

Obrigado Marky.Vasconcelos, consegui essa parte aqui. :smiley:

Criado 6 de agosto de 2012
Ultima resposta 7 de ago. de 2012
Respostas 2
Participantes 2