Advertisement
Guest User

WombatRallye

a guest
Nov 29th, 2015
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.46 KB | None | 0 0
  1. package de.ostfalia.gdp.ws15.s9;
  2.  
  3. import java.io.IOException;
  4. import java.util.Scanner;
  5.  
  6. public class WombatRallye {
  7.  
  8.     static Wombat[] wombats = new Wombat[6];
  9.  
  10.     /*
  11.      * Erzeugt für jeden Spieler ein Wombat und positioniert alle Wombats auf
  12.      * dem Feld 0
  13.      *
  14.      * @param anzahlSpieler - Anzahl der Mitspieler
  15.      */
  16.     public static void init(int anzahlSpieler) {
  17.         System.out.println(
  18.                 "Geben Sie bitte ein: 'Farbe' und \n '1' -für emsig || '2' -für gemütlich || '3' -für aggressiv");
  19.         Scanner farbe = new Scanner(System.in);
  20.         Scanner eigenschaft = new Scanner(System.in);
  21.  
  22.         for (int i = 0; i < anzahlSpieler; i++) {
  23.             wombats[i] = new Wombat();
  24.             System.out.println("Für Spieler " + (i + 1));
  25.             wombats[i].setSpieler(i + 1);
  26.             wombats[i].setFarbe(farbe.nextLine());
  27.             wombats[i].setEigenschaft(eigenschaft.nextInt());
  28.             wombats[i].setPosition(0);
  29.             if (wombats[i].getEigenschaft() == 1 || wombats[i].getEigenschaft() == 2) {
  30.                 wombats[i].setGlückszahl(10);
  31.             }
  32.             wombats[i].setAussetzen(0);
  33.         }
  34.         farbe.close();
  35.         eigenschaft.close();
  36.     }
  37.  
  38.     /*
  39.      * Führt einen Zug für ein Wombat aus, d.h. die Position des Wombats wird
  40.      * entsprechend der Regeln verändert.
  41.      *
  42.      * @param anzahlSpieler - Nummer des Spielers
  43.      *
  44.      * @return true, falls dieses Wombat die Ziellinie überschritten hat,
  45.      * ansonsten false
  46.      */
  47.     public static boolean zug(int anzahlSpieler, int länge) {
  48.  
  49.         int wurf = (int) ((Math.random() * 6) + 1);
  50.  
  51.         switch (wombats[anzahlSpieler].getEigenschaft()) {
  52.  
  53.         case 1:
  54.             //setzen
  55.             wombats[anzahlSpieler].setPosition((wurf > 3) ? wombats[anzahlSpieler].getPosition() + 3
  56.                     : wombats[anzahlSpieler].getPosition() + wurf);
  57.             //prüfen ob aggressives dort
  58.             for (int i = 0; i < anzahlSpieler; i++) {
  59.                 if (wombats[anzahlSpieler].getPosition() == wombats[i].getPosition()) {
  60.                     if (wombats[i].getEigenschaft() == 3) {
  61.                         wombats[anzahlSpieler].setPosition(wombats[anzahlSpieler].getPosition() - 6);
  62.                         wombats[i].setAussetzen(2);
  63.  
  64.                         int j = 0;
  65.                         //wieder prüfen ob aggressives dort
  66.                         while (wombats[anzahlSpieler].getPosition() == wombats[j].getPosition()) {
  67.                             if (wombats[j].getEigenschaft() == 3) {
  68.                                 wombats[anzahlSpieler].setPosition(wombats[anzahlSpieler].getPosition() - 6);
  69.                                 wombats[j].setAussetzen(2);
  70.                             }
  71.                             j++;
  72.                         }
  73.                     }
  74.                 }
  75.             }
  76.             //Glückszahl
  77.             wombats[anzahlSpieler]
  78.                     .setPosition((wombats[anzahlSpieler].getPosition() % wombats[anzahlSpieler].getGlückszahl() == 0)
  79.                             ? wombats[anzahlSpieler].getPosition() + 3 : wombats[anzahlSpieler].getPosition());
  80.             //prüfen ob aggressives dort
  81.             for (int i = 0; i < anzahlSpieler; i++) {
  82.                 if (wombats[anzahlSpieler].getPosition() == wombats[i].getPosition()) {
  83.                     if (wombats[i].getEigenschaft() == 3) {
  84.                         wombats[anzahlSpieler].setPosition(wombats[anzahlSpieler].getPosition() - 6);
  85.                         wombats[i].setAussetzen(2);
  86.  
  87.                         int j = 0;
  88.                         //wieder prüfen ob aggressives dort
  89.                         while (wombats[anzahlSpieler].getPosition() == wombats[j].getPosition()) {
  90.                             if (wombats[j].getEigenschaft() == 3) {
  91.                                 wombats[anzahlSpieler].setPosition(wombats[anzahlSpieler].getPosition() - 6);
  92.                                 wombats[j].setAussetzen(2);
  93.                             }
  94.                             j++;
  95.                         }
  96.                     }
  97.                 }
  98.             }
  99.            
  100.             break;
  101.  
  102.         case 2:
  103.             //wie emsig
  104.             wombats[anzahlSpieler].setPosition((wurf > 3) ? wombats[anzahlSpieler].getPosition() + 3
  105.                     : wombats[anzahlSpieler].getPosition() + wurf);
  106.             wombats[anzahlSpieler]
  107.                     .setPosition((wombats[anzahlSpieler].getPosition() % wombats[anzahlSpieler].getGlückszahl() == 0)
  108.                             ? wombats[anzahlSpieler].getPosition() + 3 : wombats[anzahlSpieler].getPosition());
  109.             break;
  110.  
  111.         case 3:
  112.             //aussetzen?
  113.             if (wombats[anzahlSpieler].getAussetzen() == 1) {
  114.                 wombats[anzahlSpieler].setPosition(wombats[anzahlSpieler].getPosition());
  115.                 wombats[anzahlSpieler].setAussetzen(0);
  116.             }
  117.             if (wombats[anzahlSpieler].getAussetzen() == 2) {
  118.                 wombats[anzahlSpieler].setPosition(wombats[anzahlSpieler].getPosition());
  119.                 wombats[anzahlSpieler].setAussetzen(1);
  120.             } else {
  121.                 if (wurf > 4) {
  122.                     //setzen & aussetzen
  123.                     wombats[anzahlSpieler].setPosition(wombats[anzahlSpieler].getPosition() + wurf);
  124.                     wombats[anzahlSpieler].setAussetzen(1);
  125.                     //prüfen ob esmiges dort
  126.                     for (int i = 0; i < anzahlSpieler; i++) {
  127.                         if (wombats[anzahlSpieler].getPosition() == wombats[i].getPosition()) {
  128.                             if (wombats[i].getEigenschaft() == 1) {
  129.                                 wombats[i].setPosition(wombats[i].getPosition() - 6);
  130.                                 wombats[anzahlSpieler].setAussetzen(2);
  131.  
  132.                                 int j = 0;
  133.                                 //wieder prüfen ob esmiges dort
  134.                                 while (wombats[i].getPosition() == wombats[j].getPosition()) {
  135.                                     if (wombats[j].getEigenschaft() == 3) {
  136.                                         wombats[i].setPosition(wombats[i].getPosition() - 6);
  137.                                         wombats[j].setAussetzen(2);
  138.                                     }
  139.                                     j++;
  140.                                 }
  141.                             }
  142.                         }
  143.                     }
  144.  
  145.                 } else {
  146.                     //setzen
  147.                     wombats[anzahlSpieler].setPosition(wombats[anzahlSpieler].getPosition() + wurf);
  148.                     //prüfen ob esmiges dort
  149.                     for (int i = 0; i < anzahlSpieler; i++) {
  150.                         if (wombats[anzahlSpieler].getPosition() == wombats[i].getPosition()) {
  151.                             if (wombats[i].getEigenschaft() == 1) {
  152.                                 wombats[i].setPosition(wombats[i].getPosition() - 6);
  153.                                 wombats[anzahlSpieler].setAussetzen(2);
  154.  
  155.                                 int j = 0;
  156.                                 //wieder prüfen ob esmiges dort
  157.                                 while (wombats[i].getPosition() == wombats[j].getPosition()) {
  158.                                     if (wombats[j].getEigenschaft() == 3) {
  159.                                         wombats[i].setPosition(wombats[i].getPosition() - 6);
  160.                                         wombats[j].setAussetzen(2);
  161.                                     }
  162.                                     j++;
  163.                                 }
  164.                             }
  165.                         }
  166.                     }
  167.                 }
  168.             }
  169.             break;
  170.  
  171.         }
  172.  
  173.         return (wombats[anzahlSpieler].getPosition() >= länge) ? true : false;
  174.     }
  175.  
  176.     /*
  177.      * Simuliert eine Runde in der Wombat Ralley, d.h. jedes Wombat zieht
  178.      * einmal.
  179.      *
  180.      * @return sieger - null, solange noch kein Sieger feststeht.
  181.      */
  182.     public static Wombat simulateRunde(int anzahlSpieler, int länge) {
  183.         int i = 0;
  184.         boolean finish = false;
  185.  
  186.         while (!finish && i < anzahlSpieler - 1) {
  187.             finish = zug(i, länge);
  188.             i++;
  189.         }
  190.  
  191.         return (!finish) ? null : wombats[i];
  192.     }
  193.  
  194.     /*
  195.      * Simuliert ein Spiel in der Wombat Ralley, d.h. es werden so viele Runden
  196.      * erzeugt, bis ein Wombat gewinnt
  197.      *
  198.      * @param anzahlSpieler - Anzahl der Spieler
  199.      *
  200.      * @param spielfelder - Anzahl der Spielfelder
  201.      *
  202.      * @return züge - Anzahl der Züge, bis das Spiel gewonnen wurde
  203.      */
  204.     private static int simulateSpiel(int anzahlSpieler, int spielfelder) {
  205.         int züge = 0;
  206.  
  207.         while (simulateRunde(anzahlSpieler, spielfelder) == null) {
  208.             züge++;
  209.         }
  210.  
  211.         // Alle Wombats wieder auf Position 0 setzen
  212.         for (int i = 0; i < anzahlSpieler; i++) {
  213.             wombats[i].setPosition(0);
  214.         }
  215.  
  216.         return züge;
  217.  
  218.     }
  219.  
  220.     public static void main(String[] args) throws IOException {
  221.  
  222.         Scanner scanner = new Scanner(System.in);
  223.         System.out.println("Wombat Rallye");
  224.         System.out.println("Geben Sie bitte eine Anzahl von Spielern von 3-6 ein:");
  225.         int anzahlSpieler = scanner.nextInt();
  226.         if (anzahlSpieler < 3 || anzahlSpieler > 6) {
  227.             do {
  228.                 System.out.println("Anzahl der Spieler beachten!");
  229.                 System.out.println("Geben Sie bitte eine Anzahl von Spielern von 3-6 ein:");
  230.                 anzahlSpieler = scanner.nextInt();
  231.             } while (anzahlSpieler < 3 || anzahlSpieler > 6);
  232.         }
  233.  
  234.         System.out.println("Geben Sie bitte die Länge des Spielfeldes ein:");
  235.         int länge = scanner.nextInt();
  236.  
  237.         System.out.println("Geben Sie bitte die Anzahl der Simulationen ein:");
  238.         int simulationen = scanner.nextInt();
  239.  
  240.         // Initialisierung
  241.         init(anzahlSpieler);
  242.  
  243.         // Simulationen ausführen
  244.         int züge = 0;
  245.         for (int i = 0; i < simulationen; i++) {
  246.             züge += simulateSpiel(anzahlSpieler, länge);
  247.         }
  248.  
  249.         // Durchschnitt
  250.         double durchschnitt = züge / simulationen;
  251.         double aggressiv = züge / simulationen;
  252.         double emsig = züge / simulationen;
  253.  
  254.         System.out.println("Die Wombat-Rallye war " + länge + " Spielfelder lang.");
  255.         System.out.println("Es waren " + anzahlSpieler + " Wombats am Start.");
  256.         System.out.println(
  257.                 "Durchschnittlich wurden " + (int) durchschnitt + " Runden gespielt, bis der Sieger feststand.");
  258.         System.out.printf("Das aggressive Wombat hat %.2f Prozent der Spiele gewonnen. \n", aggressiv);
  259.         System.out.printf("Das emsige, kleine Wombat hat %.2f Prozent der Spiele gewonnen.", emsig);
  260.        
  261.         scanner.close();
  262.     }
  263.  
  264. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement