BlueJay
10-06-2007, 07:45
Hallo Leute,
ich beisse mich gerade durch mein erstes Java-Programm und an folgender Stelle fest:
Die global definierte Zugzahl weicht innerhalb der Methoden voneinander ab.
Bild:
http://www.gamecraft.de/_sonstiges/turnit_scr.png
rechts oben (blaues Feld) steht die korrekte Zahl, unten (rot) eine um 1 niedrigere Zahl (oder auch 0, als wäre sie nicht korrekt initialisiert)
Der Code: (Ausschnitte)
import javax.swing.*; // Buttons und so'n Kram
import java.awt.*; // grafischer Schnickschnack
import java.awt.event.*; // Mausklicks
import java.util.Random; // Random-Generator
import java.io.*; // Hiscore
public class turnit
{
private static JFrame frame;
// Spielvariable, alles, was man so braucht:
static int xmax=8;
static int ymax=8;
static int maxcolor=4;
static int modus=2;
static int zmax=xmax*ymax;
static int cnt;
static boolean spiel_laeuft;
....
public static void neu(int nr)
{ int i,k;
modus=nr;
Random r = new Random();
for (i=0; i<zmax; i++) { f[i]=0; show_chip(i); }
// Spiel generieren:
for (i=0; i<4*nr; i++) { k=Math.abs(r.nextInt())%zmax; turn(k); }
cnt=0; // Zugcounter initialisieren
lzug.setText("Zug:"+cnt);
anzeige.setBackground(Color.black);
messi.setText(modus+" Phasen");
loadit(); // Bestenliste laden
lhi.setText("Bestes Spiel: "+hi[modus-2]+" Z\u00fcge");
spiel_laeuft=true;
}
.....
// Reaktion auf Mausklick:
public static void klick(int mx,int my)
{ int ix,iy;
if (spiel_laeuft)
{ ix=mx*xmax/spiel.getWidth();
iy=my*ymax/spiel.getHeight();
ix=ix+xmax*iy;
turn(ix);
cnt++; // Zugcounter hochsetzen
lzug.setText(""+cnt); // hier ist die Welt in Ordnung
}
// System.out.println("hat Klick gemacht: ");
}
.....
// Abfrage, ob Eintrag:
public static void geschafft()
{ int i,j,k;
k=1; for (i=1; i<zmax; i++) if (k>0) if (f[i]!=f[0]) k=0;
if (k>0)
{ anzeige.setBackground(drot);
// hier hat cnt plötzlichPhantasiewerte, z.B. eins zu wenig
messi.setText("Geschafft in "+cnt+" Z\u00fcgen!");
spiel_laeuft=false;
loadit();
if (cnt<hi[modus-2])
{ messi.setText("neuer Rekord!");
hi[modus-2]=cnt;
lhi.setText("Bestes Spiel: "+hi[modus-2]+" Z\u00fcge");
saveit();
}
}
}
Die Methoden werdnin der obigen Reihenfolge abgearbeitet: neu() setzt cnt auf 0, klick() zählt cnt um 1 hoch und gibt auf blauem Feld aus, geschafft() soll cnt zum Speichern weiterleiten und im roten Feld anzeigen. Hier kommt cnt falsch an.
Wieso? Abhilfe?
so long,
BlueJay
ich beisse mich gerade durch mein erstes Java-Programm und an folgender Stelle fest:
Die global definierte Zugzahl weicht innerhalb der Methoden voneinander ab.
Bild:
http://www.gamecraft.de/_sonstiges/turnit_scr.png
rechts oben (blaues Feld) steht die korrekte Zahl, unten (rot) eine um 1 niedrigere Zahl (oder auch 0, als wäre sie nicht korrekt initialisiert)
Der Code: (Ausschnitte)
import javax.swing.*; // Buttons und so'n Kram
import java.awt.*; // grafischer Schnickschnack
import java.awt.event.*; // Mausklicks
import java.util.Random; // Random-Generator
import java.io.*; // Hiscore
public class turnit
{
private static JFrame frame;
// Spielvariable, alles, was man so braucht:
static int xmax=8;
static int ymax=8;
static int maxcolor=4;
static int modus=2;
static int zmax=xmax*ymax;
static int cnt;
static boolean spiel_laeuft;
....
public static void neu(int nr)
{ int i,k;
modus=nr;
Random r = new Random();
for (i=0; i<zmax; i++) { f[i]=0; show_chip(i); }
// Spiel generieren:
for (i=0; i<4*nr; i++) { k=Math.abs(r.nextInt())%zmax; turn(k); }
cnt=0; // Zugcounter initialisieren
lzug.setText("Zug:"+cnt);
anzeige.setBackground(Color.black);
messi.setText(modus+" Phasen");
loadit(); // Bestenliste laden
lhi.setText("Bestes Spiel: "+hi[modus-2]+" Z\u00fcge");
spiel_laeuft=true;
}
.....
// Reaktion auf Mausklick:
public static void klick(int mx,int my)
{ int ix,iy;
if (spiel_laeuft)
{ ix=mx*xmax/spiel.getWidth();
iy=my*ymax/spiel.getHeight();
ix=ix+xmax*iy;
turn(ix);
cnt++; // Zugcounter hochsetzen
lzug.setText(""+cnt); // hier ist die Welt in Ordnung
}
// System.out.println("hat Klick gemacht: ");
}
.....
// Abfrage, ob Eintrag:
public static void geschafft()
{ int i,j,k;
k=1; for (i=1; i<zmax; i++) if (k>0) if (f[i]!=f[0]) k=0;
if (k>0)
{ anzeige.setBackground(drot);
// hier hat cnt plötzlichPhantasiewerte, z.B. eins zu wenig
messi.setText("Geschafft in "+cnt+" Z\u00fcgen!");
spiel_laeuft=false;
loadit();
if (cnt<hi[modus-2])
{ messi.setText("neuer Rekord!");
hi[modus-2]=cnt;
lhi.setText("Bestes Spiel: "+hi[modus-2]+" Z\u00fcge");
saveit();
}
}
}
Die Methoden werdnin der obigen Reihenfolge abgearbeitet: neu() setzt cnt auf 0, klick() zählt cnt um 1 hoch und gibt auf blauem Feld aus, geschafft() soll cnt zum Speichern weiterleiten und im roten Feld anzeigen. Hier kommt cnt falsch an.
Wieso? Abhilfe?
so long,
BlueJay