Ola turma !fiz esse básico programinha do jogo da velha como exercício com swing e awt. Queria
colocar um fundo no JFrame ,ja vi várias soluções aqui mesmo mas nenhuma dá certo.Se alguém tiver alguma sujestão para dar uma melhorada na gráfica é bem vinda!!
package jogostabuleirosswing;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
class JTabuleiro extends JFrame implements ActionListener{
static int i=1;
ESTADOJOGO estado;
Maquina maquina;//classe interna
Image img;
JPanel paineltabuleiro,painelnomejogadorH,painelnomejogadorMaquina,painelbutton;
JButton but_novamente;
JLabel lab_jogador,lab_maquina;
Color color;
JButton button[]={new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton(),new JButton()};
static int array_jogadas[][]={ {0,1,2} , {0,3,6}, {0,4,8}, {3,4,5}, {6,7,8}, {1,4,7}, {2,5,8}, {2,4,6}};
static String str_homemsimbolo;
public JTabuleiro(String s){
super("JOGO DA VELHA");
str_homemsimbolo=s;
inicializatabu();
evento();
}
public void inicializatabu(){
// ao acabar o jogo voltar a cor novamente
color=button[0].getBackground();
maquina=new Maquina();//classe interna
//possibilitar decidir as coordenadas dos varios componentes que irao ser inseridas
Container cp=getContentPane();
cp.setBackground(Color.cyan);
cp.setLayout(null);
//painel para colocar o nome do Homem
painelnomejogadorH=new JPanel();
painelnomejogadorH.setLayout(new GridLayout(2,0));
painelnomejogadorH.setBackground(Color.cyan);
painelnomejogadorH.setSize(150,25);
painelnomejogadorH.setLocation(10,10);
lab_jogador=new JLabel("Nome jogador: "+Jogo.nomejogador);
painelnomejogadorH.add(lab_jogador);
// //painel para colocar o nome da maquina
painelnomejogadorMaquina=new JPanel();
painelnomejogadorMaquina.setLayout(new GridLayout(2,0));
painelnomejogadorMaquina.setBackground(Color.cyan);
painelnomejogadorMaquina.setSize(150,25);
painelnomejogadorMaquina.setLocation(200,10);
lab_maquina=new JLabel("Nome maquina: "+maquina.nomemaquina);
painelnomejogadorMaquina.add(lab_maquina);
// //painel para colocar o button para possibilitar novas jogadas
painelbutton=new JPanel();
painelbutton.setBackground(Color.cyan);
painelbutton.setSize(350,30);
painelbutton.setLocation(20,300);
but_novamente=new JButton("ok");
painelbutton.setLayout(new FlowLayout());
painelbutton.add(new JLabel("Quer jogar novamente?Aperte aqui"));
painelbutton.add(but_novamente);
//criando painel para tabuleiro
paineltabuleiro=new JPanel();
paineltabuleiro.setLayout(new GridLayout(3,3));
paineltabuleiro.setSize(150,150);
paineltabuleiro.setLocation(100,80);////centraliza no JFrame!!!
for(int i=0;i < button.length;i++){//insere buttons no painel
paineltabuleiro.add(button[i]);
}
cp.add(paineltabuleiro);
cp.add(painelnomejogadorH);
cp.add(painelnomejogadorMaquina);
cp.add(painelbutton);
setVisible(true);
setSize(400,400);//tamanho JFrame
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void evento(){
for(int i=0;i<button.length;i++){
button[i].addActionListener(this);
}
but_novamente.addActionListener(this);
}
public boolean verificaButton(JButton button){
if((button.getText().equalsIgnoreCase("X")== false)&& (button.getText().equalsIgnoreCase("0")== false)){
return true;
}else return false;
}
public void actionPerformed(ActionEvent e) {
int i= Math.abs(Jogo.vezH-Jogo.vezM);
if(i == 0 && estado == ESTADOJOGO.START){
verificaEstadoJogo();
for(int k=0;k < button.length;k++){
if(e.getSource() == button[k] && verificaButton(button[k])){
button[k].setText(str_homemsimbolo);
Jogo.vezH++;
maquina.evento_maquina();
}
}
}
if(but_novamente == e.getSource()&& estado == ESTADOJOGO.GAMEOVER){
for(int k=0;k<button.length;k++){
button[k].setText("");
button[k].setBackground(color);
}
estado =ESTADOJOGO.START;
Jogo.vezH=0;
Jogo.vezM=0;
}else if(but_novamente == e.getSource()&& estado == ESTADOJOGO.START)
JOptionPane.showMessageDialog(null,"O jogo nao acabou,mas tu e\'s chato!");
}
public void verificaEstadoJogo() {
boolean x = false,y = false;
int co=0;
Color r=new Color(100);
for(int i=0; i < array_jogadas.length; i++){
if(button[array_jogadas[i][0]].getText().equalsIgnoreCase("X")&&( button[array_jogadas[i][1]].getText().equalsIgnoreCase("X")) &&( button[array_jogadas[i][2]].getText().equalsIgnoreCase("X")) ){
x=true;
button[array_jogadas[i][0]].setBackground(r.RED); button[array_jogadas[i][1]].setBackground(r.RED); button[array_jogadas[i][2]].setBackground(r.RED);
}else if(button[array_jogadas[i][0]].getText().equalsIgnoreCase("0")&&( button[array_jogadas[i][1]].getText().equalsIgnoreCase("0")) &&( button[array_jogadas[i][2]].getText().equalsIgnoreCase("0")) ){
y=true;
button[array_jogadas[i][0]].setBackground(r.RED); button[array_jogadas[i][1]].setBackground(r.RED); button[array_jogadas[i][2]].setBackground(r.RED);
}
}
if(x == true){
estado=ESTADOJOGO.GAMEOVER;
Jogo.vezH+=2;
JOptionPane.showMessageDialog(null," "+MENSAGENS.GANHOU.mensagem());
}else if(y == true){
JOptionPane.showMessageDialog(null," "+MENSAGENS.PERDEU.mensagem());
estado=ESTADOJOGO.GAMEOVER;
Jogo.vezM+=3;
}
for(int i=0;i < button.length;i++)//verifica se esta cheio de simbolos
if(verificaButton(button[i])== false)co++;
if(co == 9 && estado == ESTADOJOGO.START){
estado = ESTADOJOGO.GAMEOVER;
JOptionPane.showMessageDialog(null, "EMPATE");
}
}
class Maquina{
ArrayList<Integer> lis_coordenadas;
ArrayList<Tab> lis_tab;
String str_maquinasimbolo;
String nomemaquina="Terrivel";
int resposta;
Maquina(){
if(str_homemsimbolo.equalsIgnoreCase("X"))
str_maquinasimbolo="0";
else
str_maquinasimbolo="X";
}
ArrayList CriaLista(){
int tamanho=0;
lis_coordenadas=new ArrayList<Integer>();
lis_tab=new ArrayList<Tab>();
for(int i=0; i < button.length;i++){//procura saber qts nullos tem para saber o tamanho
if( !button[i].getText().equalsIgnoreCase("X") && !button[i].getText().equalsIgnoreCase("0") ){
tamanho++;
lis_coordenadas.add(i);
}
}
for(int y=0;y< tamanho;y++){//sabendo o tamanho cria a lista de tabuleiro
Tab tab=new Tab(str_maquinasimbolo);
tab.clonar(button);//clonando os tabuleiros para criar a lista
tab.insere(lis_coordenadas.get(y));//insere os simobolos da maquina
lis_tab.add(y,tab);//criado a lista de tabuleiros
}
return null;
}
int buscaMelhorValor(){
int max,coordenada=0;
Tab tab=lis_tab.get(0);
max=tab.resultadoavaliacao;
coordenada=tab.jogadapossivel;
for(int i=1;i<lis_tab.size();i++){
tab=lis_tab.get(i);
if(max <= tab.resultadoavaliacao){
max=tab.resultadoavaliacao;
coordenada=tab.jogadapossivel;
}
}
return coordenada;
}
public void evento_maquina() {
verificaEstadoJogo();
if( estado == ESTADOJOGO.START)
CriaLista();
int coordenada=buscaMelhorValor();
if(estado == ESTADOJOGO.START ){
if(Jogo.vezH >= 1){//primeira jogada do homen
button[coordenada].setText(str_maquinasimbolo);
verificaEstadoJogo();
Jogo.vezM++;
}
}
}
}
}
enum ESTADOJOGO{GAMEOVER,START,PAUSE}
enum MENSAGENS{GANHOU{
@Override
public String mensagem(){
int i=(int)(Math.random() *(ganhando.length));
return ganhando[i];}
},PERDEU{
@Override
public String mensagem(){
int i=(int)(Math.random() *(perdendo.length));
return perdendo[i];}
};
String ganhando[]={"Parabens!!Mas cuidado mae, pode ser sorte"," ,Legal vc ganhou!"," ,Parabens !mas a maquina poderia estar cansada... ","Parabens voce se garantiu ","Legal vc ganhou","you win","Parabens e\' isso ai "," mandou bem!!"};
String perdendo[]={"ai.. ai.. ai.. não leve a mal mas ja pensou outro jogo?","A maquina e\' um osso duro meu amigo","Tente novamente, pode ser que teras mais sorte","Relaxe e respire fundo acontece com todo mundo"};
public String mensagem(){
return null;
}
}
public class Jogo {
static int vezH,vezM;
JTabuleiro tab;
static String nomejogador;
Jogo(JTabuleiro j){
tab=j;
tab.estado=ESTADOJOGO.START;
}
public static void main(String...a){
Jogo.nomejogador=JOptionPane.showInputDialog(null," Digite seu nome ");
JTabuleiro t=new JTabuleiro("X");
t.setSize(400,400);//tamanho JFrame
t.setVisible(true);
t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
new Jogo(t);
}
}
class Tab{
String tab_array[];
String str_simboloM;
int jogadapossivel;
int resultadoavaliacao;
int mtxPossibilidades[][]={{12,36,48},{2,47},{1,46,58},{6,45},{35,17,26,8},{28,34},{3,42,78},{14,68},{4,25,67}};
Tab(String simb){
tab_array=new String[9];
str_simboloM=simb;
}
void setJogada(int x){
jogadapossivel=x;
}
void Imprimir(){
for(String st:tab_array){
System.out.println(st);
}
System.out.println("--");
}
void clonar(JButton[] button){
for(int i=0; i < button.length;i++){
if( button[i].getText().equalsIgnoreCase("X"))
tab_array[i]="X";
else if(button[i].getText().equalsIgnoreCase("0") )
tab_array[i]="0";
else
tab_array[i]="null";
}
}
void calcularPossiParaMaquina(){
int spacolivreM=0,spacolivreH=0;
for(int k=0; k < mtxPossibilidades[jogadapossivel].length;k++){
if(tab_array[mtxPossibilidades[jogadapossivel][k]/10].equalsIgnoreCase(JTabuleiro.str_homemsimbolo)&& tab_array[mtxPossibilidades[jogadapossivel][k]%10].equalsIgnoreCase(JTabuleiro.str_homemsimbolo)){ spacolivreM=10;}
}
for(int i=0; i < JTabuleiro.array_jogadas.length;i++){
if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase("null") &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase("null")&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase("null") ){
spacolivreM++;spacolivreH++;
}
if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase( str_simboloM) &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase("null")&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase("null") ){
spacolivreM++;
}else if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase("null") &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase(str_simboloM)&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase("null") ){
spacolivreM++;
}else if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase("null") &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase("null")&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase(str_simboloM) ){
spacolivreM++;
}else if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase(str_simboloM) &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase(str_simboloM)&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase("null") ){
spacolivreM++;
}else if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase(str_simboloM) &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase("null")&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase(str_simboloM) ){
spacolivreM++;
}else if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase("null") &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase(str_simboloM)&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase(str_simboloM) ){
spacolivreM++;
}else if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase(str_simboloM) &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase(str_simboloM)&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase(str_simboloM) ){
spacolivreM=60;
JOptionPane.showMessageDialog(null," "+MENSAGENSARCASTICA.PERDEU.mensagem());
}
//*********texte para saber as linhas diagonais e colunas do homen**************************************************************
if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase(JTabuleiro.str_homemsimbolo) &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase("null")&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase("null") ){
spacolivreH++;
}else if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase("null") &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase(JTabuleiro.str_homemsimbolo)&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase("null") ){
spacolivreH++;
}else if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase("null") &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase("null")&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase(JTabuleiro.str_homemsimbolo) ){
spacolivreH++;
}else if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase(JTabuleiro.str_homemsimbolo) &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase(JTabuleiro.str_homemsimbolo)&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase("null") ){
spacolivreH++;
}else if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase(JTabuleiro.str_homemsimbolo) &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase("null")&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase(JTabuleiro.str_homemsimbolo) ){
spacolivreH++;
}else if(tab_array[JTabuleiro.array_jogadas[i][0]].equalsIgnoreCase("null") &&tab_array[JTabuleiro.array_jogadas[i][1]].equalsIgnoreCase(JTabuleiro.str_homemsimbolo)&&tab_array[JTabuleiro.array_jogadas[i][2]].equalsIgnoreCase(JTabuleiro.str_homemsimbolo) ){
spacolivreH++;
}
}
if(tab_array[0].equalsIgnoreCase(JTabuleiro.str_homemsimbolo) &&tab_array[6].equalsIgnoreCase(str_simboloM)&& jogadapossivel ==7 ){
spacolivreM=40;
}else if(tab_array[0].equalsIgnoreCase(JTabuleiro.str_homemsimbolo) &&tab_array[8].equalsIgnoreCase(JTabuleiro.str_homemsimbolo)&& jogadapossivel ==7 ){
spacolivreM=40;
}else if(tab_array[0].equalsIgnoreCase(JTabuleiro.str_homemsimbolo) &&tab_array[2].equalsIgnoreCase(JTabuleiro.str_homemsimbolo)&& tab_array[6].equalsIgnoreCase(str_simboloM)&&jogadapossivel ==1 ){
spacolivreM=40;
}else if(tab_array[1].equalsIgnoreCase(JTabuleiro.str_homemsimbolo) &&tab_array[3].equalsIgnoreCase(JTabuleiro.str_homemsimbolo)&& !tab_array[0].equalsIgnoreCase(str_simboloM) && !tab_array[0].equalsIgnoreCase(JTabuleiro.str_homemsimbolo)&& jogadapossivel ==7 ){
spacolivreM=40;
jogadapossivel=0;
}else if (tab_array[2].equalsIgnoreCase(JTabuleiro.str_homemsimbolo) &&tab_array[6].equalsIgnoreCase(JTabuleiro.str_homemsimbolo)&& jogadapossivel ==7 ){
spacolivreM=40;
jogadapossivel=7;
}
resultadoavaliacao=spacolivreM-spacolivreH;
}
void insere(int i){
setJogada(i);
tab_array[i]=str_simboloM;
calcularPossiParaMaquina();
}
}
enum MENSAGENSARCASTICA{PERDEU{
public String mensagem(){
int i=(int)(Math.random() *(ganhando.length));
return ganhando[i];}
};
String ganhando[]={"Perdeu Play Boy!!","Seria bom se vc pudesse mudar de ideía ne?Mas agora,voce vai perder..ahaha","Realmente essa voce vai dançar","Poxa acho que vou ganhar","Se tivesse apostado dinheiro eu teria ganhado","Qualquer tentativa é inútil,essa voce perdeu","uhmmmm obrigado agora vou ganhar","Ola que presente!!muito obrigado ","Abandone suas esperanças"};
public String mensagem(){
return null;
}
}
agora acho que ninguém ganha dele ehehe