Wie kann ich rausfinden ob sich zwei geometrische Figuren (2D) flächenmässig überschneiden?
Für Rechtecke hat die Klasse java.awt.Rectangle die Methode intersects(), die dir sagt, ob sich zwei Rechtecke überschneiden.
Falls es um eine Kollisionserkennung mit Kreis und Wänden geht, könntest du z.B. ein Rectangle erzeugen, in das dein Kreis genau reinpasst und dann über intersects() auf Kollision mit einer Wand prüfen.
So mein spiel ist eigentlich fertig. Die Grundfunktionen laufen
Ich werde noch ein paar Funktionen hinzufügen, aber im Grossen und Ganzen läuft es.
Ich wäre froh um Rückmeldungen, vor allem was Bugs anbelangt.
Jojo.
Ich werde noch nen Algorithmus einbauen, welcher dir ne Punktezahl gibt.
Diese wird abhängig sein von:
- Verbrauchte Zeit
- Länge des Lösungswegs
- Gebrauchte Felder (Je weniger Falsche Wege man genommen hat desto besser)
Das wird dann angezeigt, aber im Moment habe ich noch viel zu viel um den Ohren um an diesem Projekt weiterarbeiten zu können. Ich versuche das ganze aber vor Weihnachten fertig zu kriegen.
Zudem habe ich noch ein paar Programmier-Fehler entdeckt und möchte noch machen, dass man fortan keine Grössenbeschränkung mehr hat.
Hmmm
Ich hab in der letzten Zeit noch etwas Zeit zusammen gekratzt, in der ich das Labyrinth erweitert/verbessert habe. Aber jetzt habe ich einen ganz komischen Fehler...
Aus irgend einem Grund funktioniert das Spiel nicht mehr. Ich hab das ganze zwar ursprünglich mit Textpad geschrieben, aber um den Fehler zu suchen habe ich es dennoch mal in Eclipse geöffnet und siehe da... Die Zeile
Java Code:
avatar = new Avatar ();
Java Code:
avatar = new Avatar ();
Java Code:
avatar = new Avatar ();
macht einen Fehler. Das Objekt avatar gibt es bereits, der Klassenname ist richtig geschrieben, und bis jetzt hat diese Zeile nie ein Problem verursacht, zudem motzt oracle beim Compilieren kein bisschen.
Hat jemand ne Ahnung was der Fehler sein könnte?
Da ich keine Ahnung habe was den Fehler auslöst, habe ich auch keine Ahnung welche Codefragmente euch weiterhelfen würden. Ich lade darum mal einfach etwas rauf.
public void startGame(Level CurrentLevel, boolean playWithKeys)
{
avatar = new Avatar(); //Generates a new empty avatar
level = CurrentLevel; //Gets the level for the new game
previousTime = System.currentTimeMillis(); //saves the previous thime for fps calculating (first step is not precise)
playWithKeyboard = playWithKeys; //Sets if the game will be played with the keyboard (WASD + Arrows)
//gets the values for the avatar
Point startPoint = new Point(level.getQuadrant(0,0).getPosition().x, level.getQuadrant(0,0).getPosition().y);
int durchmesser = level.getQuadrant(0,0).getDurchmesser();
//Sets all needet propertys of the avatar
avatar.setPosition(startPoint.x + (durchmesser/2.0), startPoint.y + (durchmesser/2.0)); //Sets the avatar position on the center of the startfield
avatar.setRadius((int)(((durchmesser / 4.0) * 0.8) + 0.5)); //Sets the avatar radius so that is is smaler than the way
avatar.setColor(Color.BLUE); //Sets the avatar color
avatar.setVelocity(0, 0); //stops the movement of the avatar
}
public void startGame(Level CurrentLevel, boolean playWithKeys)
{
avatar = new Avatar(); //Generates a new empty avatar
level = CurrentLevel; //Gets the level for the new game
previousTime = System.currentTimeMillis(); //saves the previous thime for fps calculating (first step is not precise)
playWithKeyboard = playWithKeys; //Sets if the game will be played with the keyboard (WASD + Arrows)
//gets the values for the avatar
Point startPoint = new Point(level.getQuadrant(0,0).getPosition().x, level.getQuadrant(0,0).getPosition().y);
int durchmesser = level.getQuadrant(0,0).getDurchmesser();
//Sets all needet propertys of the avatar
avatar.setPosition(startPoint.x + (durchmesser/2.0), startPoint.y + (durchmesser/2.0)); //Sets the avatar position on the center of the startfield
avatar.setRadius((int)(((durchmesser / 4.0) * 0.8) + 0.5)); //Sets the avatar radius so that is is smaler than the way
avatar.setColor(Color.BLUE); //Sets the avatar color
avatar.setVelocity(0, 0); //stops the movement of the avatar
}
public void startGame(Level CurrentLevel, boolean playWithKeys)
{
avatar = new Avatar(); //Generates a new empty avatar
level = CurrentLevel; //Gets the level for the new game
previousTime = System.currentTimeMillis(); //saves the previous thime for fps calculating (first step is not precise)
playWithKeyboard = playWithKeys; //Sets if the game will be played with the keyboard (WASD + Arrows)
//gets the values for the avatar
Point startPoint = new Point(level.getQuadrant(0,0).getPosition().x, level.getQuadrant(0,0).getPosition().y);
int durchmesser = level.getQuadrant(0,0).getDurchmesser();
//Sets all needet propertys of the avatar
avatar.setPosition(startPoint.x + (durchmesser/2.0), startPoint.y + (durchmesser/2.0)); //Sets the avatar position on the center of the startfield
avatar.setRadius((int)(((durchmesser / 4.0) * 0.8) + 0.5)); //Sets the avatar radius so that is is smaler than the way
avatar.setColor(Color.BLUE); //Sets the avatar color
avatar.setVelocity(0, 0); //stops the movement of the avatar
}
Die obige Methode bereitet die GameEngine auf ein neues Spiel vor, und an der habe ich eigentlich nichts geändert.
Features:
- Generiert ein zufälliges, perfektes Labyrinth
- Grösse wird automatisch an Fenstergrösse angepasst
- Auflösung ist fast beliebig einstellbar (Begrenzung nur durch Fenstergrösse)
- Labyrinth kann gespielt (gelöst) werden mit Tastatur oder Maus
- Spielgeschwindigkeit ist einstellbar
- Anzeige der gebrauchten Zeit und der aktuellen fps
- Sobald das Labyrinth gelöst ist wird eine Punktes Zahl berechnet
- Eingebauter Lösungsalgorithmus kann das Labyrinth automatisch lösen
- Zeigt Informationen zum Labyrinth
Viel Spass beim ausprobieren.
Wer einen Bug findet soll ihn doch hier Posten.
Grüsse
Chiller
Zuletzt bearbeitet von Chiller am 13:41:16 26.12.2011, insgesamt 1-mal bearbeitet
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben. Sie können auf Beiträge in diesem Forum antworten. Sie können Ihre Beiträge in diesem Forum nicht bearbeiten. Sie können Ihre Beiträge in diesem Forum nicht löschen. Sie können an Umfragen in diesem Forum nicht mitmachen.
c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums
für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de
Werbekostenerstattung verdient werden kann.
Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de
enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt
(vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in
privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden.
Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere
übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.