Guten Tag.
Ich vermute, dass ich im falschen Unterforum bin, habe allerdings keine Ahnung, wo genau ich mich wirklich hinbegeben müsste, wenn ich denn überhaupt generell im richtigen Forum bin - die Frage ist nun wirklich ziemlich speziell.
Hintergrund meines Programms ist die Simulation eines Bowlingsspiels mit "zufällig" generierten, fallenden Pins.
Die Generierung der Pins funktioniert, wie sie abgelegt werden. Das Problem liegt in der Berechnung der Punkte - für den letzten Frame funktioniert sie, für die Frames vorher allerdings nicht.
Relevante Arrays sind:
aPins, das gibt die umgefallene Anzahl Pins pro Spieler pro Frame pro Wurf an.
aType gibt den "Typen" (Strike, Spare usw) pro Wurf pro Frame pro Spieler an, 0=miss, 1=Zahl(1-9), 2=Spare, 3=Strike, 4=kein Wurf (für den letzten Frame)
aPoints soll nun die Punkte pro Wurf zurückgeben.
Die Array-Deklarationen sehen folgendermaßen aus:
aAllPoints ist einfach nur dafür da, schnell auf die Gesamtpunktzahlen der Spieler zugreifen zu können und von aPoints abhängig, führ ich demnach nicht weiter auf.
Ich finde den Fehler in folgendem Konstrukt nicht, der dazu führt, dass die switch-Methoden nie etwas anderes als den default-Teil ausführen. In Zeile 9 hab ich ein konkretes Feld konkret belegt, das funktioniert, auch die default-Werte zu ändern funktioniert.
Ich bin mir nicht sicher, ob noch mehr vom Code benötigt wird, wenn ja, dann liefer ich den gerne nach - bin schon froh genug, wenn sich irgendwer damit auseinandersetzen sollte.
Die Startwerte sind folgende: iFrames=10, iPlayer=2.
Vielen Dank!
Edit: Ich liefer noch mal den Teil nach, der die Typen vom ersten Wurf eines jeden Frames bestimmt, nachfolgende Würfe sind ähnlich.
Ich vermute, dass ich im falschen Unterforum bin, habe allerdings keine Ahnung, wo genau ich mich wirklich hinbegeben müsste, wenn ich denn überhaupt generell im richtigen Forum bin - die Frage ist nun wirklich ziemlich speziell.
Hintergrund meines Programms ist die Simulation eines Bowlingsspiels mit "zufällig" generierten, fallenden Pins.
Die Generierung der Pins funktioniert, wie sie abgelegt werden. Das Problem liegt in der Berechnung der Punkte - für den letzten Frame funktioniert sie, für die Frames vorher allerdings nicht.
Relevante Arrays sind:
aPins, das gibt die umgefallene Anzahl Pins pro Spieler pro Frame pro Wurf an.
aType gibt den "Typen" (Strike, Spare usw) pro Wurf pro Frame pro Spieler an, 0=miss, 1=Zahl(1-9), 2=Spare, 3=Strike, 4=kein Wurf (für den letzten Frame)
aPoints soll nun die Punkte pro Wurf zurückgeben.
Die Array-Deklarationen sehen folgendermaßen aus:
Java:
//Arrays nach Schema [Spielerzahl][Rundenzahl][Wurfnummer]
static int[][][] aPins = new int [iPlayer][iFrames][iThrows];
static int[][][] aType = new int [iPlayer][iFrames][iThrows];
//Typ: 0: miss, 1: 1-9 Pins, 2: Spare, 3: Strike, 4: kein Wurf
static int[][][] aPoints = new int [iPlayer][iFrames][iThrows+1];
//Punkte: 0: erster Wurf, 1: zweiter Wurf, 2: dritter Wurf, 3: gesamter Frame
Ich finde den Fehler in folgendem Konstrukt nicht, der dazu führt, dass die switch-Methoden nie etwas anderes als den default-Teil ausführen. In Zeile 9 hab ich ein konkretes Feld konkret belegt, das funktioniert, auch die default-Werte zu ändern funktioniert.
Ich bin mir nicht sicher, ob noch mehr vom Code benötigt wird, wenn ja, dann liefer ich den gerne nach - bin schon froh genug, wenn sich irgendwer damit auseinandersetzen sollte.
Die Startwerte sind folgende: iFrames=10, iPlayer=2.
Java:
for (int iCPlayer=0; iCPlayer<iPlayer; iCPlayer++){//Frame 10
for (int i=0; i<3; i++){
aPoints[iCPlayer][iFrames-1][i]=aPins[iCPlayer][iFrames-1][i];
}
aPoints[iCPlayer][iFrames-1][3]=aPins[iCPlayer][iFrames-1][1]+aPins[iCPlayer][iFrames-1][2]+aPins[iCPlayer][iFrames-1][0];
for (int iCFrame=iFrames-2; iCFrame>=0; iCFrame--){ //Frame 1-9
//Throw 2:
aPoints[0][1][1]=3;
switch (aType[iCPlayer][iCFrame][1]){
case 1:
aPoints[iCPlayer][iCFrame][1]=3; //aPins[iCPlayer][iCFrame][1];
case 2:
aPoints[iCPlayer][iCFrame][1]=4; //aPins[iCPlayer][iCFrame][1]+aPins[iCPlayer][iCFrame+1][0];
case 3:
aPoints[iCPlayer][iCFrame][1]=5; //aPins[iCPlayer][iCFrame][1]+aPins[iCPlayer][iCFrame+1][0]+aPins[iCPlayer][iCFrame+1][1];
default:
aPoints[iCPlayer][iCFrame][1]=0;
}
//Throw 1:
switch (aType[iCPlayer][iCFrame][0]){
case 1:
aPoints[iCPlayer][iCFrame][0]=6; //aPins[iCPlayer][iCFrame][0];
case 2:
aPoints[iCPlayer][iCFrame][0]=7; //aPins[iCPlayer][iCFrame][0]+aPins[iCPlayer][iCFrame][1];
case 3:
aPoints[iCPlayer][iCFrame][0]=8; //aPins[iCPlayer][iCFrame][0]+aPins[iCPlayer][iCFrame][1]+aPins[iCPlayer][iCFrame+1][0];
default:
aPoints[iCPlayer][iCFrame][0]=0;
}
aPoints[iCPlayer][iCFrame][3]=aPoints[iCPlayer][iCFrame][0]+aPoints[iCPlayer][iCFrame][1];
}
}
Vielen Dank!
Edit: Ich liefer noch mal den Teil nach, der die Typen vom ersten Wurf eines jeden Frames bestimmt, nachfolgende Würfe sind ähnlich.
Java:
if (iThrowOne<iPins && iThrowOne>0){
aType[iCPlayer][iCFrame][0]=1;
}
else if (iThrowOne==0){
aType[iCPlayer][iCFrame][0]=0;
}
else if (iThrowOne==iPins){
aType[iCPlayer][iCFrame][0]=3;
}
Zuletzt bearbeitet: