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:
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)
Code:
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
Lesezeichen