Jogo de Damas em java

Boa noite,

Meu programa é um joguinho de damas.
Criei uma matriz para tabuleiro lógico com as posições dos botões. Para a parte gráfica, criei uma classe apenas para criar quatro tipos de botões diferentes (jogador1 / jogador2 / Dama / Casa vazia).
Criei um método que gera uma matriz de botões 8x8 e relacionei com o tabuleiro lógico. Porem minha duvida no momento e como eu posso capturar a coordenada botão [x] [y] no clique do botão para enviar esta coordenada para o tabuleiro lógico.

Pensei em adicionar esta coordenada de alguma forma no próprio botão no momento em que laço “FOR” adiciona os mesmos no vetor. Como eu poderia fazer isto?

primeiro.
com este tabuleiro lógico voce pode avançar x ou y -1 ou 9?
se voce ja trata isso fica bem facil, nao sei oque voce esta desenhando, mas que tal desenhar botoes?

8x8 botoes fazem um tabuleiro branco, no inicio voce vai colocar ou “marca” preta ou “marca” branca, representando as peças.

quando voce clicar ele terá um nome, o nome dele é 1,5 ou 5,8.

dai voce ja terá a posição e a situação dele. no caso se ele é branca, preta ou dama branca ou dama preta.

se for dama branca, e a posição dele for x,y ele pode fazer isso isso ou aquilo… moveu? tem peça em cima da pedra que ele quer colocar? se tiver nao pode senao move…

de x,y para x,y tem alguma peça no meio? se tiver é da cor do adversario? se sim deleta a “marca” do botao, marca ponto pro jogador do movimento. se nao volta o movimento pois ele pegou a propria peça.

e ai vai cara, creio que ja da um adianto. ^^ qualquer coisa posta ae

[quote=Rafael Scane]Boa noite,

Meu programa é um joguinho de damas.
Criei uma matriz para tabuleiro lógico com as posições dos botões. Para a parte gráfica, criei uma classe apenas para criar quatro tipos de botões diferentes (jogador1 / jogador2 / Dama / Casa vazia).
Criei um método que gera uma matriz de botões 8x8 e relacionei com o tabuleiro lógico. Porem minha duvida no momento e como eu posso capturar a coordenada botão [x] [y] no clique do botão para enviar esta coordenada para o tabuleiro lógico.

Pensei em adicionar esta coordenada de alguma forma no próprio botão no momento em que laço “FOR” adiciona os mesmos no vetor. Como eu poderia fazer isto?
[/quote]

Bom, se você realmente quer fazer isso com botões, eu acho que o jeito mais fácil seria criar uma classe que herda de botão e criar os atributos linha e coluna na nova classe. Seria interessante até mesmo já implementar as coordenadas na notação usada no jogo de damas (e1,f2, etc.). Assim, ao criar os botões você seta cada coordenada apropriadamente. Para capturar qual foi a coordenada clicada, basta fazer um getSource() no objeto de evento, faz um cast do objeto retornado para a sua classe e por fim você pega as coordenadas.

Agora, se eu fosse você, experimentaria dar uma olhada na API de Java2D e faria os desenhos com essa API. Dá mais trabalho, mas o resultado fica melhor, sem falar que é um aprendizado interessante e divertido (na minha opinião).

Bom, estou meio perdido ainda em como fazer este procedimento, sou iniciante em programacao. Vou postar o meu codigo para me informarem um geito legal de pegar as coordenadas do botao:

Esta primeira classe cria 3 tpos de botao:

[code]
public class Peca extends JButton implements ActionListener
{
private static int tamanho = 50;
private Estado estado;
int linha, coluna;

public Peca(int linha , int coluna)

{
super();
this.linha = linha;
this.coluna = coluna;
setBackground(Color.WHITE);
estado = Estado.VAZIO;
}

	public int getLinha() {
			return linha;
	}
	public void setLinha(int linha) {
			this.linha = linha;
	}
	public int getColuna() {
			return coluna;
	}
	public void setColuna(int coluna) {
			this.coluna = coluna;
	}

public void setEstado(Estado e) { estado = e; }
public Dimension getMaximumSize() { return getPreferredSize(); }
public Dimension getMinimumSize() { return getPreferredSize(); }
public Dimension getPreferredSize() { return new Dimension(tamanho,tamanho); }
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
if (estado != Estado.VAZIO)
{
Color[] cores = new Color[2];
if (estado == Estado.RED)
{ cores[0] = Color.RED; cores[1] = new Color(100,10,5); }
else if (estado == Estado.PRETO)
{ cores[0] = new Color(100,100,100); cores[1] = Color.BLACK; }
RadialGradientPaint paint = new RadialGradientPaint(new Point2D.Double(tamanho/3,tamanho/3),2*tamanho/3,new float[]{0f,1f},cores);
g2d.setPaint(paint);
g2d.fillOval(6,6,getWidth()-12,getHeight()-12);
}
}
} [/code]

Esta proxima classe “Principal” cria os botoes nas posicoes de uma matriz 8x8 quando e clicado em “new game” . No momento da criacao de cada botao dentro de um “for” , preciso salvar em cada um deles a posicao X,Y, depois preciso verificar se algum dos botoes da matriz foi clicado e salvar suas coordenadas para enviar para a classe Tabuleiro Logico e fazer as devidas alteracoes.

public class Principal extends JFrame implements ActionListener {
		private static final long serialVersionUID = 1L;
		private JMenu mPrincipal;
		private JMenuItem btnNew,btnSalvar,btnLoad,btnSair;
		private JMenuBar menuBar;
	    Peca[][] tabuleiro ;
	    TabLogico tbL = new TabLogico();
		  
	   public Principal(){
		   super("PROJETO DAMAS");  
		    
		    this.setSize(700 , 750);  
		    this.setVisible(true);
		   

		    ImageIcon imgNew = new ImageIcon("c:/joypad-005.png");
		    btnNew = new JMenuItem("New Game" , imgNew);
	        btnNew.addActionListener(this);
	        	ImageIcon imgLoad = new ImageIcon("c:/folder_out-005.png");
	        	btnLoad = new JMenuItem("Load Game" , imgLoad);
	        	btnLoad.addActionListener(this);
	        		ImageIcon imgSalvar = new ImageIcon("c:/save_as-005.png"); 
	        		btnSalvar = new JMenuItem("Save" , imgSalvar);
	        		btnSalvar.addActionListener(this);	        
	        			ImageIcon imgSair = new ImageIcon("c:/delete-005.png");  
	        			btnSair = new JMenuItem("Exit" , imgSair);  
	        			btnSair.addActionListener(this);
	       	
	        menuBar = new JMenuBar();
	        ImageIcon img_logo = new ImageIcon("c:/webmaster_2939_Google_Chrome.png");
	        mPrincipal = new JMenu();
	        mPrincipal.setIcon(img_logo); 
	        
	        
	        mPrincipal.add(btnNew);
	        mPrincipal.add(btnSalvar);
	        mPrincipal.add(btnLoad);	        
	        mPrincipal.add(btnSair);
	        
	        menuBar.add(mPrincipal);
	        setJMenuBar(menuBar);
            
	        setVisible(true);
	        setResizable(true);
	        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	        
	    }
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == btnSair){
	    		System.exit(1);
	       }
		if (e.getSource() == btnNew){
		
			   setLayout(new GridLayout(8,8));
			   tabuleiro = new Peca[8][8];
			   for(int l=0;l<8;l++)
			   for(int c=0;c<8;c++)
			   {
			   tabuleiro[l][c] = new Peca(l, c);
			   add(tabuleiro[l][c]); 
			   
	           this.repaint();  
	           this.validate(); 
			   }
			   for (int l=0; l<8;l++)
			   for(int c=0;c<8;c++)
			   {
				if (l % 2 == 0)
				{
					if (c % 2 != 0)
					{
						tabuleiro[l][c].setBackground(Color.GRAY);	
					}
			    }
				if (l % 2 != 0)
				{
				if (c % 2 == 0)
			                  {
				        tabuleiro[l][c].setBackground(Color.GRAY);
			                   }
			                   }
		                      }
			                     for (int l=0; l<8;l++)
				   for(int c=0;c<8;c++)
				   {
					   if (tbL.VerificaTab(l, c) == 1)
					   {
						  tabuleiro[l][c].setEstado(Estado.RED);   
					   }
					   else if (tbL.VerificaTab(l, c) == 2)
					   {
						   tabuleiro[l][c].setEstado(Estado.PRETO);   
					   }
				    }
			            }
		                    }
 }

Alguem poderia me ajudar?

Faça assim:

 public void actionPerformed(ActionEvent e) {
     Object source = e.getSource();

     if(source instanceof Peca){
         Peca p = (Peca) source;
         
         int linha = p.getLinha();
         int coluna = p.getColuna();

         //....
     } 
 }

Mais algumas dicas:

  • crie 1 listener para cada botão ao invés de criar um listener para tudo, você pode usar classes anônimas internas para isso
  • no método em que você configura os botões, deixe para redesenhar a tela após toda a configuração ficar pronta, pois esta é uma operação cara e pode causar lentidão na incialização do jogo.

Já terminei o trabalho, o jogo funcionou perfeitamente.

Muito obrigado pela ajuda!

[quote=Rafael Scane]Já terminei o trabalho, o jogo funcionou perfeitamente.

Muito obrigado pela ajuda![/quote]

Você pode postar o .jar para o pessoal ver como ficou o jogo :?: :smiley:

:thumbup:

seria uma boa postar o .jar