Spiel neustarten

enzo545

Mitglied
Hallo zusammen, ;)
ich versuche gerade in meinem Spiel eine neustart Funktion einzubauen.
Folgendes überlegt.:
Die run() Methode läuft solange der Player != 0 Leben hat, also erstelle ich einfach eine neue Methode restart() und setze da alle Variablen, die noch mit dem Spiel zu tun haben (sprich: Leben, Score...), auf ihren Anfangswert.
Die Methode restart() lass ich dann durch die Taste Enter ausführen.
Ergebnis ???:L = Funktioniert ZUM TEIL, WEIL...
- die Bilder bzw. Objekte nicht erneut gezeichnet werden wenn ich das erste mal verliere, somit bleibt das letzte vorhandene Bild stehen.
Wieso es zum TEIL funktioniert? Nun ja, ich habe mir bei der Kollision zwischen Objekt und Spieler immer eine Ausgabe in der Console geben lassen. Wenn ich Enter drücke und ein wenig warte bis Spieler und Objekt kollidieren kommt wieder eine Ausgabe...Habe auch versucht die paint() und init() Methode erneut ausführen lassen wenn ich Enter drücke (nur so zum ausprobieren; schadet ja nicht).

Hier ist meine Main Klasse...Ab der Zeile 299 geht es los mit der restart()
P.S: Bitte keine kommentare über mein Code. Ich weiß, dass es unsauber ist ecc. das höre ich schon von meinen Lehrer :lol: , aber immerhin läuft es. Ich möchte die Probleme lösen die mich am meisten beschäftigen und danach kommen die Feinheiten...

DANKE IM VORAUS LEUTE...ICH HOFFE IHR KÖNNT HELFEN ;(



Java:
import java.awt.*;
import java.applet.*;
import java.io.File;
import java.io.IOException;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Panel;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;

import javax.imageio.ImageIO;

/** 
  *
  * Run away!
  *
  * @ version 3.0 vom 07.02.2012
  * @ V. De Nicola
  */

public class Main extends Applet implements Runnable 
{

  private static final long serialVersionUID = -8110438439236694170L;
  private Thread th = new Thread(this);
  public Player player;
  public Ball ball;
  public Ball_x ball_x;
  public AudioClip ac;
  public Timer_C tc;
  public MP3 mp3;
  public Highscore hs;
  
  // Variablen initialisiert für die Schnelligkeit der Bewegungen
  int playerLeftSpeed = -50;
  int playerRightSpeed = 50;
  int playerUpSpeed = 5;
  int playerDownSpeed = 10;

  // Bewegungsvariablen
  public boolean playerMoveLeft;
  public boolean playerMoveRight;
  public boolean playerMoveUp;
  public boolean playerMoveDown;

  // Variable zum Flackern verhindern
  private Image dbImage;
  private Graphics dbg;
  
  //Sprung & Appletvariable
  int appletsize_x = 656; // Größe des Applets in x - Richtung
  int appletsize_y = 527; // Größe des Applets in y - Richtung
  int terrain = 418;      // Im Spiel "fester Boden" (vom Kopf aus)
  int jumpline = 300;     // Nicht zu überschreitende Grenze für Sprung
  int radius_player = 9;         // Kopf vom stickman für wenn er aus dem applet läuft
  
  //Hintergrundbild_Spiel
  Image hintergrund;
  Image gameover;
  Image startbild;
  Image flamme;
   
  //Deklaration der Bälle
  private Ball firstball;     // Refferenz auf den roten Ball
  private Ball secondball;      // Refferenz auf den blauen Ball
  private Ball thirdball;
  private Ball_x fourthball;
  
  int flagge_enter = 0;			//Enter
  boolean menue = true;		//Variable um Menü anzeigen zu lassen
  boolean pause = false;		//Variable um Spiel pausieren 
  boolean move_x = true;		//Hindernisse starten lassen nach bestimmter Punktzahl
  // Ende Attribute

    public void init()
  {     
    player = new Player(9, 250, 418);   //Player erstellen
    tc = new Timer_C(); //Timer von der Klasse erstellen
    
    firstball = new Ball (390, -1000, 5, 6, player);
    secondball = new Ball (400, -40, 1, 7, player);
    thirdball = new Ball (540, -60, 1, 9, player);
    fourthball = new Ball_x (-60, 410, 2,  player);
    
    // Verweis auf das Bild anlegen
    hintergrund = getImage(getCodeBase(), "hintergrund.gif");
    gameover = getImage(getCodeBase(), "gameover.gif");
    startbild = getImage(getCodeBase(), "startbild.gif");
    flamme = getImage(getCodeBase(), "flammen2.png");
    
    //Hintergrundbild wird schon vorbereitet
    prepareImage(hintergrund, this);
    prepareImage(gameover, this);
    prepareImage(startbild, this);
    prepareImage(flamme, this);
  } 
  
    // Anfang Methoden
  	public void start()
  	{ 		
  		if(player.lives != 0 )
  		{
  		    Timer_C.main(null);
  		}
  	}
  
    public void run ()
    { 	
       Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
    	 
      while(player.lives != 0)
       {   
	     	  firstball.move();
	          repaint();
	                 
	           //Schwierigkeitsstufe erhöhen durch punktestand
	           if (player.score >= 10)
	                 {
	                  secondball.move();    
	                 }
	           if (player.score >= 50)
	                 {
	                  thirdball.move();
	                 }
	       
	          // move player
	          if(playerMoveLeft)
	          {
	            player.moveX(playerLeftSpeed);
	          }
	           if(playerMoveRight)
	          {
	            player.moveX(playerRightSpeed);
	          }
	          if (playerMoveUp)
	          {
	            player.moveY(playerUpSpeed);
	          }
	          if(playerMoveDown)
	          {
	            player.moveYDown(playerDownSpeed);
	          }
	          
	          //Grenzen gesetzt für das überschreiten des Applet und Sprung
	          //X
	          if(player.x_pos > appletsize_x + radius_player  ) 
	          {
	            player.x_pos = 660;
	          }
	          else if(player.x_pos < 0 - radius_player  )
	          {
	            player.x_pos = -4;
	          }
	          
	          //SPRUNG
	          if (player.y_pos > terrain) //Y
	          {
	              player.y_pos = terrain ; 
	          }
	          else if(player.y_pos < 0)
	          {
	        	  player.y_pos = 0;
	          }
	          
	         /* if (player.y_pos < jumpline)
	          {
	            do
	            {
	              player.y_pos++ ;
	            }
	            while (player.y_pos < jumpline);
	          }*/
	  
	          if (player.y_pos < terrain)
	          {
	            do
	            {
	              player.y_pos++;
	            }
	            while (player.y_pos > terrain);
	            
	            //geschwindigkeit in der luft -zum bewegen- verringern
	            playerLeftSpeed = -4;
	            playerRightSpeed = 4;
	            
	          }
	          else
	          {
	            playerLeftSpeed = -7;
	            playerRightSpeed = 7;
	          }
	          
	          repaint();
	    	        
	          if (player.score >= 5 && move_x == true)
	          {
	                fourthball.movex();
	                
	            if (fourthball.pos_x == 686)
	            {
	              //move_x = false;
	              fourthball.pos_x = -30;
	            }
	            
	          }
	  
	          try
	          {
	            Thread.sleep(10);
	          }
	          catch (InterruptedException ex)
	          {
	            // do nothing
	          }
	  
	          Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
	          
       		}
       }  
   
    //Belegung der Tasten durch Aktionen
	public boolean keyDown(Event e, int key)
    {
	        if(key == Event.LEFT)
		        {
		          playerMoveLeft = true;
		          player.playerWalkLeft(true);
		        }
	        else if(key == Event.RIGHT)
		        {
	        	  playerMoveRight = true;
	        	  player.playerWalkRight(true);
		        }
	        else if (key == Event.UP)
		        {
		           playerMoveUp = true;
		        }
	        else if (key == Event.DOWN)
		        {
		           playerMoveDown = true;
		        }
	        if(key == Event.ENTER && flagge_enter == 0)
		        {
	        	   th.start();
	        	   menue = false;
	        	   flagge_enter = 1;
		        }
	        if(key == Event.ESCAPE)
		        {
	        		newgame();
	        		System.out.println("Bin da!");
		        }
		        
	        return false;
    }

    public boolean keyUp(Event e, int key)
    {  
    
        if(key == Event.LEFT)
	        {
	          playerMoveLeft = false;
	          player.playerWalkLeft(false);
	        }
        else if(key == Event.RIGHT)
	        {
	          playerMoveRight = false;
	          player.playerWalkRight(false);
	        }
        if (key == Event.UP)
	        {
	          playerMoveUp = false;
	        }
        else if (key == Event.DOWN)
	        {
	           playerMoveDown = false;
	        }
        
        
        return true;
    }
 
    public void Menue(Graphics g)
	{    
	   Graphics2D g1 = (Graphics2D) g;
	   g1.setColor  (Color.BLACK);
	   
	   g.drawImage(startbild, 0, 0, this);
	   g1.setFont (new Font ("Comic Sans MS", Font.BOLD, 18));
	   g1.drawString ("ENTER = STARTEN", 195, 255); 
	   g1.drawString ("ESCAPE = SCHLIEßEN", 165, 330);   
	       
	}
    
    public void restart()
    {
    	//Punktestand und Leben zurücksezten
    	player.lives = 3;
    	player.score = 0;
    	
    	//Position des Stickman zurücksetzen
    	player.x_pos = 250;
    	player.y_pos = 418;
    	
    	//Boolische Variablen auf ihren anfangswert zurücksetzen
    	menue = true;
    	move_x = true;	
   
    	run();
    	paint(dbg);
    	init();
    }
    
    //Methode zum Flackern des Spiels zu verhindern
    public void update (Graphics g)
    {
        if (dbImage == null)
	        {
	          ....
	        }
    }
   
    //Zeichnen der Figur
    public void paint (Graphics g)
    {
    	    Graphics2D g1 = (Graphics2D) g;	 
    	    
    	    Menue(g1);
    	    
    	    if(menue!=true)
    	    { 
		        //Hintergrundbild zeichnen
		    	g1.drawImage(hintergrund, 0, 0, this);
		        
		        //Stickman zeichnen
		        player.drawPlayer(g1);
		        
		        g1.setColor  (Color.WHITE);
		        g1.setFont (new Font ("", Font.PLAIN, 12));
		        //Punktestand
		        g1.drawString ("SCORE: " +player.getScore(), 575, 25);
		        
		        //Lebenspunkte
		        g1.drawString ("LIVES: " +player.getLives(), 20, 25);
		        
		        // Zeichnen der Bälle
		        firstball.DrawBall(g);
    	    }
    	
	        if (player.score >= 5)
            {
	        	secondball.DrawBall(g); 
	        	fourthball.DrawBall(g);   
            }
      if (player.score >= 50)
            {
    	  		thirdball.DrawBall(g);
            }
	        
	        
    	//Jet-Pack Flammen
	        if(playerMoveUp == true)
	        {
	        	try{ 
	                flamme =ImageIO.read(new File("flammen2.png")); 
	            } 
	            catch(IOException eio){ 
	                System.out.print(eio.toString()); 
	            }
	    	  g1.drawImage(flamme, player.x_pos+9, player.y_pos+30, this); 
	    	  g1.drawImage(flamme, player.x_pos-18, player.y_pos+30, this);
	        }
	        
       if (player.lives <= 0)
       {
           Graphics2D g2 = (Graphics2D) g;
           g2.setColor  (Color.BLACK);
           g2.setFont (new Font ("Comic Sans MS", Font.PLAIN, 18));
           
           //Game Over Bild
           g2.drawImage(gameover, 0, 0, this);
           
           //High Score wird angezeigt
           g2.drawString ("SCORE: " +player.getScore(), 520, 280);

       }
       
    }
        
    // Ende Methoden
}

IM ANHANG NOCH EIN BILD VOM SPIEL :toll: :applaus:
 
Zuletzt bearbeitet:

Gossi

Bekanntes Mitglied
Java:
public void restart()
    {
    	//Punktestand und Leben zurücksezten
    	player.lives = 3;
    	player.score = 0;
    	
    	//Position des Stickman zurücksetzen
    	player.x_pos = 250;
    	player.y_pos = 418;
    	
    	//Boolische Variablen auf ihren anfangswert zurücksetzen
    	menue = true;
    	move_x = true;	
   
    	run();
    	paint(dbg);
    	init();
    }
Versuche es anstelle von run mal mit new Thread(this).start();
run() ist völlig verkehrt, immer nen extra Thread mit start, sonst bringt dir die Methode nix ^^
 

Quaxli

Top Contributor
Ich finde das Konzept mit dem Thread (= GameLoop) neu starten nicht gut.
Nachdem da drin ja auch der repaint-Aufruf ist, wird Dein Bild nicht mehr neu gezeichnet, sobald Du "tot gegangen" bist. :)

Ich verwende in meinen Spielchen i. d. R. eine Methode zum Rücksetzen aller Variablen. Diese wird bei jedem (Neu-)Start des Spiels aufgerufen - auch beim ersten Mal.
Im GameLoop selbst entscheide ich über einen boolean welche Methoden ausgeführt werden.

Wird gerade der Startbildschirm angezeigt, d. h. das Spiel an sich ist gar nicht gestartet, dann reduziert das den GameLoop auf repaint und Thread.sleep(..).
Wenn das Spiel (neu) gestartet wurde greift auch die restliche Logik.

In (Pseudo-)Code sieht das ungefähr so aus:

Java:
while(frame.isVisible){

   if(gameStarted){

     fragDieTastureingabeAb();
     bewegeAlles();
     prüfeAlles();  //Kollisionen, Verlassen des sichtbaren Bereichts, etc. etc.

   }

   Thread.sleep(10);  //try-catch spare ich mir gerade
    repaint();

}
 

Fu3L

Top Contributor
Ich hab generell eine Instanz vom Typ Game. Wenn ein Spiel läuft ist es ungleich null, sonst wohl. Ist Game ungleich null wird durch mein GameLoop das Spiel zum updaten angeregt.
Will ich das Spiel neu starten, reicht ein simples game = new Game(bla bla); und alles funktioniert wunderbar^^
 

enzo545

Mitglied
Hey leutz,
vielen dank für eure megaa Antworten.
Ich hab mal beschlossen, dass ich Gossis vorschlag nehmen würde...Habs angewendet und das Spiel startet auch wieder neu. Alles TIP TOP!! :applaus:
Trotzdem danke nochmal bei allen anderen. Ihr seid die bescht :toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Spiel nach Abfrage beenden oder neustarten Spiele- und Multimedia-Programmierung 1
xFearofdarkness Feinde überlappen sich in Java Spiel Spiele- und Multimedia-Programmierung 3
ItundMathe1994 TicTacToe Spiel programmieren Spiele- und Multimedia-Programmierung 2
JEP1 Hilfe bei Spiel Spiele- und Multimedia-Programmierung 1
P Pokemon Spiel Funktioniert nicht ? Spiele- und Multimedia-Programmierung 3
Leon.tr3x Mein erstes Programm/Spiel Spiele- und Multimedia-Programmierung 10
O Texas Hold'em Poker als Online-Spiel mit Freunden Spiele- und Multimedia-Programmierung 5
Drachenbauer Speicher-Tool für ein Spiel schreiben Spiele- und Multimedia-Programmierung 13
M Spiel Mühle-Programmierung Java Spiele- und Multimedia-Programmierung 9
Excess Spiel abzugeben Spiele- und Multimedia-Programmierung 1
I Superhelden - Spiel Spiele- und Multimedia-Programmierung 14
E Hauptmenü und Spiel ???? Spiele- und Multimedia-Programmierung 2
L Sound in Java Spiel Spiele- und Multimedia-Programmierung 5
R Interaktives Spiel Spiele- und Multimedia-Programmierung 5
L Spiel im Editor testen Spiele- und Multimedia-Programmierung 4
Jackii dispatchUncaughtException in Quiz Spiel mit GUI Layout Spiele- und Multimedia-Programmierung 6
D Textbasiertes Spiel Spiele- und Multimedia-Programmierung 8
K Android Spiel Programmieren Spiele- und Multimedia-Programmierung 6
L BrickBreaker Spiel Spiele- und Multimedia-Programmierung 3
A Spiel Figur ansprechen und bewegen Spiele- und Multimedia-Programmierung 3
it_is_all Dialogbox im Spiel - Text in Blöcke aufteilen Spiele- und Multimedia-Programmierung 4
F Koordinieren und Essen von Snake - Spiel Spiele- und Multimedia-Programmierung 14
G Entity Verwaltung in einem 2D Spiel Spiele- und Multimedia-Programmierung 1
E Möchte Spiel Programmieren Spiele- und Multimedia-Programmierung 7
S Connect6 Spiel - Code in ei Spiele- und Multimedia-Programmierung 2
G Welten Generierung 2D Spiel Spiele- und Multimedia-Programmierung 4
G Java 2D Spiel mit LWJGL verbinden Spiele- und Multimedia-Programmierung 1
N Problem mit 2D Spiel Spiele- und Multimedia-Programmierung 17
T Probleme bei "Pixel-Fighting"-Spiel: Unausgewogene Mannschaften??? Spiele- und Multimedia-Programmierung 4
R Pong Spiel Problem Spiele- und Multimedia-Programmierung 1
L Coordinate Space JavaFX 2d Spiel Spiele- und Multimedia-Programmierung 0
C Vier Gewinnt Spiel Programmiertipp Spiele- und Multimedia-Programmierung 11
N Jump and run Spiel - wo anfangen / weitermachen? Spiele- und Multimedia-Programmierung 11
K Spiel zum zuordnen von Dienstgraden und Dienstgradabzeichen Spiele- und Multimedia-Programmierung 5
M Textbasiertes Spiel programmieren Spiele- und Multimedia-Programmierung 4
T 2d-Spiel Licht Spiele- und Multimedia-Programmierung 5
S Jump 'n' Run-Spiel Kollisionserkennung Spiele- und Multimedia-Programmierung 3
T Spiel rendern Spiele- und Multimedia-Programmierung 2
Grevak Sounds im Spiel Spiele- und Multimedia-Programmierung 5
B Fehlerhafte Mob Bewegungen in Tower Defense Spiel Spiele- und Multimedia-Programmierung 2
F Spiel ähnlich wie SimCity/o.ä programmieren Spiele- und Multimedia-Programmierung 5
X Erklärung zu einem Tic Tac Toe Spiel Spiele- und Multimedia-Programmierung 1
I Spectator Modus für Spiel ähnlich zu Terraria Spiele- und Multimedia-Programmierung 8
I Textbasiertes Spiel - Umsetzungsfrage & Schleifen Problem Spiele- und Multimedia-Programmierung 26
M Kollisions abfrage bei 3D spiel? Spiele- und Multimedia-Programmierung 12
D JAVA Basiertes Spiel aus dem Internet in eigenem Client laden Spiele- und Multimedia-Programmierung 1
P [Spiel]Welche Bilder sind gleich Spiele- und Multimedia-Programmierung 2
E GUI zum Spiel hinzufügen Spiele- und Multimedia-Programmierung 19
S 2D Spiel - Physics Spiele- und Multimedia-Programmierung 16
S 2D Spiel "Der Sprung" Spiele- und Multimedia-Programmierung 7
A 2D Spiel ohne Tiles Spiele- und Multimedia-Programmierung 10
V welche vorgehensweise beforzieht ihr bei einfachem Quizz Spiel ? Spiele- und Multimedia-Programmierung 4
S Quaxli's Heli Spiel läuft nicht nach Plan Spiele- und Multimedia-Programmierung 2
G Methode sleepen während das Spiel weiterläuft Spiele- und Multimedia-Programmierung 3
T Spiel Überprüfung Spiele- und Multimedia-Programmierung 3
P Spiel laggt nach unbestimmter Zeit tierisch. Spiele- und Multimedia-Programmierung 27
S Hilfe bei Spiel Spiele- und Multimedia-Programmierung 6
B Hauptmenü für Spiel Spiele- und Multimedia-Programmierung 1
W Spiel ist langsam/laggt Spiele- und Multimedia-Programmierung 18
J Ascii Spiel Spiele- und Multimedia-Programmierung 1
Androbin Mein Spiel will sich nicht zeichnen lassen !!! Spiele- und Multimedia-Programmierung 7
O Vollständige Musik in Spiel einbauen (wav - Format) Spiele- und Multimedia-Programmierung 8
Y Quiz Spiel Spiele- und Multimedia-Programmierung 1
J Conways Spiel des Lebens nachprogrammiert Spiele- und Multimedia-Programmierung 1
B Spiel Programmieren, die Anfänge Spiele- und Multimedia-Programmierung 6
D [OpenGL] Spiel in der Art von Age of Empires Spiele- und Multimedia-Programmierung 4
lord239123 suche Graphiker für ein Pokemon-Spiel Spiele- und Multimedia-Programmierung 6
S Spiel installeren lassen und organisieren Spiele- und Multimedia-Programmierung 3
J Lichtupdate in tile-basiertem Spiel Spiele- und Multimedia-Programmierung 4
P Erstes Spiel (Strategie) Spiele- und Multimedia-Programmierung 31
J Mein erstes Spiel [Spielevorstellung] Spiele- und Multimedia-Programmierung 2
Bananabert Spiel Renderer Images und Strings Spiele- und Multimedia-Programmierung 4
N Spiel Menü error ! Spiele- und Multimedia-Programmierung 5
S Anfangsmenü mit Spiel verknüpfen Spiele- und Multimedia-Programmierung 16
S Spiel ruckelt trotz 50 fps Spiele- und Multimedia-Programmierung 16
D Spiel-Bilddaten auswerten Spiele- und Multimedia-Programmierung 7
Creylon [LWJGL] Spiel Exportieren Spiele- und Multimedia-Programmierung 2
L Hilfe bei Klassendesign für Spiel Spiele- und Multimedia-Programmierung 2
Devil0s Spiel laggt trotz 90 FPS (bei der Anzeige) Spiele- und Multimedia-Programmierung 9
N Webanwendung als eine Art Spiel Spiele- und Multimedia-Programmierung 8
L Korrekte Darstellung von Wasser in 2D Spiel Spiele- und Multimedia-Programmierung 4
F Ideen für spiel Spiele- und Multimedia-Programmierung 4
J wohin mit der Logik des Spiel Spiele- und Multimedia-Programmierung 2
R Experimente mit Quaxlis Spiel Spiele- und Multimedia-Programmierung 12
W Spiel-Grundlagen selbst austüfteln: Kollisionen? Spiele- und Multimedia-Programmierung 3
Kenan89 Java 2D Spiel Spiele- und Multimedia-Programmierung 39
M Automaten Spiel Spiele- und Multimedia-Programmierung 27
J Tic tac toe spiel Neustart Spiele- und Multimedia-Programmierung 5
S 2D Spiel im Vollbild langsamer als im Fenster Spiele- und Multimedia-Programmierung 11
A TicTacToe Spiel Spiele- und Multimedia-Programmierung 3
S Verbesserungvorschläge Spiel Z Spiele- und Multimedia-Programmierung 31
S Spiel abbrechen Spiele- und Multimedia-Programmierung 3
J Greenfoot "Little Crab" Spiel Erweiterungen Spiele- und Multimedia-Programmierung 6
P Spiel HUD erstellen Spiele- und Multimedia-Programmierung 6
S Aufbau von Klassen für Spiel Spiele- und Multimedia-Programmierung 13
A Grundlagensuche für Spiel Spiele- und Multimedia-Programmierung 8
V Basisprinzipien Breakout-Spiel Spiele- und Multimedia-Programmierung 8
E Spiel startet nach exportieren nicht Spiele- und Multimedia-Programmierung 7
Gossi Erweiterung von Quaxlis Heli-Spiel Spiele- und Multimedia-Programmierung 16
M Hilfe bei Spiel Programmierung Spiele- und Multimedia-Programmierung 4

Ähnliche Java Themen

Neue Themen


Oben