[Meu jogo] Tetriz

Gente estou postando o codigo do meu joguinho. mas ele está incompleto e tenho uma duvida que quero tentar resolver com vocês.

1 arquivo

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

public class IATetrix{
	public IATetrix(){
	}
	
	public static void main(String Args[]){
		JFrame frame = new JFrame("testando");
		FrameTetrix FT = new FrameTetrix();
		
		frame.add(FT);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setSize(400, 500);
		frame.setVisible(true);
		frame.setResizable(false);
		frame.setBackground(Color.WHITE);
	}
}

2 arquivo

import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.lang.*;
import java.text.*;
import javax.swing.*;

public class FrameTetrix extends JPanel implements Runnable{
	
	//padrão dos quadrados
	private int TamanhoX=20, TamanhoY=20;
	//padroes de movimentação
	private int PadraoX=20, PadraoY=100;
	//pontuação
	private String Pontuacao="0";
	//colisão do fundo
	private final int fundo = 300;
	//declaração da variavel G para uso total.
	//private Graphics g;
	
	//construtor
	public FrameTetrix(){
		this.setLayout(null);
		
		//Coloca um marcador nesta classe e inicia ele.
		//Thread M = new Thread();
		//M.start();
		new Thread(this).start();
		
		//Adiciona Evento de teclas
		addKeyListener(
			new KeyListener(){
				public void keyPressed(KeyEvent e){
					switch(e.getKeyCode()){
                        case KeyEvent.VK_RIGHT:{
                            PadraoX+= 20;
                            break;
                        }
                        case KeyEvent.VK_LEFT:{
                            PadraoX-= 20;
                            break;
                        }
                        case KeyEvent.VK_DOWN:{
                            PadraoY-= 20;
                            break;
                        }
                        case KeyEvent.VK_UP:{
                            PadraoY+= 20;
                            break;
                        }
                        case KeyEvent.VK_ESCAPE:{
                            System.exit(0);
                            break;
                        }
                    }
					repaint();
				}
				public void keyReleased(KeyEvent e){
                }
                public void keyTyped(KeyEvent e){
                	switch(e.getKeyCode()){
                        case KeyEvent.VK_RIGHT:{
                            PadraoX+= 20;
                            break;
                        }
                        case KeyEvent.VK_LEFT:{
                            PadraoX-= 20;
                            break;
                        }
                        case KeyEvent.VK_DOWN:{
                            PadraoY-= 20;
                            break;
                        }
                        case KeyEvent.VK_UP:{
                            PadraoY+= 20;
                            break;
                        }
                        case KeyEvent.VK_ESCAPE:{
                            System.exit(0);
                            break;
                        }
                    }
					repaint();
                }
			}
		);//fim da adição do evento.
		
	}//fim do construtor
	
	//Construtor que pinta
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		g.setColor(Color.BLACK);
		g.drawLine(0, 100, 400, 100);
		g.drawLine(20, 100, 20, 500);
		g.drawLine(370, 100, 370, 500);
		g.drawLine(20, 300, 370, 300);
		g.drawString("Pontos:", 20, 50);
		g.drawString(Pontuacao, 150, 50);
		 
		g.drawString("X:" + PadraoX, 300, 50);
		g.drawString("Y:" + PadraoY, 300, 60);
		
		g.setColor(Color.RED);
		//Quadrado que cai.
		g.fillRect(PadraoX, PadraoY, TamanhoX, TamanhoY);
	}
	
	//metodo do Thread
	public void run(){
		//Verificador da colisão do objeto
		boolean fim = false;
		//loop que os quadrinhos cair.
		do{
			
			//g.fillRect(PadraoX, PadraoY, TamanhoX, TamanhoY);
			if((PadraoY + TamanhoY) == fundo){
				fim = true;
				PadraoX = 20;
				PadraoY = 100;
			}else if((PadraoY + TamanhoY) != fundo){
				try{
					Thread.sleep(1000);
				}catch(InterruptedException ex) {
					ex.printStackTrace();
				}
				PadraoY += 20;
				repaint();
			}
		}while(fim != true);
	}
}//fim da classe
  • A linha “repaint()” dentro do “run()” está fazendo a tela cubrir uma imagem por cima da ooutra em vez de repintar tudo novamente. Porque está dando este erro!?
    Rodem o código. ele não contem erros. se rodarem visualizarão melhor o problema que este “repaint()” está dando.
    Peço para que rode o codigo antes de postar coisas sem nexo.

  • O evento do mouse deveria mover o quadrado vermelho que aparece na tela… porque não está dando certo o evento?
    Obs.: ja tentei colocar um “this.addK…” mas tambem não funciona.

Meus unicos problemas fixos são estes. O grafico do jogo é um lixo porque é um teste. Se a gente conseguir resolver os 2 problemas… está feito!!! daí eu estarei deixando o jogo bunitinho com um grafico melhor e funcionando de forma correta. :cool:

warcraft03

[quote]- A linha “repaint()” dentro do “run()” está fazendo a tela cubrir uma imagem por cima da ooutra em vez de repintar tudo novamente. Porque está dando este erro!?
Rodem o código. ele não contem erros. se rodarem visualizarão melhor o problema que este “repaint()” está dando.[/quote]

consegui arrumar isso. corrigi o codigo.
era apenas uma questão boba que esqueci de colocar no paintComponent() :
“super.paintComponent(g);”

bobo neh!? hehehe

mesmo assim meu problema continua no:

[quote]- O evento do mouse deveria mover o quadrado vermelho que aparece na tela… porque não está dando certo o evento?
Obs.: ja tentei colocar um “this.addK…” mas tambem não funciona. [/quote]

cabuloso em…
consegui resolver depois de muito quebrar a cabeça.

arranquei o evento que coloquei e fiz assim…
no construtor da classe apenas fiz:

eventoTeclas eventoT = new eventoTeclas(); //Adiciona Evento de teclas addKeyListener(eventoT);

e tive que fazer uma private class implementando o KeyListener…

private class eventoTeclas implements KeyListener{ public void keyPressed(KeyEvent e){ switch(e.getKeyCode()){ case KeyEvent.VK_RIGHT:{ PadraoX+= 20; break; } case KeyEvent.VK_LEFT:{ PadraoX-= 20; break; } case KeyEvent.VK_DOWN:{ PadraoY+= 20; break; } case KeyEvent.VK_UP:{ PadraoY-= 20; break; } case KeyEvent.VK_ESCAPE:{ fim = true; System.exit(0); break; } } repaint(); } public void keyReleased(KeyEvent e){ } public void keyTyped(KeyEvent e){ switch(e.getKeyCode()){ case KeyEvent.VK_RIGHT:{ PadraoX+= 20; break; } case KeyEvent.VK_LEFT:{ PadraoX-= 20; break; } case KeyEvent.VK_DOWN:{ PadraoY+= 20; break; } case KeyEvent.VK_UP:{ PadraoY-= 20; break; } case KeyEvent.VK_ESCAPE:{ fim = true; System.exit(0); break; } } repaint(); } }

Encheu o saco ter que chegar a essa conclusão… embora agora esteja funcionando…

Agora o problema é tratar colisão. vou ver isso na interface gráfica… e depois que a galera da o help consigo concluir o game e irei disponibiliza-lo para o PortalJava junto com os codigos, para demais pessoas poderem estudar do codigo que usei.

Abraços.