| Linux - Friheden til at programmere i Java: Version 0.7.20040516 - 2020-12-31 | ||
|---|---|---|
| forrige | Kapitel 11. Grafiske brugergrænseflader | næste |
Denne opgave kræver, at du har læstKapitel 6, Nedarvning ogKapitel 10, Appletter og grafik.
Lav matadorspillet om til at kunne vises grafisk i en applet. Der skal som minimum være en knap, som spiller en omgang.
Når du skal programmere, så vær systematisk, og del opgaven op i små delopgaver. Løs en delopgave ad gangen, og afprøv, at det fungerer, før du går videre.
Figur 11-15. Et grafisk matadorspil
{linuxbog:java:Nordfalk1215435.png}
Det er bedst at du bruger hovedet og kun ser på dem hvis du er gået i stå.
import java.awt.*;
import java.applet.*;
import java.util.*;
public class MatadorApplet extends Applet
{ //// objektvariabler:// Spiller sp1=new Spiller("Søren",50000,Color.green); //// opret spiller 1// Spiller sp2=new Spiller("Gitte",50000,Color.yellow); //// opret spiller 2// Vector felter=new Vector();
public MatadorApplet() //// eller "public void init()"// {
felter.addElement(new Start(5000));
felter.addElement(new Gade2("Gade 1",10000, 400,1000));
felter.addElement(new Gade2("Gade 2",10000, 400,1000)); ////... osv.//
Husk, at appletten først tegner noget, når initialiseringen er færdig, så hvis du f.eks. kører 20 runder i initialiseringen, tager det lang tid, førend systemet når til at kalde paint()!
import java.awt.*;
public class Felt
{
String navn;
Point position = new Point();
og definér metoden tegn(Graphics g) på Felt, der tegner feltets navn på positionen:
public void tegn(Graphics g)
{
g.setColor(Color.black);
g.drawString(navn,position.x,position.y);
}
Husk at importere java.awt.* øverst for at få adgang til Point- og Graphics-klassen.
Løb alle felterne igennem i init(), og sæt koordinaterne på felterne:
felter.addElement(new Gade2("Gade 8",20000,1100,2000));
felter.addElement(new Gade2("Gade 9",30000,1500,2200));
for (int i=0; i<felter.size(); i++)
{
double v = Math.PI*2*i/felter.size(); //// vinkel i radianer// Felt f = (Felt) felter.elementAt(i);
f.position = new Point(
100 + (int) (100*Math.cos(v)),
110 + (int) (100*Math.sin(v))
);
}
public void paint(Graphics g)
{
for (int i=0; i<felter.size(); i++)
{
Felt f = (Felt) felter.elementAt(i);
f.tegn(g);
}
En grund skal også have tegnet ejeren nedenunder, så den skal have en anderledes tegn(). Definér tegn() i Grund2. En gade skal også vise antallet af huse. Definér også tegn() i Gade2.