Olá, criei este jogo infatil para trabalho final de semestre:
import java.awt.event.;
import java.applet.;
import java.awt.;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javax.swing.;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
//criação da classe Trabalho Prático Final
public class TPFinal extends JFrame implements ActionListener {
//declaração das variáveis e objectos
private static JButton bSom, bSom2, bSom3, bVerificar;
private static JComboBox cbcombo, cbcombo2, cbcombo3;
private static JLabel lImage1, lImage2, lImage3;
private JLabel lCategoria, lCategoria2, lCategoria3;
int SizeX = 600;
int SizeY = 600;
static int numRandom1 = 0, numRandom2 = 0, numRandom3 = 0;
static String[] animais = new String[98];
static String[] transportes = new String[49];
static String[] instrumentos = new String[56];
static int inicioArrays[] = {0,7,14,21,28,35};
String linha = “”;
static String categoriaEscolhida = “Animais”;
static String cbVazia = " ";
static String categoria = “”;
static String caminho_imagem1 = “”;
static String caminho_imagem2 = “”;
static String caminho_imagem3 = “”;
static String caminho_som1 = “”;
static String caminho_som2 = “”;
static String caminho_som3 = “”;
static String opcaoCorrectaA = “”;
static String opcaoCorrectaB = “”;
static String opcaoCorrectaC = “”;
String correctas = “”;
int numeroCorrectas = 0;
static int j = 0;
static AudioClip Som;
static AudioClip Som2;
static AudioClip Som3;
public TPFinal(String título) {
super(título);
JMenuBar barra = new JMenuBar();
setJMenuBar(barra);
JMenu categorias = new JMenu("Categorias");
JMenu opcoes = new JMenu ("Opções");
barra.add(categorias);
barra.add(opcoes);
JMenuItem fechar = new JMenuItem("Fechar jogo");
fechar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
dispose();
}
});
opcoes.add(fechar);
JMenuItem novoJogo = new JMenuItem("Novo jogo");
novoJogo.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
novoJogo();
}
}
);
opcoes.add(novoJogo);
JMenuItem ajuda = new JMenuItem("Ajuda");
ajuda.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null, "1 - O jogo admite apenas um jogador" + "\n 2 - O objectivo do jogo é conseguir identificar o animal, transporte ou instrumento (dependendo da categoria escolhida) e fazê-lo corresponder a um dos nomes apresentados à frente" + "\n 3 - A primeira fase do jogo é escolher a categoria pretendida. Poderá escolher uma de três categorias: Animais, Transportes ou Instrumentos" + "\n 4 - Seguidamente irá iniciar o jogo" + "\n 5 - Terá de corresponder um nome a cada imagem/som e só após a associação deverá clicar-se no botão ?Verificar?" + "\n 6 - Se não forem associados correctamente todos os elementos presentes no jogo serão indicados os que foram falhados para que o jogador não volte a errar" + "\n 7 - Nesse momento, poderá fechar o jogo ou iniciar um novo" + "\n 8 - A escolha da categoria é feita na barra de menu");
}
}
);
opcoes.add(ajuda);
final JRadioButtonMenuItem animais = new JRadioButtonMenuItem("Animais");
animais.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
categoriaEscolhida = "Animais";
lCategoria2.setText("Animais");
novoJogo();
}
});
categorias.add(animais);
final JRadioButtonMenuItem transportes = new JRadioButtonMenuItem("Transportes");
transportes.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
categoriaEscolhida = "Transportes";
lCategoria2.setText("Transportes");
novoJogo();
}
});
categorias.add(transportes);
final JRadioButtonMenuItem instrumentos = new JRadioButtonMenuItem("Instrumentos");
instrumentos.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
categoriaEscolhida = "Instrumentos";
lCategoria2.setText("Instrumentos");
novoJogo();
}
});
categorias.add(instrumentos);
ButtonGroup bg1 = new ButtonGroup();
bg1.add(animais);
bg1.add(transportes);
bg1.add(instrumentos);
animais.setSelected(true);
// Adiciona o menu à barra de menus
barra.add(categorias);
barra.add(opcoes);
}
public static void main(String[] args) {
TPFinal jogo = new TPFinal("Jogo Infantil de Sandra Lourenço e Solange Gomes");
jogo.setSize(600, 600);
jogo.setVisible(true);
}
private void init() {
lCategoria = new JLabel("Categoria: ");
lCategoria2 = new JLabel("Animais");
bSom = new JButton("Som");
bSom2 = new JButton("Som");
bSom3 = new JButton("Som");
bVerificar = new JButton("Verificar");
cbcombo = new JComboBox();
cbcombo2 = new JComboBox();
cbcombo3 = new JComboBox();
lImage1 = new JLabel("", new ImageIcon("imagens/border.jpg"), JLabel.CENTER);
lImage2 = new JLabel("", new ImageIcon("imagens/border.jpg"), JLabel.CENTER);
lImage3 = new JLabel("", new ImageIcon("imagens/border.jpg"), JLabel.CENTER);
cbcombo.addItem(cbVazia);
cbcombo2.addItem(cbVazia);
cbcombo3.addItem(cbVazia);
setLayout(new BorderLayout());
JPanel pNorte = new JPanel(new FlowLayout());
JPanel pCentro = new JPanel(new FlowLayout());
JPanel pSul = new JPanel(new FlowLayout());
pNorte.add(lCategoria);
pNorte.add(lCategoria2);
add(pNorte, BorderLayout.NORTH);
pCentro.add(lImage1);
pCentro.add(bSom);
pCentro.add(cbcombo);
pCentro.add(lImage2);
pCentro.add(bSom2);
pCentro.add(cbcombo2);
pCentro.add(lImage3);
pCentro.add(bSom3);
pCentro.add(cbcombo3);
add(pCentro, BorderLayout.CENTER);
pSul.add(bVerificar);
add(pSul, BorderLayout.SOUTH);
bVerificar.addActionListener(this);
bSom.addActionListener(this);
bSom2.addActionListener(this);
bSom3.addActionListener(this);
//definir as propriedades dos componentes
bSom.setEnabled(false);
bSom2.setEnabled(false);
bSom3.setEnabled(false);
bVerificar.setEnabled(false);
cbcombo.setEnabled(false);
cbcombo2.setEnabled(false);
cbcombo3.setEnabled(false);
try{
File fich = new File("tpfinal.txt");
FileInputStream canalInputFich = new FileInputStream(fich);
InputStreamReader canalInput = new InputStreamReader(canalInputFich);
BufferedReader ficheiro = new BufferedReader(canalInput);
//ler o ficheiro e guardar as categorias nos arrays
for( int i = 0; i<42; i++) {
linha = ficheiro.readLine();
animais[i] = linha;
}
for( int i = 0; i<42; i++) {
linha = ficheiro.readLine();
transportes[i] = linha;
}
for( int i = 0; i<42; i++) {
linha = ficheiro.readLine();
instrumentos[i] = linha;
}
} catch (FileNotFoundException e) {
JOptionPane.showMessageDialog(null, "Erro! Ficheiro dados.txt não encontrado!");
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Erro! Causa desconhecida!");
e.printStackTrace();
}
}
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == bVerificar) {
verificar();
}
if (ae.getSource() == bSom) {
Som.play();
}
if (ae.getSource() == bSom2) {
Som2.play();
}
if (ae.getSource() == bSom3) {
Som3.play();
}
}
public static void novoJogo() {
cbcombo.removeAllItems();
cbcombo2.removeAllItems();
cbcombo3.removeAllItems();
cbcombo.addItem(cbVazia);
cbcombo2.addItem(cbVazia);
cbcombo3.addItem(cbVazia);
if(categoriaEscolhida.equalsIgnoreCase("Animais")) {
//primeiro animal
numRandom1 = (int)(14.0 * Math.random()) + 1;
j = inicioArrays[numRandom1-1];
categoria = animais[j];
caminho_imagem1 = animais[j+1];
caminho_som1 = animais[j+2];
try{
Som = Applet.newAudioClip(new URL("file:"+caminho_som1));
}
catch (MalformedURLException mfe){
}
caminho_som1 = animais[j+2];
cbcombo.addItem(animais[j+3]);
cbcombo.addItem(animais[j+4]);
cbcombo.addItem(animais[j+5]);
opcaoCorrectaA = animais[j+6];
//segundo animal
numRandom2 = (int)(14.0 * Math.random()) + 1;
while( numRandom2 == numRandom1) {
numRandom2 = (int)(14.0 * Math.random()) + 1;
}
j = inicioArrays[numRandom2-1];
categoria = animais[j];
caminho_imagem2 = animais[j+1];
caminho_som2 = animais[j+2];
try{
Som2 = Applet.newAudioClip(new URL("file:"+caminho_som2));
}
catch (MalformedURLException mfe){
}
cbcombo2.addItem(animais[j+3]);
cbcombo2.addItem(animais[j+4]);
cbcombo2.addItem(animais[j+5]);
opcaoCorrectaB = animais[j+6];
//terceiro animal
numRandom3 = (int)(14.0 * Math.random()) + 1;
while( numRandom3 == numRandom1 || numRandom3 == numRandom2) {
numRandom3 = (int)(14.0 * Math.random()) + 1;
}
j = inicioArrays[numRandom3-1];
categoria = animais[j];
caminho_imagem3 = animais[j+1];
caminho_som3 = animais[j+2];
try{
Som3 = Applet.newAudioClip(new URL("file:"+caminho_som3));
}
catch (MalformedURLException mfe){
}
cbcombo3.addItem(animais[j+3]);
cbcombo3.addItem(animais[j+4]);
cbcombo3.addItem(animais[j+5]);
opcaoCorrectaC = animais[j+6];
} else
if(categoriaEscolhida.equalsIgnoreCase("Transportes")) {
//primeiro transporte
numRandom1 = (int)(7.0 * Math.random()) + 1;
j = inicioArrays[numRandom1-1];
categoria = transportes[j];
caminho_imagem1 = transportes[j+1];
caminho_som1 = transportes[j+2];
try{
Som = Applet.newAudioClip(new URL("file:"+caminho_som1));
}
catch (MalformedURLException mfe){
}
cbcombo.addItem(transportes[j+3]);
cbcombo.addItem(transportes[j+4]);
cbcombo.addItem(transportes[j+5]);
opcaoCorrectaA = transportes[j+6];
//segundo transporte
numRandom2 = (int)(7.0 * Math.random()) + 1;
while( numRandom2 == numRandom1) {
numRandom2 = (int)(7.0 * Math.random()) + 1;
}
j = inicioArrays[numRandom2-1];
categoria = transportes[j];
caminho_imagem2 = transportes[j+1];
caminho_som2 = transportes[j+2];
try{
Som2 = Applet.newAudioClip(new URL("file:"+caminho_som2));
}
catch (MalformedURLException mfe){
}
cbcombo2.addItem(transportes[j+3]);
cbcombo2.addItem(transportes[j+4]);
cbcombo2.addItem(transportes[j+5]);
opcaoCorrectaB = transportes[j+6];
//terceiro transporte
numRandom3 = (int)(7.0 * Math.random()) + 1;
while( numRandom3 == numRandom1 || numRandom3 == numRandom2) {
numRandom3 = (int)(7.0 * Math.random()) + 1;
}
j = inicioArrays[numRandom3-1];
categoria = transportes[j];
caminho_imagem3 = transportes[j+1];
caminho_som3 = transportes[j+2];
try{
Som3 = Applet.newAudioClip(new URL("file:"+caminho_som3));
}
catch (MalformedURLException mfe){
}
cbcombo3.addItem(transportes[j+3]);
cbcombo3.addItem(transportes[j+4]);
cbcombo3.addItem(transportes[j+5]);
opcaoCorrectaC = transportes[j+6];
} else
if(categoriaEscolhida.equalsIgnoreCase("Instrumentos")) {
//primeiro instrumento
numRandom1 = (int)(8.0 * Math.random()) + 1;
j = inicioArrays[numRandom1-1];
categoria = instrumentos[j];
caminho_imagem1 = instrumentos[j+1];
caminho_som1 = instrumentos[j+2];
try{
Som = Applet.newAudioClip(new URL("file:"+caminho_som1));
}
catch (MalformedURLException mfe){
}
cbcombo.addItem(instrumentos[j+3]);
cbcombo.addItem(instrumentos[j+4]);
cbcombo.addItem(instrumentos[j+5]);
opcaoCorrectaA = instrumentos[j+6];
//segundo instrumento
numRandom2 = (int)(8.0 * Math.random()) + 1;
while( numRandom2 == numRandom1) {
numRandom2 = (int)(8.0 * Math.random()) + 1;
}
j = inicioArrays[numRandom2-1];
categoria = instrumentos[j];
caminho_imagem2 =instrumentos[j+1];
caminho_som2 = instrumentos[j+2];
try{
Som2 = Applet.newAudioClip(new URL("file:"+caminho_som2));
}
catch (MalformedURLException mfe){
}
cbcombo2.addItem(instrumentos[j+3]);
cbcombo2.addItem(instrumentos[j+4]);
cbcombo2.addItem(instrumentos[j+5]);
opcaoCorrectaB = instrumentos[j+6];
//terceiro instrumento
numRandom3 = (int)(8.0 * Math.random()) + 1;
while( numRandom3 == numRandom1 || numRandom3 == numRandom2) {
numRandom3 = (int)(8.0 * Math.random()) + 1;
}
j = inicioArrays[numRandom3-1];
categoria = instrumentos[j];
caminho_imagem3 = instrumentos[j+1];
caminho_som3 = instrumentos[j+2];
try{
Som3 = Applet.newAudioClip(new URL("file:"+caminho_som3));
}
catch (MalformedURLException mfe){
}
cbcombo3.addItem(instrumentos[j+3]);
cbcombo3.addItem(instrumentos[j+4]);
cbcombo3.addItem(instrumentos[j+5]);
opcaoCorrectaC = instrumentos[j+6];
}
//colocar as imagens
lImage1.setIcon(new ImageIcon(caminho_imagem1));
lImage2.setIcon(new ImageIcon(caminho_imagem2));
lImage3.setIcon(new ImageIcon(caminho_imagem3));
//activar os componentes
bSom.setEnabled(true);
bSom2.setEnabled(true);
bSom3.setEnabled(true);
bVerificar.setEnabled(true);
cbcombo.setEnabled(true);
cbcombo2.setEnabled(true);
cbcombo3.setEnabled(true);
}
public void verificar() {
correctas = "";
numeroCorrectas = 0;
if(cbcombo.getSelectedItem().equals(opcaoCorrectaA)) {
numeroCorrectas++;
correctas += opcaoCorrectaA + ", ";
}
if(cbcombo2.getSelectedItem().equals(opcaoCorrectaB)) {
numeroCorrectas++;
correctas += opcaoCorrectaB + ", ";
}
if(cbcombo3.getSelectedItem().equals(opcaoCorrectaC)) {
numeroCorrectas++;
correctas += opcaoCorrectaC + ", ";
}
if(numeroCorrectas == 0) {
JOptionPane.showMessageDialog(null, "Resultado: Não conseguiste acertar em nenhuma! Tenta outra vez!");
}
if(numeroCorrectas >= 1 && numeroCorrectas < 3) {
JOptionPane.showMessageDialog(null, ("Resultado:Acertaste em " + numeroCorrectas + " figuras! " + correctas));
}
if(numeroCorrectas == 3) {
JOptionPane.showMessageDialog(null,"Resultado:Parabéns! Acertaste em todas as figuras!");
}
}
}
No final, dá erro quando mando executar:
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at TPFinal$5.actionPerformed(TPFinal.java:98)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.JToggleButton$ToggleButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Como posso soluccionar este erro e conseguir executar o erro ?
Obrigada!


