import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.AudioClip;
public class sapo extends JApplet implements ActionListener, KeyListener {
Timer relogio;
Image imgFundo, imgSapo, imgNave;
int xSapo, ySapo;
int xNave, yNave;
static String fichFundo = "fundo.jpg";
static String fichSapo = "sapo.gif";
static String fichNave = "rocketship.gif";
static String fichSom = "plop.wav";
Panel p;
String mensagem;
int tempoMensagem;
Font fonteMsg;
AudioClip som;
PainelAnimacao meuPainel;
public void init() {
//Lê as imagens
imgFundo = getImage(getCodeBase(), fichFundo);
imgSapo = getImage(getCodeBase(), fichSapo);
imgNave = getImage(getCodeBase(), fichNave);
//Lê som
som = getAudioClip(getCodeBase(), fichSom);
p = new Panel(new GridLayout ( 1, 1 ));
getContentPane().add(p);
xSapo = 320;
ySapo = 420;
xNave = -25;
yNave = 50;
enableEvents(AWTEvent.KEY_EVENT_MASK);
p.addKeyListener(this);
tempoMensagem = 0;
fonteMsg = new Font("Serif",Font.BOLD, 24);
mensagem = "";
buildUI(getContentPane());
int atraso = 100; // em milissegundos
relogio = new Timer ( atraso, this );
relogio.setInitialDelay ( 0 );
relogio.setCoalesce ( true );
if (!relogio.isRunning()) {
relogio.start();
}
}
void buildUI(Container container) {
meuPainel = new PainelAnimacao();
container.add(meuPainel, BorderLayout.CENTER);
}
public void keyTyped ( KeyEvent e ) {
}
public void keyPressed ( KeyEvent e ) {
e.consume( );
switch(e.getKeyCode( )){
case KeyEvent.VK_LEFT :
xSapo -= 5;
break;
case KeyEvent.VK_RIGHT :
xSapo += 5;
break;
case KeyEvent.VK_DOWN :
ySapo += 5;
break;
case KeyEvent.VK_UP :
ySapo -= 5;
break;
}
repaint( );
}
public void keyReleased ( KeyEvent e ) {
}
public void actionPerformed(ActionEvent e)
{
xNave += 5;
if ( xNave > 650 ) xNave = -25;
// Verifica se o sapo está sobreposto à nave
int largNave = imgNave.getWidth (this);
int altNave = imgNave.getHeight (this);
int largSapo = imgSapo.getWidth (this);
int altSapo = imgSapo.getHeight (this);
Rectangle rSapo = new Rectangle ( xSapo, ySapo, largSapo, altSapo );
Rectangle rNave = new Rectangle ( xNave, yNave, largNave, altNave );
// Testa se algum canto do sapo está dentro da nave e vice-versa
if ( rNave.contains ( xSapo, ySapo ) ||
rNave.contains ( xSapo + largSapo, ySapo ) ||
rNave.contains ( xSapo, ySapo + altSapo ) ||
rNave.contains ( xSapo + largSapo, ySapo + altSapo ) ||
rSapo.contains ( xNave, yNave ) ||
rSapo.contains ( xNave + largNave, yNave ) ||
rSapo.contains ( xNave, yNave + altNave ) ||
rSapo.contains ( xNave + largNave, yNave + altNave )
) {
mensagem = "Acertei!!";
som.play();
// O sapo encontrou a nave, logo coloca a nave num ponto aleatório
xNave = -25;
yNave = (int)((imgFundo.getHeight(this) - imgSapo.getHeight(this)) *
Math.random());
tempoMensagem = 0;
} else
// Não apaga a mensagem durante 10 disparos do relógio
if ( ++tempoMensagem > 10 )
mensagem = "";
repaint ( );
}
class PainelAnimacao extends JPanel {
//Desenha o painel da animação
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(imgFundo, 0, 0, this);
g.drawImage(imgNave, xNave, yNave, this);
g.drawImage(imgSapo, xSapo, ySapo, this);
g.setFont(fonteMsg);
g.drawString ( mensagem, 200, 30 );
p.requestFocus ( );
}
}
}
E eu abro o applet e aparece-me um quadrado cinzento e mais nada. Eu suponho que o problema esteja aqui:
public void init() {
//Lê as imagens
imgFundo = getImage(getCodeBase(), fichFundo);
imgSapo = getImage(getCodeBase(), fichSapo);
imgNave = getImage(getCodeBase(), fichNave);
O método getCodeBase() returns um URL. Não percebo muito bem isso mas porque é que para obter uma imagem se haveria de precisar de um URL?
Não se pode simplesmente dizer o path para a imagem? Por exemplo C:\fundo e pronto?
Segundo esta pagina, "Class URL represents a Uniform Resource Locator, a pointer to a "resource" on the World Wide Web. A resource can be something as simple as a file or a directory" , por tanto, podia um URL ser C:\fundo ?
Alguém sabe como me ajudar?
Obrigado