G
Guest
Gast
hallo
ich habe in java ein Spiel programmiert wo man bälle abschießen muss nun will ich aber anstatt des balles den ich mit g.fillOval() dargestellt habe ein jpg bild verwenden . jetzt habe ich aber das problem das wenn ich mit der maus auf das bild klicke es nicht mehr verschwindet und ich keine punkte dafür bekomme wie kann ich das programm ändern das die maus die koordinaten des bildes erkennt und als punkt wertet?
ich habe in java ein Spiel programmiert wo man bälle abschießen muss nun will ich aber anstatt des balles den ich mit g.fillOval() dargestellt habe ein jpg bild verwenden . jetzt habe ich aber das problem das wenn ich mit der maus auf das bild klicke es nicht mehr verschwindet und ich keine punkte dafür bekomme wie kann ich das programm ändern das die maus die koordinaten des bildes erkennt und als punkt wertet?
Code:
// Importieren der nötigen Pakete
import java.util.*;
import java.lang.Math;
import java.awt.event.*;
import java.awt.*;
import java.applet.*;
import java.awt.Image;
//______________________________________________________________________________________
// Ableiten der Klasse Spiel von der Klasse Applet
public class Spiel extends Applet implements MouseListener,ActionListener
{
//Objekt der Klasse Cusor wir definiert
Cursor c;
//booleanwerte weden gesetzt
boolean starten=false;
boolean zeit=false;
boolean treffer=false;
// Deklaration der Variablen
int punktx = 0;
int punkty = 0;
int groese = 0;
int x;
int y;
int schuss = 25;
int punkte2= 0;
int highscore=0;
int trefferbonus = 0;
int zeit1 = 60;
double punkte=90;
//Neuer Button wird definiert
Button los = new Button("Spiel starten");
//________________________________________________________________________________
// init - Methode wird beim Laden des Applets aufgerufen
public void init()
{
//layoutauswahl
setLayout(null);
// hintergrungfarbe wird festgelgt
setBackground (Color.LIGHT_GRAY);
// Button wird hinzugefügt
los.setBounds(260,570,100,50);
//adden des Buttons los
add(los);
// Mouselistener wird im container hinzugefügt
addMouseListener(this);
// actionlistener wird hinzugefügt
los.addActionListener(this);
// reminder wird gesetzt erinnert den Timer sich zu wiederholen
new reminder(1);
// reminder wird gesetzt erinnert den Timer sich zu wiederholen
new zeit(1);
//c wird ein cursor zugewiesen
c = new Cursor (Cursor.CROSSHAIR_CURSOR );
//cursor c wird gesetzt
this.setCursor (c);
//schriftart wird geändert
setFont( new Font( "Comic", Font.PLAIN, 15) );
//appletgrösse wird gesetzt
setSize(490,490);
}
//_____________________________________________________________________________
// methode wird aufgerufen wenn button gedrückt wurde
public void actionPerformed(ActionEvent e)
{
// punkte werden zurück gesetzt
punkte2 = 0;
// schüsse werden zurück gesetzt
schuss = 25;
// starten wird auf wahr gesetzt spiel beginnt
starten = true;
//die repaint methode wird aufgerufen um das Applet neu zuzeichen
repaint();
// zeit wird zurückgesetzt
zeit1 = 60;
}
//_____________________________________________________________________________
//mausevents
public void mouseDragged(MouseEvent e){};
public void mouseReleased(MouseEvent e){};
public void mouseEntered(MouseEvent e){};
public void mouseExited(MouseEvent e){};
public void mouseClicked(MouseEvent e){};
// wird aufgerufen wenn maus gedrückt wurde
public void mousePressed(MouseEvent e)
{
// falls starten auf war gesetzt ist
if (starten==true)
{
// x und y wird in der Status zeile ausgegeben
getAppletContext().showStatus("x= " + x + " y= "+ y);
//x wird dem wert der maus-x-achse überwiesen
x=e.getX();
//y wird dem wert der maus-y-achse überwiesen
y=e.getY();
//wenn getroffen wurde
if (x>=punktx && x<=punktx+groese && y>=punkty && y<=punkty+groese)
{
//die methode repaint wird aufgerufen um das Applet neu zuzeichnen
repaint();
// treffer wird auf true gesetzt
treffer = true;
//punkte werden berechnet
punkte2=(int)punkte/groese+punkte2;
// bonus + 1
trefferbonus++;
//wenn bonus = 4
if (trefferbonus == 4)
{
// + 2 schüsse mehr
schuss = schuss+2;
// bonus wird zurückgesetzt
trefferbonus = 0;
}
}
// wenn nicht getroffen wurde
if(x<punktx || y<punkty )
{
// zeit wird auf wahr gesetzt ermöglicht neues kästchen zeichnen
zeit = true;
//die repaint methode wird aufgerufen um das applet neu zuzeichnen
repaint();
// punkte werden abgezogen
punkte2 = punkte2 - 3;
//bonus wird zurückgesetzt
trefferbonus = 0;
}
//nach einem mausklick wird ein schuss abgezogen
schuss--;
}
};
//_____________________________________________________________________________
//die zeitklasse wird definiert
public class zeit
{
// timer wird als objekt der klasse timer definiert
Timer timer;
public zeit(int seconds)
{
// timer wird als objekt zur klasse Timer hinzugeügt
timer = new Timer();
// timer zeitplan wird definiert mit 1 sec
timer.schedule(new zeitverlauf(), 1000);
}
// die klasse zeitaufgabe wird abgeleitet von timertask wird definiert
class zeitverlauf extends TimerTask
{
// die klasse run wird definiert
public void run()
{
// 1 (1 sekunde) wird von der zeit abgezogen
zeit1=zeit1-1;
new zeit(1);
// paint methode wird aufgerufen
repaint();
}
}
}
//_____________________________________________________________________________
public class reminder
{
Timer timer;
public reminder(int seconds)
{
timer = new Timer();
timer.schedule(new Zeit(), 2000);
}
class Zeit extends TimerTask
{
public void run()
{
// paint methode wird aufgerufen um das applet neu zuzeichnen
repaint();
new reminder(1);
// zeit wird wahr gesetzt neues kästchen kann gezeichnet werden
zeit = true;
// treffer wird false gesetzt
treffer = false;
}
}
}
//_____________________________________________________________________________
//aufrufen der Start methode mit übergabe von graphics
public void Start(Graphics g)
{
// es wird gepüft ob das spiel gestartet wurde
if (starten==true)
{
// es werden zaufallszahlen generiert
double random_x = Math.random()*(390);
double random_y = Math.random()*(390)+100;
double random_groese = Math.random()*45+10;
// zufallszahl random 3 wird länge zugewiesen und in int umgewandelt
groese=(int)random_groese;
// zufallszahl random 1 wird punkt x zugewiesen und in int umgewandelt
punktx=(int) random_x;
// zufallszahl random 2 wird punkt y zugewiesen und in int umgewandelt
punkty=(int) random_y;
}
// wenn schüsse oder zeit gleich 0 werden
if (schuss<=0 || zeit1<=0)
{
// Game over wird ausgegen
g.drawString("Game over",220,250);
// erreichte punkte werden ausgegen
g.drawString("Du hast " +punkte2+" Punkte",175,265);
// starten wird auf falsch gesetzt spiel stoppt
starten=false;
// zeit wird zurückgesetzt auf 60 sek
zeit1 = 60;
// neustart des spiels beim klick auf dem Button
los.enable(true);
// wenn punkte 2 grösser oder gleich highscore ist
if (punkte2>=highscore)
{
// highscore wird der wert der variable punkte 2 zugewiesen
highscore=punkte2 ;
// highscore wird angezeigt
g.drawString("NEW RECORD" ,215,280);
}
}
// zeit wird false gesetzt um neues aufrufen von der methode Start zu verhindern
zeit = false;
}
//__________________________________________________________________________________
public void paint(Graphics g)
{
//Spielfeld unten
g.drawLine(500,5,500,550);
//Spielfeld links
g.drawLine(5,5,500,5);
//Spielfeld rechts
g.drawLine(5,550,500,550);
//Spielfeld oben
g.drawLine(5,5,5,550);
//Rechteck unten
g.drawRect(5,555,495,100);
//regelkasten
g.drawRect(505,5,200,500);
// aktueller highscore wird ausgegeben
g.drawString("Highscore: " + highscore ,10,580 );
// aktuelle punktzahl wird ausgegeben
g.drawString("Punkte: "+punkte2,160,580);
// die zeit wird ausgegeben
g.drawString("Zeit: "+ zeit1+" sek",160,610);
// anzahl der verbleibenden schüsse wird ausgegeben
g.drawString("Schuss: "+schuss,10,610);
Image img = getImage(getCodeBase(),"images.jpg");
// wenn zeit = true dann
if (zeit)
{
// die methode abfrage wird aufgerufen
Start(g);
}
// wenn getoffen wurde wird treffer auf false gesetzt
if (treffer == false)
g.drawImage(img,punktx,punkty,this);
}
}
[quote][/quote]