import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.applet.AudioClip;
public class JavaVijf extends Applet
implements ActionListener
{
private TextField passwordEdit,
xEdit,
yEdit,
breedteEdit,
hoogteEdit;
private Button autoButton;
private AudioClip sound,
sound2;
private int x,
y,
breedte,
hoogte;
private Color lightBlue = new Color(173, 216, 230);
private boolean unlocked = false,
showAuto = false;
public void init()
{
this.setBackground(Color.red);
setLayout(null);
autoButton = new Button("Toon auto");
passwordEdit = new TextField("");
xEdit = new TextField("");
yEdit = new TextField("");
breedteEdit = new TextField("");
hoogteEdit = new TextField("");
this.add(autoButton);
this.add(passwordEdit);
this.add(xEdit);
this.add(yEdit);
this.add(breedteEdit);
this.add(hoogteEdit);
autoButton .setVisible(false);
xEdit .setVisible(false);
yEdit .setVisible(false);
breedteEdit.setVisible(false);
hoogteEdit .setVisible(false);
autoButton .addActionListener(this);
passwordEdit.addActionListener(this);
autoButton .setBounds(390, 470, 100, 19);
passwordEdit.setBounds(200, 240, 100, 19);
xEdit .setBounds(10, 470, 80, 19);
yEdit .setBounds(100, 470, 80, 19);
breedteEdit .setBounds(190, 470, 80, 19);
hoogteEdit .setBounds(280, 470, 80, 19);
passwordEdit.setBackground(Color.yellow);
xEdit .setBackground(Color.orange);
yEdit .setBackground(Color.cyan);
breedteEdit .setBackground(Color.orange);
hoogteEdit .setBackground(Color.cyan);
passwordEdit.setEchoChar('*');
sound = getAudioClip(getDocumentBase(), "gong.au");
sound2 = getAudioClip(getDocumentBase(), "drip.au");
}
public void paint(Graphics pen)
{
if (unlocked)
{
pen.setColor(lightBlue);
// fill3DRect LIJKT beter te werken dan draw3DRect...
pen.fill3DRect(0, 0, 500, 500, true);
if (showAuto)
{
xEdit .setText("x=" + x);
yEdit .setText("y=" + y);
breedteEdit.setText("breedte=" + breedte);
hoogteEdit .setText("hoogte=" + hoogte);
pen.setColor(Color.magenta);
this.tekenAuto(pen, x, y, breedte, hoogte);
}
}
else
{
pen.setColor(Color.red);
// fill3DRect LIJKT beter te werken dan draw3DRect...
pen.fill3DRect(0, 0, 500, 500, true);
pen.setColor(Color.black);
pen.drawString("Typ a.u.b. het wachtwoord:", 180, 230);
pen.setColor(Color.lightGray);
pen.drawString("Het juiste wachtwoord is \"code\"!", 170, 280);
}
}
private void tekenAuto(Graphics pen, int x, int y, int breedte, int hoogte)
{
/* multiBreedte en multiHoogte zijn de kleinste hoogte en breedte die
* gebruikt gaan worden en als basis gaan dienen voor alle andere hoogtes
* en breedten (de "multipliers").
* De originele en aanbevolen verhouding (anders zijn de wielen niet meer
* rond maar ovaal) is:
* breedte : hoogte
* 6 : 5
* In dit geval was het niet meer mogelijk om de auto's een opschrift te
* geven, omdat alleen de hoogte en niet de breedte aangegeven kan worden.
*/
double multiBreedte = (double) breedte / 12.0;
double multiHoogte = (double) hoogte / 10.0;
// teken het bovenstuk
pen.drawLine((int) ((double) x + multiBreedte * 5.0), y, (int) ((double) x + multiBreedte * 3.0) , (int) ((double) y + multiHoogte * 4.0));
pen.drawLine((int) ((double) x + multiBreedte * 9.0), y, (int) ((double) x + multiBreedte * 11.0), (int) ((double) y + multiHoogte * 4.0));
pen.drawRect((int) ((double) x + multiBreedte * 5.0), y, (int) (multiBreedte * 4.0), (int) (multiHoogte * 4.0));
pen.fillRoundRect(x, (int) ((double) y + multiHoogte * 4.0), (int) (multiBreedte * 12.0), (int) (multiHoogte * 4.0), (int) multiBreedte, (int) multiHoogte);
// teken de wielen
this.tekenWiel(pen, (int) ((double) x + multiBreedte), (int) ((double) y + multiHoogte * 6.0), (int) (multiBreedte * 4.0), (int) (multiHoogte * 4.0));
this.tekenWiel(pen, (int) ((double) x + multiBreedte * 7.0), (int) ((double) y + multiHoogte * 6.0), (int) (multiBreedte * 4.0), (int) (multiHoogte * 4.0));
}
private void tekenWiel(Graphics pen, int x, int y, int breedte, int hoogte)
{
// bewaar de oude kleur om die later te kunnen herstellen
Color oudeKleur = pen.getColor();
// buitenste cirkel
pen.setColor(Color.black);
pen.fillOval(x, y, breedte, hoogte);
// binnenste cirkel
pen.setColor(Color.white);
pen.fillOval(x + breedte / 4, y + hoogte / 4, breedte / 2, hoogte / 2);
pen.setColor(oudeKleur);
}
public void actionPerformed(ActionEvent e)
{
Object sender = e.getSource();
if (sender == passwordEdit)
this.passwordEditAction();
else if (sender == autoButton)
this.autoButtonAction();
this.repaint();
}
private void passwordEditAction()
{
if (passwordEdit.getText().equals("code"))
{
unlocked = true;
passwordEdit.setVisible(false);
autoButton .setVisible(true);
this.setBackground(lightBlue);
this.repaint();
}
else
passwordEdit.setText("");
}
private void autoButtonAction()
{
showAuto = !showAuto;
xEdit .setVisible(showAuto);
yEdit .setVisible(showAuto);
breedteEdit.setVisible(showAuto);
hoogteEdit .setVisible(showAuto);
if (showAuto)
{
sound .play();
sound2.stop();
autoButton.setLabel("Verberg auto");
x = (int) (Math.random() * 500.0);
breedte = (int) (Math.random() * (500.0 - x));
y = (int) (Math.random() * 460.0);
hoogte = (int) (Math.random() * (460.0 - y));
}
else
{
sound .stop();
sound2.play();
autoButton.setLabel("Toon auto");
}
}
}