Ich möchte ein Programm schreiben, dass das beliebte Brettspiel Risiko simuliert. (Wer Risiko nicht kennt es wird zu zwei oder zu mehrt gespielt, jeder hat eine gewisse Anzahl an Ländern und Armen und er kann wenn er daran ist veruschen das Land eines Mitschreiters zu erobern. Er gewinnt wenn er alle Verteidigereinheiten besiegt hat, ansonsten kann er den Angriff abbrechen bzw. wenn dem Angreifer nur noch eine Einheit bleibt muss er ab brechen weil er die eine Einheit zum Sichern seines Landes braucht. Dazu würfeln für jede Schlacht Angreifer und Verteidiger, der Angreifer mit 3 Würfeln der Verteidiger mit 2 Würfeln. Es werden die höchsten zwei Werte des Angreifers mit denen des Verteidigers verglichen, wer den höhren Wert hat gewinnt. Sind die Werte gleich gewinnt der Verteidiger (Heimbonus)). Ich habe einen Code geschrieben der mein Programm testen soll, aber irgendetwas muss ich falsch gemacht haben den der Verteidiger gewinnt immer. Hier ist mein Code:
Java:
public class risiko
{
private int[] angreifer;
private int[] angreifergeordnet;
private int[] verteidiger;
private int[] verteidigergeordnet;
public risiko(int c)
{
if(c>10000){
c=10000;
}
angreifer = new int[3];
angreifergeordnet = new int[2];
verteidiger = new int[2];
verteidigergeordnet = new int[2];
int siege=0;
int u=0;
int niederlagen=0;
for(int i=1; i<=c;i++){
switch(siegAngreifer()){
case 2: System.out.println("Runde "+i+": Sieg"); siege++; break;
case 1: System.out.println("Runde "+i+": Unentschieden");
System.err.println("Runde "+i+": Unentschieden"); u++; break;
case 0: System.err.println("Runde "+i+": Niederlage"); niederlagen++; break;
}
}
System.out.println(siege+" Siege von "+c+" Runden");
System.out.println(siege+" Unentschieden von "+c+" Runden");
System.err.println(siege+" Unentschieden von "+c+" Runden");
System.err.println(niederlagen+" Niederlagen "+c+" Runden");
}
public int siegAngreifer(){
fuelle(angreifer);
fuelle(verteidiger);
int[] angreifervergleichwerte=outer(angreifer);
angreifergeordnet=array2WerteNachGroesseGeordnet(angreifervergleichwerte);
verteidigergeordnet=array2WerteNachGroesseGeordnet(verteidiger);
int i=0;
for(int k=0; k<verteidiger.length;k++){
if(entscheidung(angreifergeordnet[i], verteidigergeordnet[i])==true){
i++;
}
}
return i;
}
private int[] array2WerteNachGroesseGeordnet(int[] unordnung){
int[] geordnet=new int[unordnung.length];
geordnet[0]=kleinster(unordnung);
geordnet[1]=groesster(unordnung);
return geordnet;
}
private boolean entscheidung(int angreifer, int verteidiger){
if(angreifer>verteidiger){
return true;
}else{
return false;
}
}
private void fuelle(int[] leer){
for(int i=0; i<leer.length; i++){
leer[i]=myRandom();
}
}
private int summe(int[] zaehler){
int summe=0;
for(int i=0; i<zaehler.length; i++){
summe+=zaehler[i];
}
return summe;
}
private int[] outer(int[] etwas){
int[] outer=new int[etwas.length-1];
for(int i=0; i<etwas.length;i++){
int j=0;
if(i!=kleinstenindex(etwas)){
outer[j]=etwas[i];
}
j++;
}
return outer;
}
private int kleinstenindex(int[] bigger){
int mini=6;
int j=0;
for(int i=0;i<bigger.length;i++){
if(bigger[i]<mini){
mini=bigger[i];
j=i;
}
}
return j;
}
private int kleinster(int[] bigger){
int mini=6;
for(int i=0;i<bigger.length;i++){
if(bigger[i]<mini){
mini=bigger[i];
}
}
return mini;
}
private int groesster(int[] bigger){
int max=1;
for(int i=0;i<bigger.length;i++){
if(bigger[i]>max){
max=bigger[i];
}
}
return max;
}
private int myRandom() {
int zufallswert= new Double(Math.random() * 6).intValue();
return zufallswert;
}
}