2016-07-20 12 views
1

Ich habe Mühe, herauszufinden, wie man dieses Programm in einen zwischen zwei Spielern umwandeln kann, anstatt nur den Dealer und mich. Soll es irgendwie eine Schleife bilden, die erste Wiederholung der Schleife an Spieler 1 und dann die andere an Spieler 2? Ich bin mir nicht sicher, wie ich es zum Laufen bringen soll.Wie erstelle ich ein Blackjack-Spiel als Simulation zwischen zwei Spielern?

def main(): 
    deck = create_deck() 

    num_cards = int(input('How many cards should I deal? ')) 

    deal_cards(deck, num_cards) 

def create_deck(): 
    deck = {'Ace of Spades':1, '2 of Spades':2, '3 of Spades':3, 
      '4 of Spades':4, '5 of Spades':5, '6 of Spades':6, 
      '7 of Spades':7, '8 of Spades':8, '9 of Spades':9, 
      '10 of Spades':10, 'Jack of Spades':10, 
      'Queen of Spades':10, 'King of Spades': 10, 
      'Ace of Hearts':1, '2 of Hearts':2, '3 of Hearts':3, 
      '4 of Hearts':4, '5 of Hearts':5, '6 of Hearts':6, 
      '7 of Hearts':7, '8 of Hearts':8, '9 of Hearts':9, 
      '10 of Hearts':10, 'Jack of Hearts':10, 
      'Queen of Hearts':10, 'King of Hearts': 10, 'Ace of Clubs':1, 
      '2 of Clubs':2, '3 of Clubs':3, '4 of Clubs':4, '5 of Clubs':5, 
      '6 of Clubs':6,'7 of Clubs':7, '8 of Clubs':8, '9 of Clubs':9, 
      '10 of Clubs':10, 'Jack of Clubs':10, 
      'Queen of Clubs':10, 'King of Clubs': 10, 
      'Ace of Diamonds':1, '2 of Diamonds':2, '3 of Diamonds':3, 
      '4 of Diamonds':4, '5 of Diamonds':5, '6 of Diamonds':6, 
      '7 of Diamonds':7, '8 of Diamonds':8, '9 of Diamonds':9, 
      '10 of Diamonds':10, 'Jack of Diamonds':10, 
      'Queen of Diamonds':10, 'King of Diamonds': 10} 

    return deck 

def deal_cards(deck, number): 
    hand_value = 0 

    if number > len(deck): 
     number = len(deck) 

    for count in range(number): 
     card, value = deck.popitem() 
     print(card) 
     hand_value += value 

     print('Value of this hand:', hand_value) 

main() 
+0

Sie haben nicht den Code eingegeben, den Sie gefragt haben ... Das Fleisch und die Kartoffeln dieses Beispiels, das Sie betrachten, sind wahrscheinlich in der 'main()' Funktion – Aaron

+0

Nicht ganz sicher, was Sie meinen, "Ich habe Ich habe versucht, herauszufinden, wie man dieses Programm in ein Spiel zwischen zwei Spielern umwandeln kann, anstatt nur mit dem Dealer und mir. " Das habe ich gesagt. –

+0

Das ist ein Problem - Was ist Ihre spezifische Programmierfrage? "Ich bin mir nicht sicher, wie es funktioniert" ist keine Rechenschaftspflicht. – csmckelvey

Antwort

1

Ich schlage vor, die versuchen, etwas wie folgt aus:

import random 

deck = {'Ace of Spades':1, '2 of Spades':2, '3 of Spades':3, 
     '4 of Spades':4, '5 of Spades':5, '6 of Spades':6, 
     '7 of Spades':7, '8 of Spades':8, '9 of Spades':9, 
     '10 of Spades':10, 'Jack of Spades':10, 
     'Queen of Spades':10, 'King of Spades': 10, 
     'Ace of Hearts':1, '2 of Hearts':2, '3 of Hearts':3, 
     '4 of Hearts':4, '5 of Hearts':5, '6 of Hearts':6, 
     '7 of Hearts':7, '8 of Hearts':8, '9 of Hearts':9, 
     '10 of Hearts':10, 'Jack of Hearts':10, 
     'Queen of Hearts':10, 'King of Hearts': 10, 'Ace of Clubs':1, 
     '2 of Clubs':2, '3 of Clubs':3, '4 of Clubs':4, '5 of Clubs':5, 
     '6 of Clubs':6,'7 of Clubs':7, '8 of Clubs':8, '9 of Clubs':9, 
     '10 of Clubs':10, 'Jack of Clubs':10, 
     'Queen of Clubs':10, 'King of Clubs': 10, 
     'Ace of Diamonds':1, '2 of Diamonds':2, '3 of Diamonds':3, 
     '4 of Diamonds':4, '5 of Diamonds':5, '6 of Diamonds':6, 
     '7 of Diamonds':7, '8 of Diamonds':8, '9 of Diamonds':9, 
     '10 of Diamonds':10, 'Jack of Diamonds':10, 
     'Queen of Diamonds':10, 'King of Diamonds': 10} 

def value(hand): 
    hand_value = 0 
    for i in hand: 
     hand_value += deck[i] 
    return hand_value 


def main(): 
    keys = list(deck) 
    random.shuffle(keys) 

    player1_hand = [] 
    player2_hand = [] 
    #dealing to player 1 
    while True: 
     print ("Player 1's hand is ", player1_hand, "The value is ", value(player1_hand)) 
     response = int(input('How many cards should I deal to player1? ')) 
     if response == 0: 
      break 
     else: 
      for i in range(int(response)): 
       player1_hand.append(keys.pop()) 
    #dealing to player 2 
    while True: 
     print ("Player 2's hand is ", player2_hand, "The value is ", value(player2_hand)) 
     response = int(input('How many cards should I deal to player2? ')) 
     if response == 0: 
      break 
     else: 
      for i in range(int(response)): 
       player2_hand.append(keys.pop()) 
    print (player1_hand, value(player1_hand)) 
    print (player2_hand, value(player2_hand)) 
if __name__ == "__main__": 
    main() 

Einige Änderungen: 1) Die create_deck Funktion nicht notwendig ist, weil es nur eine unveränderliche Variable gibt, so dass es entfernt wurde. 2) Random.shuffle wird auf dem Deck verwendet, so dass das Spiel nicht immer das gleiche ist. 3) 'if name == main' hinzugefügt. Dies ist eine einfache Formel, wo Spieler 1 so viele Karten bekommt, wie sie wollen, dann macht Spieler 2 dasselbe. Sie können die while-Schleifen für den Handel umschlingen oder eine separate Funktion schreiben, um die Anzahl der Runden zu bestimmen. Sie können auch versuchen, viele neue Liniencharaktere zu drucken, nachdem ein Spieler ausgeteilte Karten erhalten hat, damit der andere Spieler nicht sehen kann, was ihm ausgeteilt wurde.

+0

Ich fragte mich, wie man in meinen alten Code zufällig einführt. Aus irgendeinem Grund würde das Ding nicht funktionieren, wenn ich es testete. Ich habe nicht daran gedacht, die Werte als separate Wörterbücher für jeden Spieler zu speichern. Vielen Dank. Dies macht es viel einfacher zu verstehen. –

+0

Ich habe den Code getestet und kann aus irgendeinem Grund nicht zu Player 2 gelangen, er läuft nur mit Player 1 und dann mit Loops. –

+0

Es geht an den zweiten Spieler, wenn der erste Spieler 0 Karten austeilt. Das ist der Haken 'if response == 0: break'. Die Eingabe für 'Antwort' könnte in etwas wie 'Möchten Sie eine andere Karte (Ja/Nein)' geändert werden? und mit einem "Ja" erhält der Spieler eine Karte und bei einem "Nein" bricht die Schleife. – Sarthax

1

Der Code, den Sie nur geschrieben Umgang eine vom Benutzer angegebene Anzahl von Karten (sie sind nicht zufällig durch die Art und Weise behandelt werden), dessen Wert summiert, und endet. Wenn Sie dieses Spiel wollen kontinuierlich Karten auszuteilen, haben Sie eine Schleife in der Hauptfunktion hinzufügen, etwa so:

def main(): 
    deck = create_deck() 
    while True: 

     num_cards = int(input('How many cards should I deal? ')) 

     deal_cards(deck, num_cards) 

Beachten Sie, dass dies nicht Karten zwischen Angeboten summieren. Dazu müssen Sie in der Hauptfunktion eine Variable wie p1 oder p2 erstellen und diese in deal_cards übergeben. Ich bin mir nicht ganz sicher ob das das ist was du willst.

+0

Danke, das wird mich in die richtige Richtung weisen. Wenn ich zufällig importiere, wäre ich in der Lage, die Karten zufällig zu verteilen? –

+0

siehe http://stackoverflow.com/questions/4809044/removing-items-randomly-from-a-dictionary für, wie man zufällig behandelt –

Verwandte Themen