Olá.
Eu quero q o programa nao termine depois de uma vitoria ou empate.
[code] /*
Jogo da velha
Componentes:
Daniel Farias
Quelvin Morgado
*/
package jogodavelha2;
import javax.swing.*;// trabalha com janelas
import java.awt.*;
import java.awt.event.*;
/*'o java.awt.event.*' é usado para colocar eventos, por exemplo em
botões, em fields, ou capturar cliques do mouse. Logo usa-se o pacote event,e
pausar mais de uma classe desse pacote, se for por exemplo usar
so uma, usa-se somente o nome da classe colocando no lugar do *.
*/
/*import java.awt.*; = Contém todas as classes para criação de interfaces do
usuario, pintura, graficos e imagens.
*/
//JFrame é uma classe do pacote swing que representa uma janela
public class JogoVelha2 extends JFrame implements ActionListener {
/*A interface de ouvinte recebeeventos de ação. A classe que está interessada no
processamento de um evento de ação implementa essa interface, e o objeto criado
com essa classe é registrada com um componente, utilizando o método do
componente addActionListener. Quando o evento de ação ocorre,que o método
actionPerformed 's é invocado.
*/
JButton bot1,bot2,bot3,bot4,bot5,bot6,bot7,bot8,bot9;
int velha[][] = new int[3][3];//vetor multidi, para campos do jogo 3x3
int i, j, jogada = 1, int_lapis, flag = 0, val1, val2, val3;
String jogador1, jogador2, lapis;
//flag -> Reconhece ganhador
public JogoVelha2() {
//classe é usada para a interface
jogador1 = JOptionPane.showInputDialog("Digite o nome do 1º jogador");
jogador2 = JOptionPane.showInputDialog("Digite o nome do 2º jogador");
for(i=0;i<3;i++){
for(j=0;j<3;j++){
velha[i][j] = 0;
}
}
/*for acima cria os campos do layout
*
*/
setLayout(new GridLayout(3,3,5,5));/* define espaçamento e
alinhamento dos campos para prenchimento das jogadas do layout
*/
//botões
add(bot1 = new JButton(" "));
add(bot2 = new JButton(" "));
add(bot3 = new JButton(" "));
add(bot4 = new JButton(" "));
add(bot5 = new JButton(" "));
add(bot6 = new JButton(" "));
add(bot7 = new JButton(" "));
add(bot8 = new JButton(" "));
add(bot9 = new JButton(" "));
//aplica uma ação sobre os botões
bot1.addActionListener(this);
bot2.addActionListener(this);
bot3.addActionListener(this);
bot4.addActionListener(this);
bot5.addActionListener(this);
bot6.addActionListener(this);
bot7.addActionListener(this);
bot8.addActionListener(this);
bot9.addActionListener(this);
setTitle("Jogo da velha ");//título da janela
setSize(210,150);//alterar o tamanho janela
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/* para que a
aplicação seja finalizada quando o usuario clicar no X da
janela, caso contrário depois de fechar a janela o
aplicativo continua rodando..*/
}
public void actionPerformed(ActionEvent e) {
//efetua ação sobre os botões
if (jogada % 2 != 0){
lapis = "X";
int_lapis = 1;
} else {
lapis = "O";
int_lapis = 2;
}
/* lapis pode ser O ou X, sendo marcada em qualquer um dos nove campos do
* vetor multidimensional "velha".
*/
jogada += 1;//pra q isso?
if (e.getSource() == bot1) {
bot1.setText(lapis);// 1.marca X ou O sobre o botão
bot1.setEnabled(false);//2.desativa o botão para a marcação
velha[0][0] = int_lapis;
} else if (e.getSource() == bot2) {
bot2.setText(lapis);
bot2.setEnabled(false);
velha[0][1] = int_lapis;
} else if (e.getSource() == bot3) {
bot3.setText(lapis);
bot3.setEnabled(false);
velha[0][2] = int_lapis;
} else if (e.getSource() == bot4) {
bot4.setText(lapis);
bot4.setEnabled(false);
velha[1][0] = int_lapis;
} else if (e.getSource() == bot5) {
bot5.setText(lapis);
bot5.setEnabled(false);
velha[1][1] = int_lapis;
} else if (e.getSource() == bot6) {
bot6.setText(lapis);
bot6.setEnabled(false);
velha[1][2] = int_lapis;
} else if (e.getSource() == bot7) {
bot7.setText(lapis);
bot7.setEnabled(false);
velha[2][0] = int_lapis;
} else if (e.getSource() == bot8) {
bot8.setText(lapis);
bot8.setEnabled(false);
velha[2][1] = int_lapis;
} else if (e.getSource() == bot9) {
bot9.setText(lapis);
bot9.setEnabled(false);
velha[2][2] = int_lapis;
}
//Os fors abaixo são todas as possibilidades de jogadas;
//kd o for das jogadas horizontais?
for (i=0;i<3;i++){
val1 = velha[0][i];
val2 = velha[1][i];
val3 = velha[2][i];
//possibilidades para jogadas na vertical
if ( (val1 == 1 ) && (val2 == 1) && (val3 == 1) ) {
flag = 1;//determina vencedor 1
}
if ( (val1 == 2 ) && (val2 == 2) && (val3 == 2) ) {
flag = 2;//determina vencedor 2
}
}
for (i=0;i<3;i++){
//[linha][coluna]
val1 = velha[i][0];
val2 = velha[i][1];
val3 = velha[i][2];
//possibilades para jogadas na horizontal
if ( (val1 == 1 ) && (val2 == 1) && (val3 == 1) ) {
flag = 1;
}
if ( (val1 == 2 ) && (val2 == 2) && (val3 == 2) ) {
flag = 2;
}
}
val1 = velha[0][0];
val2 = velha[1][1];
val3 = velha[2][2];
/* ?| | ?=X ou O
* | ? |
* | |?
*Jogadas diagonal principal (esquerda para direita)
*/
if ( (val1 == 1 ) && (val2 == 1) && (val3 == 1) ) {
flag = 1;
}
if ( (val1 == 2 ) && (val2 == 2) && (val3 == 2) ) {
flag = 2;
}
val1 = velha[0][2];
val2 = velha[1][1];
val3 = velha[2][0];
/* | |? ?=X ou O
* | ? |
* ?| |
// possibilidade para a diagonal secundária (esquerda para a direita)
*/
if ( (val1 == 1 ) && (val2 == 1) && (val3 == 1) ) {
flag = 1;//determina vencedor 1
}
if ( (val1 == 2 ) && (val2 == 2) && (val3 == 2) ) {
flag = 2;//determina vencedor 2
}
if (flag !=0) {
if(flag == 1){
JOptionPane.showMessageDialog(this, jogador1
+ " ganhou!","Vencedor",JOptionPane.INFORMATION_MESSAGE);
} else if (flag == 2){
JOptionPane.showMessageDialog(this, jogador2
+ " ganhou!","Vencedor",JOptionPane.INFORMATION_MESSAGE);
}
System.exit(0);//finaliza o programa
/*Pra que usa-lo? Nesse caso, se nao for usado, mesmo
depois da vitoria do jogador 1ou2 o aplicativo
continuaria funcionando. Ou seja mesmo depois de um
vencedor daria empate */
}
if (jogada > 9){//se jogada for maior que nove, houve empate
JOptionPane.showMessageDialog(null,"Deu velha!","Empate",
JOptionPane.WARNING_MESSAGE);/*WARNING_MESSAGE, refere-se
* ao tipo de mensagem, logo o
* icone da janela será diferente
*/
System.exit(0);//fecha o aplicativo.
}
}
public static void main ( String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new JogoVelha2().setVisible(true);
}
});
}
}
[/code]