Spiel frage zu bilder in java einbinden

Status
Nicht offen für weitere Antworten.
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?

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]
 

Leroy42

Top Contributor
Ohne mich jetzt durch deinen Code durchzuarbeiten, versuche mal einzugrenzen, wo es hapert.

Als Kandidat dafür fällt mir
Code:
    //wenn getroffen wurde 
         if (x>=punktx && x<=punktx+groese && y>=punkty && y<=punkty+groese)
in deinem Listener ins Auge. Gib doch mal vor der If-Abfrage die relevanten Daten
(x, y, punktx/y und groese (Wo ist das zweite s :shock: )) via System.out aus und schau
ob die stimmen können.
 
G

Guest

Gast
die maus muss doch die größe vom bild erkennen
macht sie aber nicht
Code:
 //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 ich das bild einfüge brauch ich doch nur 2 parameter angeben die x,y koordinate aber wie kann die maus erkenn wie groß das bild ist auf das ich klicke um zu entscheiden ob es ein treffer ist oder nicht .
 

Leroy42

Top Contributor
Anonymous hat gesagt.:
die maus muss doch die größe vom bild erkennen
:shock: Wie soll denn das gehen, zumindest meine Maus hat keine Aufgen :shock:

Im Ernst: Die Maus, bzw. die GUI die die Mauskoordinaten erfasst und an den Listener schickt,
hat keinen Schimmer davon, was der Pixel darstellt, die sich gerade an den Koordinaten der
Maus befinden, insbesondere hat sie keine Ahnung davon, daß er Teil eines Bildes ist.
Sie könnte höchstens die Farbe des Pixels bestimmen, hat aber auch dazu keine Lust.

Du mußt selbst bestimmen, wie groß dein Bild ist und rufst dazu die Methoden
image.getWidth() und image.getHeight() auf
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K JavaFX Memory Spiel AWT, Swing, JavaFX & SWT 16
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
Zeppi Swing Button soll Spiel zurücksetzen AWT, Swing, JavaFX & SWT 5
J Spiel mit Java AWT, Swing, JavaFX & SWT 9
MABY Swing Spiel mit 2 AWT, Swing, JavaFX & SWT 4
O Focus zwischen Chat und Spiel wechselns AWT, Swing, JavaFX & SWT 3
C Benutzername in GUI eingeben und nach Spiel neues Fenster Benutzername wieder anzeigen AWT, Swing, JavaFX & SWT 1
Y Simple Spiel ploten AWT, Swing, JavaFX & SWT 2
H Swing Spiel: Maexchen: method cannot be applied to given types AWT, Swing, JavaFX & SWT 3
C Im Spiel wie auf Pfeiltasten reagieren? AWT, Swing, JavaFX & SWT 3
X Snake - Spiel AWT, Swing, JavaFX & SWT 27
U Event Handling JButton Actionevent: starte Spiel AWT, Swing, JavaFX & SWT 4
B Tastensteuerung im Spiel AWT, Swing, JavaFX & SWT 5
N Hilfe bei Memory-Spiel AWT, Swing, JavaFX & SWT 18
T 2D-Grafik Im 2D Spiel zoomen AWT, Swing, JavaFX & SWT 6
S Swing Spiel Richtig/Falsch implementieren AWT, Swing, JavaFX & SWT 5
J 2D-Grafik Textbasiertes 2D Spiel, jedes Zeichen manipulierbar AWT, Swing, JavaFX & SWT 7
K Swing Spiel flackert sehr häufig AWT, Swing, JavaFX & SWT 2
J Spieleprogramm als "richtiges" Spiel starten AWT, Swing, JavaFX & SWT 19
B Swing Memory-Spiel AWT, Swing, JavaFX & SWT 2
M Swing Memory Spiel in Eclipse AWT, Swing, JavaFX & SWT 5
D Probleme mit Spiel-Engine. Komische Fehler. AWT, Swing, JavaFX & SWT 5
B spiel atomica mit swing AWT, Swing, JavaFX & SWT 6
G Problem mit Swing bei einem Sudoku Spiel AWT, Swing, JavaFX & SWT 2
M Problem bei Schiffeversenken-Spiel AWT, Swing, JavaFX & SWT 4
G Spielfeld für ein Spiel erstellen, wie am besten? AWT, Swing, JavaFX & SWT 4
G Swing Frage zu jDialog AWT, Swing, JavaFX & SWT 7
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
MJannek Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24

Ähnliche Java Themen

Neue Themen


Oben