Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Wörter raten (Zeichenketten)

Schreiben Sie ein Programm, bei dem eine Spielerin ein Wort eingeben kann. Eine zweite Spielerin soll dieses Wort erraten. Dabei sieht die zweite Spielerin zu Beginn nur
die Anzahl Buchstaben als Platzhalter. Das sieht dann z. B. wie folgt aus:

*******

Wenn die zweite Spielerin nun Buchstaben ausprobiert, gibt es jeweils zwei Möglichkeiten. Wenn der Buchstabe nicht vorkommt, wird eine entsprechende Meldung angezeigt. Wenn hingegen der Buchstabe vorkommt, wird das Zeichen an der entsprechenden Stelle eingefügt:

*n****n

Ist das Wort gefunden, endet das Programm mit einer Meldung. Optional können der zweiten Spielerin auch bereits versuchte Zeichen gemeldet werden.

Zusatzaufgabe: Anstelle einer ersten Spielerin können die Wörter auch zufällig ab einer Wortliste geladen werden.

 

0 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

4 Lösung(en)

import java.util.Arrays;
import java.util.Scanner;

class Hangman {
  public static void main(String[] args) {
    int anzFehler = 0, maxFehler = 6; // Abbruch beim 6. Fehler  
    int gefunden = 0;
    String wort;
    Scanner sc = new Scanner(System.in);
    char[] loesung;
    char[] falsche = new char[maxFehler];

    Arrays.fill(falsche, '\255');
    System.out.println("Spieler 2: wegschauen!");
    System.out.print("Spieler 1: Wort eingeben: ");
    wort = sc.next().toUpperCase();
    for(int i = 0; i < 10; i++) // Bildschirm "leeren"
      System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");

    loesung = new char[wort.length()];
    Arrays.fill(loesung, '*');
    System.out.print("Spieler 2: Buchstaben raten:\n");
    while (anzFehler < maxFehler && gefunden < loesung.length) {
      System.out.println("Zu erratendes Wort: " + toString(loesung));
      if (anzFehler == 1)
        System.out.println("Nicht enthaltener Buchstabe: " + falsche[0]);
      else if (anzFehler > 1)
        System.out.println("Nicht enthaltene Buchstaben: " + toString(falsche));
      System.out.print("Neuen Buchstaben raten: ");
      char c = sc.next().toUpperCase().charAt(0);
      boolean enthalten = false;
      for (int i = 0; i < loesung.length; i++)
        if (wort.charAt(i) == c) {
          enthalten = true;
          loesung[i] = c;
          gefunden++;
        }
      if (!enthalten && Arrays.binarySearch(falsche, c) < 0) {
        falsche[anzFehler++] = c;
        Arrays.sort(falsche);
      }
    }
    if (anzFehler == maxFehler)
      System.out.println("Verloren! Das Wort ist " + wort);
    else
      System.out.println("Gewonnen: Das Wort ist " + wort);
  }
  
  private static String toString(char[] chars) {
    String s = "";
    for(char c : chars)
      if(c != '\255')
      s = s + c;
    return s;
  }
}
                
/* -------------------------------------- */
/* Autor: Dejan Bogdanovic                */
/* Erstelldatum: 07.04.2014    			  */
/* -------------------------------------- */
import java.util.*;

public class WoerterRaten {
	
	Scanner sc = new Scanner(System.in);
	
	String einlesenString(String frage) {
		System.out.println(frage);
		return sc.nextLine();
	}

	char einlesenChar(String frage) {
		System.out.println(frage);
		String ein = sc.nextLine();
		return ein.trim().charAt(0);
	}
	
	double einlesenDouble(String frage) {
		while(true) {
			String eingabe = einlesenString(frage);
			
			try {
				double dbl = Integer.parseInt(eingabe);
				return dbl;
			} catch (NumberFormatException nfe){
				System.out.println("Eingabe muss eine Zahl sein!");
			}
		}
	}
	
	
	void top() {
		String ausgabeArray = "";
		String geheimwort = einlesenString("Geben Sie das geheime Wort ein");
		geheimwort = geheimwort.toUpperCase();
		System.out.println("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
		
		int laenge = geheimwort.length();
		String verschluesselt = "";
		
		for(int i = 0; i < laenge; i++) {
			verschluesselt += "*";
		}
		
		System.out.println("Geheimes Wort : " + verschluesselt);

		char[] geheimwortArray = geheimwort.toCharArray();
		char[] verschluesseltArray = verschluesselt.toCharArray();
		
		int versuche = 0;
		boolean geloest = false;
		
		while(versuche < 10 && !geloest) { 
			char eingabe = einlesenChar("Geben Sie den Buchstaben ein!. Sie haben noch " + (10-versuche) + " Versuche.");
			eingabe = Character.toUpperCase(eingabe);
			
			boolean drin = geheimwort.contains(eingabe + "");
			
			if(drin) {
				for(int i = 0; i < geheimwort.length(); i++) {
					if(eingabe == geheimwortArray[i]) {
						verschluesseltArray[i] = eingabe;
					}
				}
				
				ausgabeArray = umwandelnArray(verschluesseltArray, ausgabeArray);
				System.out.println("Geheimes Wort: " + ausgabeArray);
				
				if(!ausgabeArray.contains("*")) {
					geloest = true;
				}
			} else {
				
				ausgabeArray = umwandelnArray(verschluesseltArray, ausgabeArray);
				
				System.out.println("Der Buchstabe " + eingabe + " ist in " + ausgabeArray + " nicht enthalten.");
				System.out.println("Geheimes Wort: " + ausgabeArray);
				System.out.println("");
			}
			
			ausgabeArray = "";
			versuche++;
		}
		
		if(true==geloest) {
			System.out.println("GRATULATION!!! Sie haben das geheime Wort gefunden");
		} else {
			System.out.println("Leider haben Sie das geheime Wort nicht gefunden. Viel Glück beim nächsten mal.");
			System.out.println("Das gesuchte Wort war: " + geheimwort);
		}
		
		nochmal();
	}
	
	String umwandelnArray(char[] verschluesseltArray, String ausgabeArray) {
		for(int i = 0; i < verschluesseltArray.length; i++) {
			ausgabeArray += verschluesseltArray[i];
		}
		return ausgabeArray;
	}

	void nochmal() {
		double nochmal = einlesenDouble("\nNochmal? (1 = Ja | 2 = Nein)");
		
		if(nochmal == 1) {
			new WoerterRaten().top();
		} else {
			System.out.println("Programm beendet!");
			System.exit(0);
		}
	} 
	
	public static void main(String[] args) {
		new WoerterRaten().top();
	}

}
                

Lösung von: Name nicht veröffentlicht

// NET 6.x | C# 10.x | VS-2022

const int MaxAnzahlFehlversuche = 7;

Console.Write("Bitte ein Wort (min. 4 Buchstaben [a-z]) verdeckt eingeben: ");
var suchwort = Console.ReadLine();
if (string.IsNullOrEmpty(suchwort) || suchwort.Length < 4 || new System.Text.RegularExpressions.Regex(@"[^a-zA-Z]").IsMatch(suchwort)) {
    Console.WriteLine("Das Wort entspricht nicht den Vorgaben!");
    return;
}
Console.Clear();

var arrSuchwort = suchwort.ToUpper().ToCharArray();
var arrGeloest = new char[arrSuchwort.Length].Select(x => x = '*').ToArray();
var lstBereitsGeraten = new List<char>();
var anzFehlversuche = 0;

Console.WriteLine(string.Join("", arrGeloest));

while (arrGeloest.Contains('*') && anzFehlversuche < MaxAnzahlFehlversuche) {
    Console.Write("\nBitte Buchstaben eingeben: ");
    var eingabe = Console.ReadLine();
    if (string.IsNullOrEmpty(eingabe)) continue;
    var zeichen = char.ToUpper(eingabe[0]);

    if (lstBereitsGeraten.Contains(zeichen)) {
        Console.Write("Buchstabe wurde schon mal gewählt. ");
        Console.WriteLine($"[{string.Join(", ", lstBereitsGeraten.OrderBy(x => x))}]");
        continue;
    }

    if (arrSuchwort.Contains(zeichen)) {
        for (var i = 0; i < arrSuchwort.Length; i++)
            if (zeichen == arrSuchwort[i])
                arrGeloest[i] = zeichen;
        Console.WriteLine(string.Join("", arrGeloest));
    }
    else {
        anzFehlversuche++;
        Console.WriteLine($"Buchstabe nicht vorhanden!\nFehlversuche: {anzFehlversuche}");
    }

    lstBereitsGeraten.Add(zeichen);
}

if (anzFehlversuche <= MaxAnzahlFehlversuche && !arrGeloest.Contains('*'))
    Console.WriteLine($"\nGlückwunsch! Sie haben gewonnen. Anzahl Fehlversuche: {anzFehlversuche}");
else
    Console.WriteLine("\nSie haben leider verloren! Zu viele Fehlversuche.");

Console.WriteLine($"\nDas gesuchte Wort war: {new string(arrSuchwort)}");
                

Lösung von: Jens Kelm (@JKooP)

// eingabemaske
document.write(`
  <input type="text" id="word" value=""><br>
  <div id="info"></div>
`);

let guesses = 10,
    riddle = '', mask = '',
    word = document.getElementById('word'),
    info = document.getElementById('info'),
    wrongL = [], solvedL = [];

// nach belieben erweiterbar,
// nur demo
let wordlist = [
  'AKTENTASCHENAKNE',
  'ANGSTSCHWEISS',
  'BEINAHZUSAMMENSTOSS',
  'KNICKERBOCKERHOSE',
  'MILCHMAEDCHENRECHNUNG',
  'VEXIERREIMSAMMELBUCH',
  'WALDEINSAMKEITSSEHNSUCHT',
];

function init() {
  // rätselwort auswählen
  riddle = riddle || wordlist[Math.ceil(Math.random() * wordlist.length-1)];
  // maske und info setzen
  for (let i = 0; i < riddle.length; i++) mask += '•';
  word.value = mask;
  info.innerHTML = (`Verbleibende Versuche: ${guesses}`);
}

function refresh() {
  mask = '';
  for (let i = 0; i < riddle.length; i++)
    if (solvedL.indexOf(riddle[i]) != -1) mask += riddle[i];
    else mask += '•';
  word.value = mask;
  info.innerHTML = (`Verbleibende Versuche: <b>${guesses}</b><br>`);
  if (wrongL.length > 0) info.innerHTML += (`Falsche Eingaben: ${wrongL.sort().join(', ')}`);
}

function checkInput(char) {
  // keine versuche übrig
  if (guesses == 0) {
    word.value = riddle;
    info.innerHTML = ('<b>Spiel vorbei!</b>');
  } else {
    // buchstabe vorhanden
    if (riddle.indexOf(char) != -1) solvedL.push(char);
    else {
      wrongL.push(char);
      guesses--;
    }
  }
  refresh();  
  if (word.value.indexOf('•') == -1) info.innerHTML = ('<b>RICHTIG!</b>');
}

if (window.confirm('Benutzdefiniertes Rätsel, Spielerin 1?'))
  riddle = window.prompt('Hier das Rätsel eingeben:').toUpperCase();
document.onload = init();
document.onkeyup = function(e) { checkInput(e.key.toUpperCase()); }

                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 2-4
Schwierigkeit: k.A.
Webcode: o2wh-jaz5
Autor: Philipp G. Freimann (BBW (Berufsbildungsschule Winterthur) https://www.bbw.ch)

Zu Aufgabenblatt hinzufügen