Hilfe bei Frogger!

Keine Ursache. Mach ich doch gerne. :)
kannst du dann deinen Code oder am besten die Jar-Datei mit allem drum und dran (Bilder, etc.) posten, damit wir das Spiel auch mal spielen können? :D

ps.: Schreibst du das Programm für dich zu Hause oder für die Schule/Studium?
 
klar mach ich doch gerne, wird allerdings auch noch ein bisschen dauern, weil bis auf das Spiel noch nichts (highscore usw.) läuft!
Mach das in meiner Ausbildung ;)
 
Ah ok, alles kla. Erstes Lehrjahr. Anfänge mit Java. Mach doch mal ein Spiel. :D
Jaja ich kenn das, da wird man gerne mal ins kalte Wasser geworfen. Ich sahs an meinem ersten Programm mal eben 3 Monate. War aber auch ein wenig umfangreicher und durch die eh nur minderwertigen Erfahrungen war der Programmieraufwand gigantisch. :)

Dann noch viel Erfolg. Solltest du nochmal Fragen haben, dann poste sie einfach unter dem Thema wieder.

Gruß

Fabio
 
Zuletzt bearbeitet:
Nur um sicher zu gehen das ich schon wieder was falsch gemacht hab, oder einfach grad nur zu doof bin ^^:
Classe Crash:
Java:
package Frogger;

import java.awt.Rectangle ;

public class crash 
{
	private Frog Frog;
	private Street Street;
	
	
	public boolean crash() 
	{
		//Objekt "Frosch"
		Rectangle f = new Rectangle(Frog.pos_x, Frog.pos_y, Frog.frog_width, Frog.frog_height);
		
		//Objekt "Straße" (bzw. Auto)
		Rectangle s = new Rectangle(Street.CarPos, Street.y, Street.width, Street.height);
		
		if(f.intersects(s))
		{
			return true;
		}
		
		return false;
	}


}

die bewegung meiner Autos sieht jetzt so aus (ich gestehe, ist nicht komplett aus meinem Kopf entsprungen =)):

Java:
package Frogger;

import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Street 
{
	 int y = 0;
	 static Integer yc;
	 int v = 1;
	 int xStart = -170;
	 int xEnd = 972;
	 int xDistanceToNextCar = 500;
	 public int CarPos;
	 Random rnd = new Random();
	 public int height = 60;
	 public int width = 170;
	 
	 //Listen für Autopositionen und Bilder erstellen:
	 List<Integer> carsX = new ArrayList<Integer>();
	 List<Integer> carsTypes = new ArrayList<Integer>();
	 
	 
	public Street(int y, int v, int xStart, int xEnd)
	 {
		 this.y = y;
		 this.v = v;
		 this.xStart = xStart;
		 this.xEnd = xEnd;
	 }
	 
	 public void createCar() 
	 {
		 int type = rnd.nextInt(4);
		 if(v<0)
		 {
			 type += 4;
		 }
		 carsX.add(xStart);
		 carsTypes.add(type);
		 xDistanceToNextCar = rnd.nextInt(500) + 400;	//Mindestabstand zum nächsten Auto
	 }
	 
	 public void moveCars() 
	 {
		 if (carsX.size() == 0) 
		 {
			 createCar();
		 }
		 
		 for (int i=0; i < carsX.size(); i++) //Autos bewegen
		 {
			 int x = carsX.get(i);
			 x += v;
			 carsX.set(i, x);
			 CarPos = carsX.get(i);
		 }
		 if (carsX.size() > 0) 
		 {
			 int x = carsX.get(0);
			 if ((v < 0 && x < xEnd) || (v > 0 && x > xEnd)) 
			 {
				 carsX.remove(0);
				 carsTypes.remove(0);
			 }
		 }
		 
		 //wenn der mindestabstand erreicht ist, neues Auto fahren lassen
		 //Oben:
		 if ((v > 0) && ((carsX.get(carsX.size() -1) - xStart) > xDistanceToNextCar))
		 {
			 createCar();
		 }
		 //Unten:
		 else if((v < 0) && (xStart -(carsX.get(carsX.size() -1)) > xDistanceToNextCar))
		 {
			 createCar();
		 }
		 
	 }
	 
	 public int getY() 
	 {
		 return y;
	 }
	 
	 public List<Integer> getXCoordinates() 
	 {
		 return carsX;
	 }
		
	 public List<Integer> getCarsTypes() 
	 {
	 return carsTypes;
	 }
	 
		
}

nur crasht halt nix -.-
Ich habs schon wieder falsch gemacht stimmts? ;)

Lg, Jessy

P.S.: ne, zweites Jahr ;) und ich hab ja eigentlich bis ich hier geschrieben habe, keine Probleme gehabt ^^
 
Nur um sicher zu gehen das ich schon wieder was falsch gemacht hab, oder einfach grad nur zu doof bin ^^
Also das ist definitiv die falsche Einstellung! Jeder macht Fehler und lernt daraus was. Schließlich sind wir alle nur Menschen. ;)

Was deinen Code betrifft. Naja... Also... Wenn ich gemein wäre, würde ich behaupten, dass du deine Hausaufgaben nicht richtig gemacht hast (--> Artikel zu OOP durchlesen & verstehen). Da ich das aber nicht bin :) würde ich das mal darauf zurückschließen, dass ich die OOP selber ewig nicht so richtig verstanden habe. :D
Schau dir dazu ruhig auch nochmal meine Klasse ('Car') an. Vielleicht verstehst dus dadurch besser.

Das Problem bei deinem Code ist das, da du nicht mit Objekten - oder nur sehr wenigen - arbeitest, ist es schwieriger da eine gewisse Programmlogik dahinter zu bekommen. Was du für Objekte brauchst sind folgende:
  • FroggerWindow - erbt von der Klasse 'Applet' und implementiert 'KeyListener', um den Input abzufragen (Applet)
  • Frog - repräsentiert einen Frosch
  • Car - repräsentiert ein Auto
  • CollisionDetector - wird überwachen, ob zwei Objekte kollidieren
  • FroggerCore - ist der Thread, der die Objektpositionen aktuallisiert und den CollisionDetector fragt, ob der Frosch mit einem Auto kollidiert ist (optional, kann auch in FroggerWindow mit implementiert werden)

Die Objekte Frog und Car musst du - wie ich bereits schon einmal erwähnt habe - folgende Attribute geben:
Java:
private final int width = 50;
private final int height = 20;
private int x;
private int y;
Zudem implementierst du eine Methode 'getBounds()' in den beiden Objekten:
Java:
public Rectangle getBounds() {
   return new Rectangle(x, y, width, height);
}
Hier mal ein Überblick, was die beiden Objekte Frog und Car an Methoden brauchen:
  • moveLeft()
  • moveUp()
  • moveRight()
  • moveDown()
  • getBounds() : Rectangle
  • update()
  • draw(Graphics2D g)

Arbeite die paar Punkte ersteinmal ab. Und schau dir wiegesagt nochmal die OOP an (das ist wirklich das A und O bei dem Ganzen). Vielleicht findest du auch jemanden von deinen Kollegen, der dir das Prinzip näher bringen kann.
Wenn du das dann gemacht hast, reden wir weiter. ;)

// EDIT: Hier hab eich noch einen sehr guten Link zur OOP gefunden.

Gruß

Fabio
 
Zuletzt bearbeitet:
sooooo, spiel fertig, funktioniert soweit alles! *glücklich*
aaaber, ich möchte jetzt noch ein Menü drumrum machen, damit man zwischen Highscores, spiel usw. navigieren kann.

Ich hab mal angefangen das Menü mittels CardLayout innerhalb eines eigenen applets zu erstellen. Zwischen den einzelnen Menüpunkten navigieren funktioniert einwandfrei, doch kann ich das Spiel daraus nicht starten... geht das überhaupt?
 
Hi,
schön zu hören, dass du es geschafft hast! :)

Um so ein Menü zu machen, musst mittels Variablen in der Zeichenmethode hin und her switchen so zu sagen. Sprich, ungefähr so:
Java:
public void paintComponent(Graphics g) {
  if(menu1) {
    // Menü 1 zeichnen
  } else if(menu2) {
    // Menü 2 zeichnen
  } 
  // diese Menüpunkte beliebig oft...

  else if(play) {
    // Spiel zeichnen
  }
}
So würde ich es mir vorstellen das Menü zu zeichnen. Allerdings muss ich zugeben, dass ich so ein Menü bisher noch nicht gezeichnet habe.

Um das Spiel zu starten, musst du doch lediglich den SpielThread starten. Da ich aber nicht weiß, wie nun dein Code aussieht, ist es schwer dir dabei weiter zu helfen.

Gruß

Fabio
 
so, einfacher als gedacht is auch das Problem hinter mich gebracht *gg*

ich hab hier, auf der ersten Menüseite drei Buttons (hab das Menü in einem extra-applet mit CardLayout-panels, die selbst ein GridBagLayout haben)

Java:
gbc_start.gridx = 1;
		gbc_start.gridy = 1;
		gbc_start.fill = GridBagConstraints.HORIZONTAL;
		
		gbc_options.gridx = 1;
		gbc_options.gridy = 2;
		gbc_options.fill = GridBagConstraints.HORIZONTAL;
		gbc_options.insets = new Insets(5, 0, 5, 0);
		
		gbc_highscores.gridx = 1;
		gbc_highscores.gridy = 3;

nur bekomme ich die Buttons nicht an den unteren Bildschirmrand... sie sollen genauso wie jetzt untereinander erscheinen, nur jegliche ausrichtung ob SOUTH oder PAGE_END ****t nich... muss ich da vorher noch iwas machen?
 
Zuletzt bearbeitet von einem Moderator:
Probleme lösen sich, und neue kommen dazu... Hintergrundbilder in einem Panel anzeigen... Hab das ganze schon mit einem Label versucht, aber nix klappt...
P.S. mach das ganze nicht mit Swing, sonst hätt ich schon 1000 Lösungen gefunden...
 
Hi,
genau so ist es.^^
Also wenn man das mit Swing machen will, geht das natürlich wesentlich leichter, da das in Swing schon mit eingebunden wurde. In AWT muss man da noch selbst Hand anlegen. Sprich du musst dir eine eigene Klasse erstellen welche von Panel abgeleitet ist. An diese Klasse übergibst du dann via den Konstruktor oder eine Methode dein Image, das du setzen willst. Und zum Schluss musst du es dann in der 'public void paint(Graphics g)' Methode selber zeichnen.

Do it yourself. Heißt hier die Devise. ;)

Gruß

Fabio
 
Zurück