MezData-Logo

Konsolen-Spiele

Würfelspiel mit Konsoleneingabe

Zustandsdiagramm
Zustandsdiagramm
Quellcode [Spiele/Wuerfeln.java]
public class Wuerfeln{
 
  static char input(){ // Einlesen von Konsole
    return  new java.util.Scanner(System.in).next().charAt(0);
  }
  static int wuerfeln(){ // Zufall von 1..6
    return (int) (Math.random()*6) +1;
  }
  static void ausWuerfeln(){
    System.out.println("Wuerfel: "+wuerfeln());
  }
  public static void main(String args[]){
    boolean einlesen = true;
    char c;
    System.out.println("\fWillkommen beim Wuerfeln");
    while(einlesen){
      System.out.print("e = exit, w = wuerfeln: ");
      c = input();
      switch(c){
        case 'e': einlesen = false; // exit?
          System.out.println("Wiedersehen!");
          break;
        case 'w': ausWuerfeln(); // wuerfeln?
          break;
        default: System.out.println("Hä?"); // sonstige Eingabe
      }
    }
  }
}

Wettwürfeln

Zustandsdiagramm

Quellcode [Spiele/WettWuerfeln.java]
public class WettWuerfeln{
  static int[] spielerPunkte ={0,0}; // Punktestand
  static int spieler; // welcher Spieler dran ist
  static boolean[] gepasst={false,false}; // hat schon einer gepasst
  static int zustand = 0;  // 0 Init, 1 Spielerzug
  static int maximum = 15; // maximale Punktzahl
  static boolean weiter = true; // weiterspielen
 
  static char input(){ // Konsoleneingabe
    return new java.util.Scanner(System.in).next().charAt(0);
  }
 
  static void gewonnen(int n){ // Gewinner ausgeben und weiterspielen?  
    if(n<2) { // einer hat gewonnen
      System.out.printf("Spieler %d hat gewonnen\n",n+1);
    }
    else { // unentschieden
      System.out.println("Unentschieden");
    }
    System.out.print("Weiterspielen j/n?");
    switch(input()){
      case 'j':
        zustand=0; // initialisierung
        break;
      case 'n':
        weiter = false;
        System.out.println("Wiedersehen!");
        break;
      default: System.out.println("Wie bitte?");  // Fehleingabe
    }
  }
  public static int wuerfeln(){ // aktueller Spieler wuerfelt
    int w = (int) (Math.random()*6) +1;
    spielerPunkte[spieler] += w;
    return w;
  }
  public static void main(String args[]){
    int w; // Wuerfelergebnis
    while(weiter){
      switch (zustand){
        case 0: // Initialisierung
          System.out.printf("\fWillkommen beim WettWuerfeln: Abwechselnd bis %d wuerfeln\n",maximum);
          spielerPunkte[1]=spielerPunkte[0]=0;
          gepasst[1]=gepasst[0]=false;
          spieler=0;
          zustand = 1; // spielen
          for(int i=0; i<maximum/6;i++){ // Anfangswuerfeln
            System.out.printf("Sp%d: %d ",spieler+1,wuerfeln());
            spieler = (spieler+1)%2; // Spielerwechsel 0->1 1->0
            System.out.printf("Sp%d: %d ",spieler+1,wuerfeln());
            spieler = (spieler+1)%2; // Spielerwechsel
          }
          System.out.println("");
        case 1: // Spielerzug
          System.out.printf("Sp1 (%d) Sp2 (%d) w=wuerfeln, p=passen? Sp%d: ",spielerPunkte[0],spielerPunkte[1],spieler+1);
          switch(input()){ // auf Eingabe warten
            case 'w': // Spieler will wuerfeln
              w = wuerfeln();
              if (spielerPunkte[spieler]>maximum){ // Maximum ueberschritten?
                System.out.printf("Wurf: %d Punktestand %d -> Drüber!\n",w,spielerPunkte[spieler]);
                gewonnen((spieler+1)%2); // gewonnen hat der andere
              }
              else{
                System.out.printf("Wurf: %d Punktestand %d bis Max: %d\n",w,spielerPunkte[spieler],maximum-spielerPunkte[spieler]);
                if (spielerPunkte[spieler]==maximum){ // Punktlandung?
                  gewonnen(spieler);
                }
                else{
                  spieler = (spieler+1)%2; // Spielerwechsel
                }
              }
              break;
            case 'p': // Spieler will passen
              if(gepasst[(spieler+1)%2]){ // anderer hat auch gepasst: Gewinner ermitteln
                if(spielerPunkte[0]>spielerPunkte[1]) gewonnen(0);
                else if(spielerPunkte[0]<spielerPunkte[1]) gewonnen(1);
                else gewonnen(2); // unentschieden
              }
              else{
                gepasst[spieler]=true;
                spieler = (spieler+1)%2; // Spielerwechsel
              }
              break;
            default: System.out.println("Wie bitte?"); // Fehleingabe
          }
      }  
    }
  }
}

HangMan

Quellcode [HangMan/HangMan.java]
public class HangMan{
  static String rateString ="";
  static String ausgabe ="";
  static String fehler="";
  static int maxFehler=6;
  static String[] woerter = {"enes","levin","alexander","marc","andreas","daniel",
      "benedikt","manuel","matthias","gino","oliver"};
  static boolean checkRateString(String s){
    int i;
    char c;
    for(i=0;i<s.length();i++){
      c = s.charAt(i);  
      if('a'<=c && c<='z');
      else return false;
    }
    return true;
  }
  static void initSpiel(){
    int i;
    ausgabe ="";  
    for(i=0;i<rateString.length();i++){
      ausgabe +="_";
    }
    switch(rateString.length()){
      case 4:
        maxFehler=4;
        break;
      case 5:
      case 6:
        maxFehler=5;
      default:
        maxFehler=6;
    }
    fehler = "";
    System.out.printf("\fNeues Spiel: max %d Fehler %s\n",maxFehler,ausgabe);
  }
  static void neuesSpiel(){
    int i = (int) (Math.random()*woerter.length);
    rateString=woerter[i];
    initSpiel();
  }
  static void neuesSpiel(String s){
    if(s.length() < 4 || !checkRateString(s)){
      System.out.println("Ratewort ist nicht gut: "+s);
    } else{
      rateString = s;
      initSpiel();
    }
  }
  static void rate(char c){
    int i;
    boolean erraten=true;
    boolean falsch=true;
    if(rateString.length()<2){
      System.out.println("Erst ein neues Spiel starten!");
      return;
    }
    String aus="";
    for(i=0;i<rateString.length();i++){
      if(c==rateString.charAt(i)){
        aus+=c;
        falsch=false;
      }
      else {
        if(ausgabe.charAt(i)=='_')erraten=false;
        aus+=ausgabe.charAt(i);  
      }
    }
    ausgabe=aus;
    if(erraten){
      System.out.println("Erraten: \t"+ausgabe);
    } else{
      if(falsch){
        fehler+=c;
        switch(fehler.length()){
            case 1:
              System.out.println("Vokale-Tipp: "+anzahlVokale());
              break;
            case 2:
              System.out.println("Unterschiedliche Buchstaben-Tipp: "+anzahlUnterschiedlicherBuchstaben());
              break;
            case 3:
              System.out.println("Gleiche Buchstaben-Tipp: "+anzahlGleicherBuchstaben());
              break;
            default:
              System.out.println("Uebrige Buchstaben: "+uebrigeBuchstaben());
        }
 
      }
      if(fehler.length()>6){
        System.out.println("Leider verlohren! "+rateString);
        rateString="";
      }else{
        System.out.printf("%d Fehler: %-6s %s\n",fehler.length(),fehler,ausgabe);
      }
    }
  }
  static int anzahlVokale(){
    int i,anzahl=0;
    char c;
    for(i=0;i<rateString.length();i++){
      c=rateString.charAt(i);
      switch(c){
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
          anzahl++;
      }
    }
    return anzahl;
  }
  static int anzahlGleicherBuchstaben(){
    int i, anzahl=0;
    int buchstaben[] = new int[26];
    for(i=0;i<rateString.length();i++){
      buchstaben[rateString.charAt(i)-'a']++;
    }
    for(i=0;i<buchstaben.length;i++){
      if(buchstaben[i]>1)anzahl++;
    }
    return anzahl;
  }
  static int anzahlUnterschiedlicherBuchstaben(){
    int i, anzahl=0;
    int buchstaben[] = new int[26];
    for(i=0;i<rateString.length();i++){
      buchstaben[rateString.charAt(i)-'a']++;
    }
    for(i=0;i<buchstaben.length;i++){
      if(buchstaben[i]>0)anzahl++;
    }
    return anzahl;
  }
  static String uebrigeBuchstaben(){
    int i;
    char c;
    String aus="";
    int buchstaben[] = new int[26];
    for(i=0;i<ausgabe.length();i++){
      c = ausgabe.charAt(i);   
      if(c!='_') buchstaben[c-'a']++;
    }
    for(i=0;i<fehler.length();i++){
      c = fehler.charAt(i);   
      buchstaben[c-'a']++;
    }
    for(i=0;i<buchstaben.length;i++){
      if(buchstaben[i]==0)aus+= (char)(i+'a');
    }
    return aus;
  }
}

Enwickeln Sie aus der Vorgabe ein Konsolenspiel