Moin. Bin seit etwa einer Woche am Lernen von Java und bin es bisher relativ langsam und entspannt angegangen. Heute wollte ich mal nach den ersten 2 Kapiteln des "Java ist auch eine Insel" Buches mal das kleine "ZZZnake" Programm umschreiben - es "dynamisch" machen.
Das heißt das ich die Positionen der Figuren durch eine Zufallszahl festsetzen möchte, die nach jedem generieren anders ist. Die Positionen werden durch die 2 Random Methoden "randomX" und "randomY" generiert. Mein bisheriger Code prüft, ob es bei den Positionen irgendwo eine Kollision gibt und soll die Positionen dann mal testweise ausgeben damit ich sehe ob da alles passt.
Das tut er aber leider nicht, das Programm bricht irgendwo ab.
/*
* Spiel: Ein Spieler (S) muss 3 Geldstuecke ($) einsammeln ohne von der Schlange (!) gebissen zu werden
*/
public class ZZZZnake {
public static void main(String[] args) {
GregorianCalendar gc = new GregorianCalendar();
int h = gc.get(Calendar.HOUR) + 12;
int m = gc.get(Calendar.MINUTE);
int s = gc.get(Calendar.SECOND);
JOptionPane.showMessageDialog(null, "ZZZZZZnake!");
int confirm = JOptionPane.showConfirmDialog(null,
"Spiel starten? | Systemzeit: " + h + ":" + m + ":" + s);
; // Confirmrequest
if (confirm == 0) // Ja = Spielablauf
{
positions();
} else // 1 oder 2 = Nein = Abbruch
{
System.exit(0);
}
}
public static void positions() {
Point playerpos = new Point();
Point schlangenpos = new Point();
Point geldpos1 = new Point();
Point geldpos2 = new Point();
Point geldpos3 = new Point();
playerpos.setLocation(randomX(), randomY());
schlangenpos.setLocation(randomX(), randomY());
geldpos1.setLocation(randomX(), randomY());
geldpos2.setLocation(randomX(), randomY());
geldpos3.setLocation(randomX(), randomY());
while (geldpos1.equals(playerpos) || geldpos2.equals(playerpos)
|| geldpos3.equals(playerpos) || playerpos.equals(schlangenpos)) {
geldpos1.setLocation(randomX(), randomY());
geldpos2.setLocation(randomX(), randomY());
geldpos3.setLocation(randomX(), randomY());
playerpos.setLocation(randomX(), randomY());
System.out.println(playerpos);
System.out.println(schlangenpos);
System.out.println(geldpos1);
System.out.println(geldpos2);
System.out.println(geldpos3);
}
}
public static int randomX() {
return (int) (Math.random() * 40);
}
public static int randomY() {
return (int) (Math.random() * 10);
}
}
Selbes Ergebnis, die Dialoge funktionieren, alles danach allerdings nicht mehr. Finde aber auch dass das genau das selbe ist was ich ja schon geschrieben hatte, halt nur mit anderen Lösungsansätzen.
Wir verwenden hier keinen Boolean, daher geht das ohne den Wert in der if Abfrage sowieso nicht. 0 ist in Java nicht immer false. Zumindest nicht bei der Funktion "JOptionPane".
Stimmt schon, habs eben auch nochmal getestet. Der zählt von rechts nach links: Abbruch - Nein - Ja
€: Manchmal könnt ich mir so dermaßen eine reinhauen... echt ey.
Ich hab ne while Schleife die überprüft ob die Koordinaten alle verschieden sind und nicht aufliegen. Die Ausgabe kommt ja nur wenn sie mindestens einmal irgendwo aufeinander gelegen haben.
So, nach diesem dummen Fehler meinerseits hab ich mich nochmal an das Minigame gemacht und nun Spielfeld, Figuren und Steuerung hinzugefügt.
Allerdings hab ich so das Gefühl dass das sehr unübersichtlich für andere wird, daher poste ich mal den Source von der Klasse mit den ganzen Methoden und ihr könnt ja mal drüberschauen. Übrigens hab ich sehr viele Probleme mit dem Rückgabewert. Ich würde gern für jede Aufgabe eine seperate Methode machen und das alles in der Main Methode zusammenfassen, allerdings geht das oftmals nicht, da ich bei einigen Funktionen eine Eingabe benötige um die Methode auszuführen, da ich das selbst so festgelegt habe. Naja, seht ihr ja dann schon selbst.
/*
* Spiel: Ein Spieler (S) muss 3 Geldstuecke ($) einsammeln ohne von der Schlange (!) gebissen zu werden
*/
public class ZZZZnake {
public static void main(String[] args) {
GregorianCalendar gc = new GregorianCalendar();
int h = gc.get(Calendar.HOUR) + 12;
int m = gc.get(Calendar.MINUTE);
int s = gc.get(Calendar.SECOND);
JOptionPane.showMessageDialog(null, "ZZZZZZnake!");
int confirm = JOptionPane.showConfirmDialog(null,
"Spiel starten? | Systemzeit: " + h + ":" + m + ":" + s);
; // Confirmrequest
if (confirm == 0) // Ja = Spielablauf
{
spielfeld(positions());
} else // 1 oder 2 = Nein = Abbruch
{
System.exit(0);
}
}
public static Point[] positions() {
Point playerpos = new Point();
Point schlangenpos = new Point();
Point geldpos1 = new Point();
Point geldpos2 = new Point();
Point geldpos3 = new Point();
Point[] positionen = new Point[5];
playerpos.setLocation(randomX(), randomY());
schlangenpos.setLocation(randomX(), randomY());
geldpos1.setLocation(randomX(), randomY());
geldpos2.setLocation(randomX(), randomY());
geldpos3.setLocation(randomX(), randomY());
while (geldpos1.equals(playerpos) || geldpos2.equals(playerpos) // Dynamisch
// und
// optional,
// falls
// Koordinatenkonflikte
// auftauchen.
|| geldpos3.equals(playerpos) || playerpos.equals(schlangenpos)) {
geldpos1.setLocation(randomX(), randomY());
geldpos2.setLocation(randomX(), randomY());
geldpos3.setLocation(randomX(), randomY());
playerpos.setLocation(randomX(), randomY());
}
// Alle Koordinaten in einem Array untergebracht damit man diese in
// anderen Methoden verwenden kann
positionen[0] = playerpos;
positionen[1] = schlangenpos;
positionen[2] = geldpos1;
positionen[3] = geldpos2;
positionen[4] = geldpos3;
return positionen;
}
public static int randomX() {
return (int) (Math.random() * 10); // Zufallszahl bis 10
}
public static int randomY() {
return (int) (Math.random() * 40); // Zufallszahl bis 40
}
public static void spielfeld(Point[] positionen) {
// Spielfeld: size = 40 * 10 ;
boolean beendet = false; // Noch ohne Funktion, keine Ahnung wie ich von
// einer anderen Methode den Rückgabewert in
// diese Methode noch zusaetzlich neben der
// Point Variable uebergeben soll damit das
// Spiel beim Einsammeln der 3 Goldstuecke
// stoppt.
while (beendet == false) {
for (int a = 0; a < 10; a++) {
for (int b = 0; b < 40; b++) {
Point xy = new Point(a, b);
if (positionen[0].equals(xy)) // pos0 = playerpos
{
System.out.print("S");
} else if (positionen[1].equals(xy)) { // pos1 = schlange
System.out.print("!");
} else if (positionen[2].equals(xy) // geld1, 2, 3
|| positionen[3].equals(xy)
|| positionen[4].equals(xy)) {
System.out.print("$");
} else {
System.out.print("*");
}
}
System.out.println();
}
steuerung(positionen);
}
}
public static Point[] steuerung(Point[] positionen) {
// Keys: Hoch - w / Runter - s / Rechts - d / Links - a
// Pausetaste: P
boolean pausiert = false;
switch (new Scanner(System.in).next().charAt(0)) {
case 'w':
positionen[0].x = Math.max(0, positionen[0].x - 1); // Spielerschritt
break;
case 's':
positionen[0].x = Math.min(9, positionen[0].x + 1);
break;
case 'a':
positionen[0].y = Math.max(0, positionen[0].y - 1);
break;
case 'd':
positionen[0].y = Math.min(39, positionen[0].y + 1);
break;
case 'p': // Hier komm ich überhaupt nicht weiter, der Dialog
// funktioniert aber der Scanner ist weiterhin aktiviert,
// wie soll ich den auch noch deaktivieren? (Er ist in einer
// anderen Methode)
pausiert = true;
if (pausiert == true) {
int pause = JOptionPane.showConfirmDialog(null,
"Spiel pausiert, fortfahren?", "ZZZnake!",
JOptionPane.YES_NO_OPTION);
if (pause == 1) {
int sicher = JOptionPane.showConfirmDialog(null,
"Moechtest du das Spiel wirklich beenden?",
"ZZZnake!", JOptionPane.YES_NO_OPTION);
if (sicher == 0) {
System.exit(0);
} else {
pausiert = false;
}
} else {
pausiert = false;
}
}
break;
}
if (positionen[0].x < positionen[1].x) { // Automatisierte
// Schlangenbewegung
positionen[1].x--;
} else if (positionen[0].x > positionen[1].x) {
positionen[1].x++;
} else if (positionen[0].y < positionen[1].y) {
positionen[1].y--;
} else if (positionen[0].y > positionen[1].y) {
positionen[1].y++;
}
if (positionen[0].equals(positionen[1])) {
System.out.print(positionen[0] + "" + positionen[1]); // Wenn
// Schlange
// = Player
JOptionPane.showMessageDialog(null,
"Die Schlange hat dich gefressen und du hast verloren!",
"ZZZnake", JOptionPane.CLOSED_OPTION);
System.exit(0);
}
return positionen; // weitergabe von den aktualisierten positionen für
// Generierung vom Spielfeld
}
}
OriginReallife.De NEU! DYNAMISCH! 09/08/2012 - Grand Theft Auto - 1 Replies Kommt einfach anschauen unbeschreiblich geil!
IP:176.9.46.83:5252
[H] Seite dynamisch gestalten 08/22/2012 - Web Development - 15 Replies Hallo,
ich habe ein Problem.
Undzwar will ich eine Seite dynamisch gestalten, sprich alles soll sich an die Auflösung des Monitors/der Fenstergröße stellen.
Momentan habe ich den top bereich mit dem header und den main bereich mit der navi und dem content.
Bis jetzt ist es ja so wie ich will auf meiner Auflösung (1680x1050) habe ja auch alles auf die Auflösung eingestellt, aber verkleinere ich das Fenster jetzt geht der breite header oben natürlich kleiner so das man am Ende nur die...
[JAVASCRIPT]Mehrere Select Formularfelder dynamisch..???? 08/18/2011 - Web Development - 3 Replies Hi Leutz,
hab ne Problem. Habe ca 8 Select Felder mit ungefähr 40 optionen.
Jetzt soll es so ablaufen das wenn man z.B. bei select feld eins eine Option gewählt hat, diese nichtmehr bei den anderen 7 zugänglich ist. Also deaktiviert oder unsichtbar gemacht wird. Habe schon einiges mit Vergleichsoperatoren probiert aber ist einfach zuviel code und klappt am Ende nicht.
Die selects hole ich mir mit dieser function:
JAVA
Gui grösse verändern (dynamisch) 09/21/2009 - AutoIt - 2 Replies hey ho
ich such das jetzt schon ne weile.. ich weis garned ob das überhaupt geht.. (vtl. geht das auch nur bei mir nicht und für alle andern isses so normal dass es nirgend steht xD)
ich möchte das fenster von meinem gui nach dem ich das programm ausgeführt habe verändern können (so wie halt bei den windowsfenstern dass dann das pfeilchen kommt welches auf bede seiten zeigt ..)
wie genau mand em sagt ... KA
vtl. dynamisch oder so xD
ich hoffe mal ihr versteht was ich meine und dass...