package Jogo;
public class Jogador {
private String nome;
private int pontos;
public Jogador(String nomeJogador){
nome = (nomeJogador.equals("")? "Jogador sem nome...! ": nomeJogador );
pontos = 0;
}
public String obterNome(){
return nome;
}
public int obterPontos(){
return pontos;
}
public void incrementarPontos(){
pontos += 10;
}
public void decrementarPontos(){
pontos--;
}
}
package Jogo;
import javax.swing.*;
public class MyButton extends JButton{
/**
*
*/
private static final long serialVersionUID = 1L;
private Icon imagemPadrao;
private Icon imagemBotao;
public MyButton(Icon imagemPadrao, Icon imagemBotao){
super();
this.imagemBotao = imagemBotao;
this.imagemPadrao = imagemPadrao;
setImagemPadrao();
}
public void setImagemPadrao(){
this.setIcon(imagemPadrao);
}
public void setImagemBotao(){
this.setIcon(imagemBotao);
}
public Icon getImagemBotao(){
return this.imagemBotao;
}
}
package Jogo;
import Jogo.Jogador;
import Jogo.TelaJogo;
//import Jogo.TelaUm;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class TelaJogo extends JFrame implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* Construtor da classe
* @Param jog - Objeto jogador, com os dados do jogador
* @Param codJog - O tema escolhido
* @Param fatorJogo - Inteiro que determina se o jogo é 4X4 ou 6X6
*/
//ClassLoader cl = this.getClass().getClassLoader();
public TelaJogo( Jogador jog, int codJog, int fatorJogo ){
super( "Jogo da Memória" );
setLocation( 200, 10 );
addWindowListener(new WindowAdapter(){
public void windowClosing( WindowEvent windowEvent ){
mostrarResumoJogo();
}
});
fator = fatorJogo;
objJogadorJogada = jog;
temaJogada( codJog );
preparaArrayImagens();
container = getContentPane();
labelPontosJogador = new JLabel( "Jogador: " + objJogadorJogada.obterNome() + " >> Pontos: " );
pontosJogador = new JLabel( ""+objJogadorJogada.obterPontos() );
imagemSair = new ImageIcon(getClass().getResource("/imagens/jogo/sair.gif"));
imagemSairRoll = new ImageIcon(getClass().getResource("/imagens/jogo/sairRoll.gif"));
// configura o botão sair
botaoSair = new JButton(" Sair do Jogo ", imagemSair);
botaoSair.setRolloverIcon( imagemSairRoll );
botaoSair.addActionListener( this );
painelImagens = new JPanel();
painelPontos = new JPanel();
// configurando o painel superior
painelPontos.setBackground( Color.white );
painelPontos.add( labelPontosJogador );
painelPontos.add( pontosJogador );
grid = new GridLayout( fator, fator, 5, 5 );
painelImagens.setLayout( grid );
imagemPadrao = new ImageIcon(getClass().getResource("/imagens/jogo/standard.gif"));
posicoesFiguras = new MyButton[( fator * fator )];
for ( int cont = 0; cont < ( fator * fator ); cont++ ){
posicoesFiguras[ cont ] = new MyButton(imagemPadrao, imagens[cont]);
posicoesFiguras[ cont ].addActionListener( this );
painelImagens.add( posicoesFiguras[ cont ] );
}
container.add( painelPontos, BorderLayout.NORTH);
container.add( botaoSair, BorderLayout.SOUTH );
container.add( painelImagens );
double d_largura = (fator == 4?82.5:80);
d_largura *= fator;
int i_largura = (int) d_largura;
setSize( i_largura, i_largura+70 );
setVisible( true );
setResizable( false );
}
/**
* Prepara o Array de Imagens
*
*/
private void preparaArrayImagens(){
int posicaoNoArray, x, y;
this.imagens8 = new Icon[(fator * fator)/2];
for ( x = 0; x < ((fator*fator)/2); x++ ){
this.imagens8[ x ] = new ImageIcon(getClass().getResource(tema + ( x + 1 ) + ".GIF"));
}
this.imagens = new Icon[ (fator*fator) ];
for ( x = 0; x < 2; x++ ){
for ( y = 0; y < ((fator*fator)/2); y++ ){
do{
posicaoNoArray = ( int ) ( Math.random() * (fator*fator) );
}while( this.imagens[ posicaoNoArray ] != null );
this.imagens[ posicaoNoArray ] = imagens8[ y ];
}
}
}
/**
* Descobre o tema escolhido
* @Param codTema - Código do tema escolhido
*/
private void temaJogada( int codTema ){
switch( codTema ){
case 1: this.tema = "/imagens/Times Nacionais/";
break;
case 2: this.tema = "/imagens/Times Internacionais/";
break;
}
}
/**
* Mostra o resumo do jogo ao sair
*
*/
private void mostrarResumoJogo(){
resumoJogo = "Jogador: " + objJogadorJogada.obterNome() + "nn" +
"Pontos: " + objJogadorJogada.obterPontos() + "nn" +
"Quantidade de tentativas: " + qtdeTentativas;
JOptionPane.showMessageDialog( null, ""+resumoJogo, "Resumo do Jogo",
JOptionPane.INFORMATION_MESSAGE );
setVisible( false );
System.gc();
}
public void actionPerformed( ActionEvent event ){
// Se o evento for do botão Sair...
if ( event.getSource() == botaoSair ){
mostrarResumoJogo();
}
// Caso contrário é evento de botões de imagem
else{
// testa se é o primeiro clique
if( primeiroClique ){
qtdeTentativas++;
// testa se o jogador errou na jogada anterior
if ( !acertou ){
botaoUm = (MyButton) botaoClicadoUm;
botaoDois = (MyButton) botaoClicadoDois;
botaoUm.setImagemPadrao();
botaoDois.setImagemPadrao();
}
botaoClicadoUm = event.getSource();
botaoUm = (MyButton) botaoClicadoUm;
botaoUm.setImagemBotao();
// indica que este foi o primeiro clique
primeiroClique = !primeiroClique;
}
// se não for o primeiro clique
else{
botaoClicadoDois = event.getSource();
botaoDois = (MyButton) botaoClicadoDois;
// verifica se o jogador clicou no mesmo botão
if ( botaoClicadoDois == botaoClicadoUm ){
acertou = false;
JOptionPane.showMessageDialog( null, "Ação não permitida!",
"Ação Não Permitida", JOptionPane.WARNING_MESSAGE );
}
// se não for o mesmo botão...
else{
// coloca a imagem no botão
botaoDois.setImagemBotao();
// compara com o primeiro botão clicado
if ( botaoUm.getImagemBotao().equals( botaoDois.getImagemBotao())){
acertou = true;
qtdeAcerto++;
// Desabilita os botões
botaoUm.setEnabled( false );
botaoDois.setEnabled( false );
// incrementar pontos
objJogadorJogada.incrementarPontos();
pontosJogador.setText( ""+objJogadorJogada.obterPontos() );
// se foi o último par encontrado, apresenta resumo do jogo e fecha a janela
if ( qtdeAcerto == ((fator*fator)/2) ){
mostrarResumoJogo();
setVisible( false );
System.gc();
}
}
// se não for o mesmo botão
else{
acertou = false;
//decrementar pontos
objJogadorJogada.decrementarPontos();
pontosJogador.setText( ""+objJogadorJogada.obterPontos() );
}
// indica que este foi o segundo clique
primeiroClique = !primeiroClique;
}
}
}
}
private Object botaoClicadoUm = new Object();
private Object botaoClicadoDois = new Object();
private JLabel pontosJogador, labelPontosJogador;
private JPanel painelImagens, painelPontos;
private JButton botaoSair;
private Icon imagemSair, imagemSairRoll, imagens[], imagemPadrao, imagens8[];
private GridLayout grid;
private Container container;
private String tema, resumoJogo = "";
private Jogador objJogadorJogada;
private int fator, qtdeAcerto, qtdeTentativas = 0;
private boolean primeiroClique = true;
private boolean acertou = true;
private MyButton botaoUm, botaoDois, posicoesFiguras[];
}
package Jogo;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
import Jogo.Jogador;
import Jogo.TelaJogo;
public class TelaUm extends JFrame implements ActionListener, ItemListener {
/**
*
*/
private static final long serialVersionUID = 1L;
private Container container;
private JButton botaoSair, botaoIniciarJogo;
private JPanel painelBotoes, painelDados, painelCabecalho;
private JPanel painelCentro, painelRodape, painelImagem;
private Icon imagemPainel, imagemRodape, imagemJogar, titulo;
private Icon imagemJogarRoll, imagemSair, imagemSairRoll;
private JLabel labelImagemPainel, nomeJogador, temaJogada;
private JLabel texto1, desenvolvimento;
private GridLayout gridBotoes, gridDados, gridCabecalho, gridRodape;
private JComboBox<Object> temasJogada;
private int indiceTema = 1;
private Jogador objJogador;
private JTextField fieldNomeJogador;
private Font fonte10;
private JTextArea telaSaida = new JTextArea();
private boolean jogoFacil = false;
private ButtonGroup dificuldadeGroup;
private JMenu menuDificuldade;
private JMenuBar barraMenu;
private JRadioButtonMenuItem facil, dificil;
private JLabel nivelDificuldade;
String nomeObjJogador;
// os temas para os jogos
private String nomesTemas[] =
{ "Times Nacionais", "Times Internacionais"};
// índices dos temas para os jogos
private int indiceTemas[] =
{ 1, 2 };
//private Component som;
public TelaUm(){
super( "Bem-vindo ao Jogo da Memória!" );
// adiciona um listener à janela
addWindowListener(
// classe interna anônima
new WindowAdapter(){
// trata o evento de quando o usuário fecha a janela
public void windowClosing( WindowEvent windowEvent ){
saidaPrograma();
}
}// fim da classe interna anônima
);
nivelDificuldade = new JLabel("Nível de dificuldade: DIFÍCIL");
nivelDificuldade.setForeground(Color.red);
// gerenciadores de layout
gridBotoes = new GridLayout( 1, 2, 5, 5 );
gridDados = new GridLayout( 6, 1, 10, 10 );
gridCabecalho = new GridLayout( 1, 1, 10, 10 );
gridRodape = new GridLayout( 1, 1, 10, 10 );
// painel da imagem (esquerda)
imagemPainel = new ImageIcon(getClass().getResource("/imagens/jogo/painel.Gif"));
labelImagemPainel = new JLabel( imagemPainel );
painelImagem = new JPanel();
painelImagem.add( labelImagemPainel );
painelImagem.setBackground( Color.white );
fonte10 = new Font( "Verdana", Font.ITALIC, 10 );
// imagens dos botões
imagemJogar = new ImageIcon(getClass().getResource("/imagens/jogo/jogar.gif"));
imagemJogarRoll = new ImageIcon(getClass().getResource("/imagens/jogo/jogarRoll.gif")); // imagem Rollover
imagemSair = new ImageIcon(getClass().getResource("/imagens/jogo/sair.gif"));
imagemSairRoll = new ImageIcon(getClass().getResource("/imagens/jogo/sairRoll.gif")); // imagem Rollover
// botão Iniciar Jogo
botaoIniciarJogo = new JButton( "Iniciar Jogo", imagemJogar );
botaoIniciarJogo.setRolloverIcon( imagemJogarRoll );
botaoIniciarJogo.addActionListener( this );
botaoIniciarJogo.setSize( 250, 15 );
botaoIniciarJogo.setHorizontalAlignment( SwingConstants.LEFT );
// botão Sair
botaoSair = new JButton( "Abandonar o Jogo", imagemSair );
botaoSair.setRolloverIcon( imagemSairRoll );
botaoSair.addActionListener( this );
botaoSair.setSize( 250, 15 );
botaoSair.setHorizontalAlignment( SwingConstants.RIGHT );
botaoSair.setHorizontalTextPosition( SwingConstants.LEFT );
// painel de botões (inferior)
painelBotoes = new JPanel();
painelBotoes.setBackground( Color.lightGray );
painelBotoes.setLayout( gridBotoes );
painelBotoes.add( botaoSair );
painelBotoes.add( botaoIniciarJogo );
//cabeçalho
titulo = new ImageIcon(getClass().getResource("/imagens/jogo/titulo.gif"));
texto1 = new JLabel( titulo );
texto1.setHorizontalAlignment( SwingConstants.CENTER );
// painel de cabeçalho
painelCabecalho = new JPanel();
painelCabecalho.setLayout( gridCabecalho );
painelCabecalho.setBackground( Color.lightGray );
painelCabecalho.add( texto1 );
// label do nome do jogador
nomeJogador = new JLabel("Informe seu nome:");
nomeJogador.setHorizontalAlignment( SwingConstants.LEFT );
// campo do nome do jogador
fieldNomeJogador = new JTextField( 15 );
fieldNomeJogador.setHorizontalAlignment( SwingConstants.LEFT );
// label do tema da jogada
temaJogada = new JLabel( "Escolha o tema:" );
temaJogada.setHorizontalAlignment( SwingConstants.LEFT );
// ComboBox do tema da jogada
temasJogada = new JComboBox<Object>( nomesTemas );
temasJogada.addItemListener( this );
temasJogada.setMaximumRowCount( 4 );
// configuração do painel central
painelCentro = new JPanel();
painelCentro.setLayout( gridDados );
painelCentro.setBackground( Color.lightGray );
painelCentro.add( temaJogada );
painelCentro.add( temasJogada );
painelCentro.add( nomeJogador );
painelCentro.add( fieldNomeJogador );
// painelCentro.add( som );
painelCentro.add(nivelDificuldade);
menuDificuldade = new JMenu("Nível de Dificuldade");
menuDificuldade.setBackground( Color.lightGray );
dificuldadeGroup = new ButtonGroup();
dificil = new JRadioButtonMenuItem("Difícil (6X6)");
dificil.setSelected(true);
dificil.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
jogoFacil = false;
nivelDificuldade.setText("Nível de dificuldade: DIFÍCIL");
nivelDificuldade.setForeground(Color.red);
}
});
facil = new JRadioButtonMenuItem("Fácil (4X4)");
facil.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
jogoFacil = true;
nivelDificuldade.setText("Nível de dificuldade: FÁCIL");
nivelDificuldade.setForeground(Color.blue);
}
});
dificuldadeGroup.add(dificil);
dificuldadeGroup.add(facil);
menuDificuldade.add(dificil);
menuDificuldade.add(facil);
barraMenu = new JMenuBar();
setJMenuBar(barraMenu);
barraMenu.setBackground( Color.lightGray );
barraMenu.add(menuDificuldade);
// imagem do rodapé
imagemRodape = new ImageIcon(getClass().getResource("/imagens/jogo/java.Gif.jpg"));
// texto do rodapé
desenvolvimento = new JLabel(
"Desenvolvido em Java por Rafael Barreto",
imagemRodape, SwingConstants.CENTER );
desenvolvimento.setFont( fonte10 );
// configuração do painel de rodapé
painelRodape = new JPanel();
painelRodape.setLayout( gridRodape );
painelRodape.setBackground( Color.white );
painelRodape.add( desenvolvimento );
// configuração do painel de dados (que possui o painel de cabeçalho,
// o painel central e o painel de botões
painelDados = new JPanel();
painelDados.setLayout( new BorderLayout( 10, 10 ));
painelDados.setBackground( Color.lightGray );
painelDados.add( painelCabecalho, BorderLayout.NORTH);
painelDados.add( painelCentro );
painelDados.add( painelBotoes, BorderLayout.SOUTH );
// configuração do container (que tem toda essa bagunça aí!!! =)
container = getContentPane();
container.setLayout( new BorderLayout( 5, 5 ) );
container.setBackground( Color.lightGray );
container.add( painelRodape, BorderLayout.SOUTH );
container.add( painelImagem, BorderLayout.WEST );
container.add( painelDados );
setSize( 550, 380 );
setVisible( true );
setResizable( false );
}
private void saidaPrograma(){
telaSaida.setText(
"tJogo da Memória - 2005nn"+
"tDesenvolvido por: Rafael José Barreton"+
"Cursando Ciência da Computação pela"+
"Universidade Presidente Antônio Carlos n"
);
JOptionPane.showMessageDialog(null, telaSaida,
"Informações sobre o Jogo", JOptionPane.PLAIN_MESSAGE);
System.exit( 0 );
}
public void actionPerformed( ActionEvent event ){
// se o evento for do botão sair
if ( event.getSource() == botaoSair ){
saidaPrograma();
}
// senão é do botão iniciar jogo
else if ( event.getSource() == botaoIniciarJogo ){
nomeObjJogador = fieldNomeJogador.getText();
objJogador = new Jogador( nomeObjJogador );
if(jogoFacil)
new TelaJogo( objJogador, indiceTema, 4 );
else
new TelaJogo( objJogador, indiceTema, 6 );
}
}
public void itemStateChanged( ItemEvent event ){
if ( event.getSource() == temasJogada ){
if ( event.getStateChange() == ItemEvent.SELECTED )
indiceTema = indiceTemas[ temasJogada.getSelectedIndex() ];
}
}
public static void main( String args[] ){
TelaUm application = new TelaUm();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
application.setLocationRelativeTo( null );
}
}
galera o erro é o seguinte, estou tentando usar o debug, mas ae aparece esse erro ( source not found)
e tb esta com outro erro
assim
Exception in thead “main” java.lang.NullpointException
at javax.swing.Image. (unknow souce)
at Jogo.TelaUm. (TelaUm. java:79)
at Jogo.TelaUm.main (TelaUm. java:278)
eu estou pensando q o erro é no diretória das pastas com as imagens q estou usando, eu inserir essa pasta imagens no projeto na pasta JRE do eclipse, se alguem puder ajudar ficarei mt grato… abraços a todos
Olá Rafa2012,
para o erro do icone coloque “…/caminho” , acredito que vá funcionar, mas caso não funcione utilize a classe
BufferedImage image = ImageIO.read(new File("../caminho"));
não deu certo amigo, tah dando um monte de tela assim, imagem anexada abaixo… se puder ajudar agradeço
http://img585.imageshack.us/img585/1659/imgegd.png
mais uma coisa, tenho q colocar a pasta imagens destro do projeto msm, ou posso passar ela como diretório, como eu passaria esse diretória só um exemplo… estou fazendo corretamente no código, n tenho noção de como fazer um diretório em java… abraços
acho q localizei o erro, o programa não localiza a imagem, não sei como passar o diretório, podem me dá um exemplo, algum artigo pra ler… obrigado
Então normalmente eu coloco dentro do projeto mesmo… não sei se é uma boa pratica ou não.
vc pode me dar um exemplo de como usar o diretorio, por favou se puder… agradeço desde jah
é só criar um pasta no dentro do projeto … por exemplo “icons” e a partir dai no código vc coloca:
BufferedImage image = ImageIO.read(new File("../projeto/icons/*.png"));
Assim irá funcionar.
é amigo tô desistindo o erro continua…
Exception in thread ?main? java.lang.NullPointerException
at javax.swing.ImageIcon.(Unknown Source)
at TelaUm.(TelaUm.java:79)
at TelaUm.main(TelaUm.java:282)
Linha 79 = imagemPainel = new ImageIcon(getClass().getResource(?/imagens/jogo/painel.gif?));
Linha 282 =TelaUm application = new TelaUm();
Cara vc tentou a API que eu disse no post em cima??
cara pra ser sincero tentei, mas não sei bem como usar o seu comando, onde colocar ele no meu código, vc pode me dá um exemplo de onde posso coloca-lo no meu código?
Mals dei uma olhada no docs e estou falando bobeira XD
saca só este link :
http://www.guj.com.br/java/5017-adicionar-imagem-em-um-jbutton