1. #1
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.080
    Thanked 9.118 Times in 2.995 Posts
    Blog Entries
    5

    Standard Siebzehn und Vier

    Schwierigkeit:
    Aufgabenstellung:
    Das Spiel Siebzehn und Vier soll vereinfacht als Konsolenanwendung realisiert werden.
    Dazu wird beim Ziehen einer Karte eine Zufallszahl im Intervall [1; 11] generiert, die dann den Wert der gezogenen Karte darstellt.
    Nach jedem Zug hat der Nutzer die Möglichkeit, das Spiel zu beenden oder eine weitere Karte zu ziehen.
    Ziel des Spiels ist es, möglichst nah an 21 heran zu kommen. Erreicht man mehr als 21 Punkte, hat man verloren.

    Beispielscreenshots aus der fertigen Anwendung:

    Verloren:

    Name:  17u4-loose.png
Hits: 342
Größe:  28,4 KB

    Gewonnen:

    Name:  17u4-win.png
Hits: 365
Größe:  29,8 KB


    Lösung (C++):


    Spoiler:


    #include <iostream>
    #include <conio>
    using namespace std;

    void main() {
    cout << "Ziehen Sie Karten, aber bleiben Sie unter 22 Punkten!\n";
    cout << "Die Karten haben zwischen 1 und 11 Punkten.\n\n";

    randomize();
    int Karten = 0;
    char Eingabe = ' ';
    do {
    int Zahl = 0;
    do {
    Zahl = random(12);
    }while(Zahl == 0);

    Karten += Zahl;

    if(Karten < 22) {
    cout << "Karte: " << Zahl << " Punkte. Weitere Karte ziehen? (j)? ";
    Eingabe = getch();
    }else {
    cout << "Karte: " << Zahl << " Punkte.";
    }

    cout << endl;
    } while(Eingabe == 'j' && Karten < 22);

    if(Karten < 22) {
    cout << "\nSie haben mit " << Karten << " Punkten beendet.";
    } else {
    cout << "\nVERLOREN! Sie haben " << Karten << " Punkte!";
    }

    getch();
    }



  2. #2
    Avatar von Snees
    Registriert seit
    18.11.2011
    Beiträge
    1.001
    Thanked 590 Times in 319 Posts

    Standard AW: Siebzehn und Vier

    C#-Klasse:
    Spoiler:


    using System;

    namespace SiebzehnUndVier
    {
    class SiebzehnUndVier
    {
    private int Karten, Zahl;
    private string Eingabe;
    private Random rnd = new Random();

    public SiebzehnUndVier()
    {
    Play();
    Console.ReadKey();
    }

    private void Play()
    {
    Console.WriteLine("Ziehen Sie Karten, aber bleiben Sie unter 22 Punkten!");
    Console.WriteLine("Die Karten haben zwischen 1 und 11 Punkten.\n");
    do
    {
    Zahl = 0;
    do
    {
    Zahl = rnd.Next(1, 12);
    }
    while (Zahl == 0);
    Karten += Zahl;
    if (Karten < 22)
    {
    Console.WriteLine("Karte: " + Zahl + " Punkte. Weitere Karte ziehen? (j)?");
    Eingabe = Console.ReadLine();
    }
    else
    {
    Console.WriteLine("Karte: " + Zahl + " Punkte.");
    }
    }
    while (Eingabe == "j" && Karten < 22);
    if (Karten < 22)
    {
    Console.WriteLine("\nSie haben mit " + Karten + " Punkten beendet.");
    }
    else
    {
    Console.WriteLine("\nVERLOREN! Sie haben " + Karten + " Punkte!");
    }
    }
    }
    }


  3. #3
    Avatar von Mentos
    Registriert seit
    18.11.2011
    Beiträge
    451
    Thanked 498 Times in 240 Posts

    Standard AW: Siebzehn und Vier

    Zitat Zitat von Snees Beitrag anzeigen
    C#-Klasse:
    Spoiler:


    using System;

    namespace SiebzehnUndVier
    {
    class SiebzehnUndVier
    {
    private int Karten, Zahl;
    private string Eingabe;
    private Random rnd = new Random();

    public SiebzehnUndVier()
    {
    Play();
    Console.ReadKey();
    }

    private void Play()
    {
    Console.WriteLine("Ziehen Sie Karten, aber bleiben Sie unter 22 Punkten!");
    Console.WriteLine("Die Karten haben zwischen 1 und 11 Punkten.\n");
    do
    {
    Zahl = 0;
    do
    {
    Zahl = rnd.Next(1, 12);
    }
    while (Zahl == 0);
    Karten += Zahl;
    if (Karten < 22)
    {
    Console.WriteLine("Karte: " + Zahl + " Punkte. Weitere Karte ziehen? (j)?");
    Eingabe = Console.ReadLine();
    }
    else
    {
    Console.WriteLine("Karte: " + Zahl + " Punkte.");
    }
    }
    while (Eingabe == "j" && Karten < 22);
    if (Karten < 22)
    {
    Console.WriteLine("\nSie haben mit " + Karten + " Punkten beendet.");
    }
    else
    {
    Console.WriteLine("\nVERLOREN! Sie haben " + Karten + " Punkte!");
    }
    }
    }
    }


    do
    {
    Zahl = rnd.Next(1, 12);
    }
    while (Zahl == 0);


    Kann mit

    Zahl = rnd.Next(1, 12);


    Ersetzt werden, da Zahl niemald den Wert von 0 annehmen wird, da du bei .Next als Minimum-Wert 1 angegeben hast.
    MfG
    „Es sind nicht unsere Fähigkeiten, die zeigen, wer wir wirklich sind, es sind unsere Entscheidungen.“
    - Albus Dumbledore, Harry Potter 2


    /guestchat registerGuest

  4. #4

    Registriert seit
    21.01.2013
    Beiträge
    130
    Thanked 241 Times in 47 Posts

    Standard AW: Siebzehn und Vier

    Für die ganz schlauen rand 1/11 ist falsch, da 1 gleichwertig mit 11 ist. ASS
    Daher wer es richtig programmieren will, beachtet diesen Fall mit!

  5. #5
    Avatar von Mentos
    Registriert seit
    18.11.2011
    Beiträge
    451
    Thanked 498 Times in 240 Posts

    Standard AW: Siebzehn und Vier

    Die Aufgabe war aber anders gestellt. Außerdem besteht das Deck doch nur aus 22 Karten, oder?
    Also kann bspw. auch nicht 3x eine 3 kommen, was auch außenvor gelassen wird
    „Es sind nicht unsere Fähigkeiten, die zeigen, wer wir wirklich sind, es sind unsere Entscheidungen.“
    - Albus Dumbledore, Harry Potter 2


    /guestchat registerGuest

  6. #6

    Registriert seit
    19.11.2011
    Beiträge
    496
    Thanked 412 Times in 268 Posts

    Standard AW: Siebzehn und Vier

    Für die ganz schlauen rand 1/11 ist falsch, da 1 gleichwertig mit 11 ist. ASS
    Daher wer es richtig programmieren will, beachtet diesen Fall mit!
    Siebzehn und Vier und BlackJack sind ähnlich, aber nicht gleich. Bei letzterem kann das Ass als 1 oder 11 gewertet werden, bei Siebzehn und Vier ist es immer 11.

  7. #7

    Registriert seit
    21.01.2013
    Beiträge
    130
    Thanked 241 Times in 47 Posts

    Standard AW: Siebzehn und Vier

    Jede Karte gibt es 4x
    Den Zahlenwert 10 gibt es auch mehrmals im Deck
    10,B,D,K

    also 16 die 10 im Deck.

    Schlauer wäre gewesen dann alle Karten in eine Liste zu setzen, und dann zu shufflen und die erste von oben zu nehmen... (man kann da ruhig nochmals shuffeln danach ist aber egal)



    Bei Verwendung von 52 Blatt zählen

    Ass elf Augen (niemals eins),
    König, Dame und Bube jeweils zehn Augen

    und die Zahlenkarten gemäß ihrem aufgedruckten Wert.

    Das beste Ergebnis sind 21 Punkte mit zwei Karten, eine geborene Einundzwanzig also Ass und Bild, bzw. Ass und Zehn, und gewinnt vielfach im Verhältnis 2:1.

    Hat jedoch der Bankhalter 21 Punkte mit zwei Karten, so müssen die Spieler doppelt zahlen. Ein Spieler, der selbst 21 Punkte mit zwei Karten besitzt, verliert in diesem Fall aber nur einfach.

    Bei Verwendung von 32 Blatt zählen

    Daus oder Ass elf Augen (niemals eins),
    König vier Augen,
    Ober oder Dame drei Augen,
    Unter oder Bube zwei Augen

    und die Zahlenkarten (10, 9, 8, 7) gemäß ihrem aufgedruckten Wert.

    Beim Spiel mit 32 Karten gilt als bestes Ergebnis vielfach eine Hand bestehend aus zwei Assen (Feuer), diese zählen dann nicht als 22 Punkte, sondern gewinnen je nach Vereinbarung doppelt oder einfach.

    Die Farben haben keinerlei Bedeutung.

  8. #8
    Avatar von Imperativ
    Registriert seit
    08.08.2013
    Beiträge
    30
    Thanked 10 Times in 9 Posts

    Standard AW: Siebzehn und Vier

    Python-Code:

    Spoiler:
    PHP-Code:
    # 17 und 4
    import random
    import time


    def main
    ():
        
    sTitle "\t- 17 und 4 -\n\n"
        
    sRules "Regeln:\nZiehen Sie Karten, aber bleiben Sie unter 22 Punkten!\nDie Karten haben Werte von 1 bis 11.\n\n"
        
    iCurrentValue 0
        iRandom 
    random.randint(111)
        
    bGame True

        
    print(sTitlesRules)

        while 
    bGame == True:
            
    iCurrentValue += iRandom
            
    print("Karte: %i" % (iCurrentValue))
            

            if 
    iCurrentValue == 21:
                print(
    "Gewonnen! Sie haben genau 21 Punkte!")
                
    time.sleep(2)
                
    del iCurrentValue
                
    break
            
    elif iCurrentValue 21:
                print(
    "Verloren! Mit %i sind Sie über 21!" % (iCurrentValue))
                
    time.sleep(2)
                
    del iCurrentValue
                
    break

            print(
    "Aufhören? <j> ([ENTER] zum Fortsetzen)")
            
    inQuit input()

            if 
    inQuit == 'j':
                print(
    "Sie sind mit %i Punkten aus dem Spiel ausgestiegen." % (iCurrentValue))
                
    time.sleep(2)
                
    del iCurrentValue
                
    break

    main() 



    Erstes "Programm" überhaupt
    Danke für die Inspiration.


    Gruß

    Imperativ
    Geändert von Imperativ (11.08.2013 um 11:45 Uhr)

Ähnliche Themen

  1. Max Payne 3 - Nur noch vier anstatt sechs DLCs
    Von gtabutton im Forum Gaming-News
    Antworten: 1
    Letzter Beitrag: 01.08.2012, 19:34
  2. Familienvater tötet seine vier Kinder!
    Von Waterpolo im Forum RealLife News
    Antworten: 3
    Letzter Beitrag: 15.06.2012, 17:03
  3. Vier Jahre Haft für Botnetz-Betreiber
    Von rVs14 im Forum IT & Technik News
    Antworten: 2
    Letzter Beitrag: 25.05.2012, 16:57

Stichworte

Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.