-
07.09.11 10:43 #1
- Registriert seit
- Mar 2011
- Beiträge
- 12
Hallo,
ich hab grad ein Pfojekt, indem ich einen Frogger-Clon schreiben muss.
Soweit klappt alles, nur komm ich nicht auf den entscheidenden grünen Zweig, wie ich die Autos in verschiedenem Abstand wieder hole (oder überhaupt erstmal wiederhole).
Habt ihr vielleicht eine Idee, wie ich das wo anstellen kann?
Hier mein bisheriger Code:
Class Frogger:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
package Frogger; import java.applet.Applet; import java.applet.AudioClip; import java.awt.*; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.net.URL; public class Frogger extends Applet implements Runnable { /** * */ private static final long serialVersionUID = 1L; Thread th; static Image Car1, Car2, Car3, Car4, Frosch, Background, gameover, win; String Cars; private Image dbImage; //Doppelpuffer private Graphics dbGraphics; private Frog Frog; private Car Car; static AudioClip traffic; static AudioClip crash; static AudioClip quack; static AudioClip winsound; public void init() { setSize(801, 641); //Bilddaten laden setBackground(Color.black); Background = getImage(getCodeBase(), "Frogger/pictures/lane.gif"); Frosch = getImage(getCodeBase(), "Frogger/pictures/frog.gif"); Car1 = getImage(getCodeBase(), "Frogger/pictures/car10.gif"); Car2 = getImage(getCodeBase(), "Frogger/pictures/car11.gif"); Car3 = getImage(getCodeBase(), "Frogger/pictures/car12.gif"); Car4 = getImage(getCodeBase(), "Frogger/pictures/car13.gif"); gameover = getImage(getCodeBase(), "Frogger/pictures/gameover.gif"); win = getImage(getCodeBase(), "Frogger/pictures/win.gif"); //Sounddaten laden crash = getAudioClip(getCodeBase(), "Frogger/sounds/crash3.wav"); traffic = getAudioClip(getCodeBase(), "Frogger/sounds/traffic.wav"); quack = getAudioClip(getCodeBase(), "Frogger/sounds/frog.wav"); winsound = getAudioClip(getCodeBase(), "Frogger/sounds/applause.wav"); //Verbindungen zu anderen Klassen Frog = new Frog(); Car = new Car(); addKeyListener((KeyListener) Frog); } public void start() { th = new Thread(this); th.start(); } public void run() { Thread.currentThread().setPriority(Thread.MIN_PRIORITY); traffic.loop(); while(true) { Car.Car1_move(); Car.Car2_move(); Car.Car3_move(); Car.Car4_move(); try { repaint(); Thread.sleep(10); } catch(InterruptedException ex) { //do nothing } Thread.currentThread().setPriority(Thread.MAX_PRIORITY); } } public void stop() { th.stop(); } public void paint(Graphics g) { g.drawImage(dbImage, 0, 0, this); } public void update(Graphics g) { if (dbImage == null) { dbImage = createImage(this.size().width, this.size().height); dbGraphics = dbImage.getGraphics(); } if(Frog.goal() != true) { dbGraphics.drawImage(Background, 0, 40, this); dbGraphics.drawImage(Frosch, Frog.pos_x, Frog.pos_y, this); dbGraphics.drawImage(Car1, Car.x_pos_oben_1, Car.y_pos_oben_1, this); dbGraphics.drawImage(Car2, Car.x_pos_oben_2, Car.y_pos_oben_2, this); dbGraphics.drawImage(Car3, Car.x_pos_unten_1, Car.y_pos_unten_1, this); dbGraphics.drawImage(Car4, Car.x_pos_unten_2, Car.y_pos_unten_2, this); } else { dbGraphics.drawImage(win, 40, 40, this); } paint(g); } }
Class Frog:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
package Frogger; import java.applet.AudioClip; import java.awt.*; import java.awt.event.*; public class Frog implements KeyListener { public int pos_x = 359; //aktuelle koordinaten des Frosches public int pos_y = 573; public int speed_x; //geschwindigkeit des Frosches public int speed_y; private final int goal = 45; //Start und Ziel festlegen private final int start = 359; private final int up_out = 88; //Spielfeldbegrenzungen private final int down_out = 593; private final int left_out = 0; private final int right_out = 718; Car Car; public void keyPressed(KeyEvent e) { int key = e.getKeyCode(); if(key == KeyEvent.VK_UP) { Frogger.quack.play(); if((pos_y -= 48) <= up_out) { pos_y = 40; } else pos_y -= 48; } if(key == KeyEvent.VK_DOWN) { Frogger.quack.play(); if((pos_y += 48) >= down_out) { pos_y = 593; } else pos_y += 48; } if(key == KeyEvent.VK_RIGHT) { Frogger.quack.play(); if((pos_x += 83) >= right_out) { pos_x = 718; } else pos_x += 83; } if(key == KeyEvent.VK_LEFT) { Frogger.quack.play(); if((pos_x -= 83) <= left_out) { pos_x = 0; } else pos_x -= 83; } } public void keyReleased(KeyEvent e) { //do nothing } public void keyTyped(KeyEvent e) { //do nothing } public boolean goal() { if (pos_y <= 40) { Frogger.traffic.stop(); Frogger.winsound.play(); return true; } return false; } }
Class Car:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
package Frogger; import java.awt.Graphics; import java.awt.Image; import java.net.URL; public class Car { public int x_pos_oben_1 = -170; public int x_pos_oben_2 = -170; public int x_pos_unten_1 = 801; public int x_pos_unten_2 = 801; public int y_pos_oben_1 = 120; public int y_pos_oben_2 = 220; public int y_pos_unten_1 = 360; public int y_pos_unten_2 = 480; public int v_oben_1 = 4; public int v_oben_2 = 2; public int v_unten_1 = 3; public int v_unten_2 = 2; Image []car1; Image []car2; Image []car3; Image []car4; Image car1_move, car2_move, car3_move, car4_move; Image Auto; public void Car1_move() { x_pos_oben_1 += v_oben_1; } public void Car2_move() { x_pos_oben_2 += v_oben_2; } public void Car3_move() { x_pos_unten_1 -= v_unten_1; } public void Car4_move() { x_pos_unten_2 -= v_unten_2; } }
-
07.09.11 10:55 #2
Hi,
du hast doch die Positionskoordinaten von den Autos. Zudem hast du noch deine Breite vom Applet. Wenn deine Autos nun nach rechts fahren, dann musst du nur abfragen, ob die X-Position des Autos größer ist, als die Breite des Applets. Fahren die Autos nach links, fragst du ab, ob die X-Position+(Länge des Autos) kleiner ist als 0. (Dafür setzt du noch eine Variable 'width' in deiner Klasse 'Car'.)
Trifft einer der Fälle zu, dann setzt du die X-Position des Autos auf die X-Anfangsposition zurück und änderst u.U. die Y-Position.
ps.: Bitte verwende die Java-Code-Tags --> [ java]...[/java]
Gruß
FabioGeändert von Fabio Hellmann (07.09.11 um 10:57 Uhr)
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
07.09.11 10:57 #3
- Registriert seit
- Mar 2011
- Beiträge
- 12
ja, aber es soll ja nicht nur ein neues auto reinkommen, wenn eins rausgefahren is... das wär ein bisschen zu einfach... es sollten auch mal zwei hintereinander kommen usw. wie beim "echten" Frogger halt... Fühl mich grad ein bisschen dämlich
-
07.09.11 10:59 #4
Das kannst du doch per Zufallswert sage, ob 1, 2 oder 3 Autos gleichzeitig reinfahren sollen. Oder weißt du nicht wie du das umsetzen sollst?
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
07.09.11 11:02 #5
- Registriert seit
- Mar 2011
- Beiträge
- 12
genau das ist mein Problem
ich steh grad total aufm schlauch
-
07.09.11 11:17 #6
Vielleicht solltest du dir ersteinmal die grundlegenden Prinzipien von OOP näher ansehen. Da das dein größtes Problem momentan ist.
Hier zwei Links:
http://openbook.galileocomputing.de/oop/
http://www.galileocomputing.de/artikel/gp/artikelID-215
Als Biespiel habe ich dir auch deine Klasse 'Car' in OOP-Struktur gecoded:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
import java.awt.Image; public class Car { private static final int SPEED = 3; private final Image img; private final int width = 50; private final int height = 30; private int x; private int y; public Car(Image img) { this.img = img; } public void move() { x += SPEED; // wenn du nach links fahren willst --> nach rechts: x -= speed; } public void setX(int x) { this.x = x; } public int getX() { return x; } public void setY(int y) { this.y = y; } public int getY() { return y; } public int getWidth() { return width; } public int getHeight() { return height; } public Image getImg() { return img; } }
Wenn du dann so halbwegs verstanden hast wie OOP funktioniert und dich dann nochmal an dein Projekt setzt, dann wird es dir um einiges leichter fallen.
Gruß
FabioBitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
07.09.11 11:25 #7
- Registriert seit
- Mar 2011
- Beiträge
- 12
dankeschön, dann werd ich mich mal ranmachen
-
09.09.11 10:57 #8
- Registriert seit
- Mar 2011
- Beiträge
- 12
also, die Autos fahren jetzt so wie sie fahren sollen. Ich bräuchte vielleicht noch einen kleinen Tipp, was den Crash mit dem Frosch angeht... Wenn ich nur die beiden X-positionen (von den Autos und dem Frosch) mit if abrage passiert nichts, da werd ich wahrscheinlich noch die Höhe der beiden Objekte miteinbinden müssen, nur wie mach ich das?
-
09.09.11 11:48 #9
Du musst das folgendermaßen machen. Dein Auto und Frosch brauchen folgende Eigenschaften/Attribute:
Code java:1 2 3 4
private final int width = 50; // Breite muss angepasst werden private final int height = 30; // Höhe muss angepasst werden private int x; private int y;
Diese Werte übergibst du an ein Rectangle-Objekt.
So und die Klasse Rectangle stellt uns nun die Methode intersects zur Verfügung, mit der wir abfragen können, ob sich zwei Rectangle-Objekte überschneiden.
Code java:1 2 3
if(r.intersects(otherRectangle)) { // COLLISION! }
Mehr Infos zu den Methoden und zur Klasse Rectangle findest du hier.
Gruß
FabioBitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
09.09.11 12:19 #10
- Registriert seit
- Mar 2011
- Beiträge
- 12
suuuper, du bist mir ne große hilfe! So viel wollt ich gar nicht wissen
Aber vielen vielen dank!
-
09.09.11 12:33 #11
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?
ps.: Schreibst du das Programm für dich zu Hause oder für die Schule/Studium?Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
09.09.11 13:52 #12
- Registriert seit
- Mar 2011
- Beiträge
- 12
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
-
09.09.11 14:48 #13
Ah ok, alles kla. Erstes Lehrjahr. Anfänge mit Java. Mach doch mal ein Spiel.

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ß
FabioGeändert von Fabio Hellmann (09.09.11 um 14:54 Uhr)
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
-
12.09.11 16:24 #14
- Registriert seit
- Mar 2011
- Beiträge
- 12
Nur um sicher zu gehen das ich schon wieder was falsch gemacht hab, oder einfach grad nur zu doof bin
:
Classe Crash:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
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 =)):
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
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
-
12.09.11 22:12 #15
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. 
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:
Zudem implementierst du eine Methode 'getBounds()' in den beiden Objekten:Code java:1 2 3 4
private final int width = 50; private final int height = 20; private int x; private int y;
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ß
FabioGeändert von Fabio Hellmann (13.09.11 um 09:46 Uhr) Grund: Link zu OOP hinzugefügt
Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]
Tutorials:
Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
JAnimationPanel - Animationen für Swing/AWT
SWTRatingBar (Bewertungs-Composite) selbst programmieren
____________________________________________________________________________
Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.
Ähnliche Themen
-
Bitte hilfe bei meinem Screen Shot Programm PLS schnelle hilfe
Von Roma3 im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 12.02.08, 19:26 -
Hilfe: brauche hilfe beim Prüfen von Dateien ob sie Ordner sind
Von XBert im Forum C/C++Antworten: 0Letzter Beitrag: 07.08.07, 18:12 -
Hilfe! Flash Anfänger sucht schnelle Hilfe!
Von Skydiver2004 im Forum Flash PlattformAntworten: 2Letzter Beitrag: 02.12.04, 20:26 -
HILFE! Morgen Arbeit! Anfängerfragen..bitte um Hilfe!
Von Da Damn Cam im Forum Delphi, Kylix, PascalAntworten: 2Letzter Beitrag: 04.10.04, 15:24 -
HILFE Ich brauche ein wenig hilfe beim erstellen eines pobligen nickpage script
Von Buffy-Fan im Forum PHPAntworten: 8Letzter Beitrag: 14.06.04, 10:37



2Danke

Zitieren
Login





