2012-07-30 14 views
5

मैं अजगर के लिए बहुत नया हूं और थोड़ी देर के लिए पाइथन पर एक मल्टीप्लेयर ब्लैकजैक गेम बनाने की कोशिश कर रहा हूं। मैं बहुत सारी समस्याओं और बहुत सारी समस्याओं में भाग रहा हूं और सोच रहा था कि क्या आप लोग उनके साथ मेरी मदद कर सकते हैं।एक मल्टीप्लेयर ब्लैकजैक गेम बनाना

import random 

def total(hand): 
    aces = hand.count(11) 
    t = sum(hand) 
    if t > 21 and aces > 0: 
     while aces > 0 and t > 21: 
      t -= 10 
      aces -= 1 
    return t 

Cards = ["2H", "3H", "4H", "5H", "6H", "7H", "8H", "9H", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "10C", "2S", "3S", "4S", "5S", "6S", "7S", "8S", "9S", "10S", "2D", "3D", "4D", "5D", "6D", "7D", "8D", "9D", "10D", "AH", "JH", "QH", "KH", "AC", "JC", "QC", "KC", "AS", "JS", "QS", "KS", "AD", "JD", "QD", "KD"] 

Cards[35] = 11 
Cards[36] = 10 
Cards[37] = 10 
Cards[38] = 10 
Cards[39] = 11 
Cards[40] = 10 
Cards[41] = 10 
Cards[42] = 10 
Cards[43] = 11 
Cards[44] = 10 
Cards[45] = 10 
Cards[46] = 10 
Cards[47] = 11 
Cards[48] = 10 
Cards[49] = 10 
Cards[50] = 10 

Players = raw_input("How many players are there?") 
for i in range Players: 
    Player i = [] 
    Player i.append(choice(Cards)) 
    Player i.append(choice(Cards)) 
    tp = total(player) 
    print "Player" + i + "Cards: " + Player i + "," + "total: " + tp 
    hitorstand = raw_input("hit (h) or stand (s)?") 
    if hitorstand == "h": 
     Player i.append(choice(cards)) 
     print ("hit (h) or stand (s)?") 
    elif hitorstand == "s": 
     break 
    else print "Please enter h or s" 

dealer = [] 
While True: 
    dealer.append(choice(cards)) 
    dealer.append(choice(cards)) 
    td = total(dealer) 
    while td > 17: 
     dealer.append(choice(cards)) 
    else: 
     break 
if td < tp < 21: 
    "Player i wins" 
else print "dealer wins" 

यह मेरे पास अब तक है। मैं समझता हूं कि बहुत सारे गड़बड़ी और कोड हैं जो काम नहीं करेंगे। मैं सोच रहा था कि क्या आप लोग मुझे बता सकते हैं कि कोड के साथ क्या गलत है और शायद इसे ठीक करने के तरीके पर कुछ विकल्प सुझाएं।

मेरे मुख्य चिंता अभी:

  1. मैं एक "मल्टीप्लेयर" ब्लैकजैक खेल बना रहा हूँ। मुझे नहीं पता कि मुझे मल्टीप्लेयर ब्लैकजैक गेम के लिए लूप बनाना है। मेरे कोड में, मैंने पूछा कि कितने लोग खेल रहे हैं। जानने के बिना मैं गेम के लिए लूप कैसे बना सकता हूं?

    इसके अलावा, मैं यह जानने के बिना विजेता को खोजने के लिए एक फ़ंक्शन कैसे बना सकता हूं कि कितने खिलाड़ी खेल रहे हैं?

  2. बाद मैं टाइप

    Players = raw_input("How many players are there?") 
    for i in range Players: 
    

    Players पाश के लिए में में मुझे एक सिंटैक्स त्रुटि देता है। गलत क्या है?

एक अद्यतन के रूप में, मैं तुम्हें एक सूची बनाने के बारे में क्या कहा के बारे में सोचा है और मैं अभी भी वास्तव में समझ में नहीं आता कि कैसे मैं के बारे में विजेता पता लगाने के लिए एक कोड बनाने जाना चाहिए।

उदाहरण

के लिए

भले ही मैं एक सूची बनाने, अगर मैं नहीं जानता कि कितने खिलाड़ी वास्तव में खेल रहे हैं, मैं इस सूची में तत्वों की तुलना करने में सक्षम नहीं होगा। अगर मुझे पता था कि कितने लोगों को, खेल रहे थे

playerlist = [1,2,3] 

मैं कह सकता हूँ

if playerlist[0] > playerlist[1], playerlist[2] and playerlist[0] < 21: 
    then print "player 1 wins!" 

लेकिन चूंकि मैं पता नहीं चलेगा कि कितने लोगों को वास्तव में उपयोगकर्ता इनपुट में प्रकार जब तक खेल रहे हैं, मैं खो रहा हूँ मैं विजेता के लिए कोड कैसे लिखना चाहता हूं।

मुझे नहीं पता कि "यह बाकी की तुलना में बड़ा है" कहने का कोई तरीका है या नहीं। मुझे केवल इतना कहना है कि "अगर यह उससे बड़ा है"।

क्या पाइथन में "अगर यह बाकी से बड़ा है" कहने का कोई तरीका है? यदि नहीं, तो क्या आप मुझे विजेता को खोजने के लिए कोड बनाने के लिए कुछ सुझाव दे सकते हैं?

+4

यह 'रेंज में खिलाड़ियों के लिए' नहीं होना चाहिए, न कि 'मैं रेंज प्लेयर में'। – Ryan

+0

ब्लैकजैक प्रश्नों के साथ क्या है? http://stackoverflow.com/questions/11724954/how-do-i-separate-each-list-for-a-player-in-the-blackjack-game#comment15557653_11724954 – Benjamin

उत्तर

2
  1. आप अपने "प्लेयर" चर के साथ सही रास्ते पर हैं। यदि आप वहां खिलाड़ियों की संख्या का प्रतिनिधित्व करने वाले int को संग्रहीत करते हैं, तो जब भी आप कुछ ऐसा करना चाहते हैं जिसे खिलाड़ियों की संख्या जानने की आवश्यकता हो, तो इसके बजाय प्लेयर्स चर का उपयोग करें। उदाहरण के लिए, आप एक लूप के लिए लिख सकते हैं जो उस समय की संख्या को पुन: सक्रिय करता है (जैसा कि आप पहले ही प्राप्त कर चुके हैं)। खिलाड़ियों पर फिर से शुरू करने के लिए, आपको उन्हें किसी प्रकार की डेटा संरचना (शायद एक सूची) में रखना होगा।

    playerList = [] 
    for i in range(Players): 
        playerList[i] = [whateverDataYouWantToStoreAboutEachPlayer] 
    

    उसके बाद, आप playerList [i] का हवाला देते हुए पाश के लिए एक में प्रत्येक खिलाड़ी का उपयोग कर सकते हैं:

    एक बार जब आप खिलाड़ियों की संख्या पता है, तुम ऊपर इस तरह सूची सेट कर सकते हैं। इस तरह, आप समय से पहले खिलाड़ियों की संख्या जानने के बिना प्रत्येक खिलाड़ी के लिए चीजें कर सकते हैं।

  2. जब आप raw_input का उपयोग करते हैं, तो इनपुट स्ट्रिंग के रूप में संग्रहीत होता है। इसे एक int के रूप में उपयोग करने के लिए (जिस तरह से आप इसका उपयोग करना चाहते हैं), आपको इसे पहले रूपांतरित करना होगा। आप

    Players = int(Players) 
    

    के साथ ऐसा कर सकता है, हालांकि यह सुरक्षित होगा पहले, यह सुनिश्चित करें कि संख्या उपयोगकर्ता द्वारा दर्ज किया वास्तव में एक संख्या है बनाने के लिए

    while not Players.isdigit(): 
        Players = raw_input("Please enter an integer: ") 
    Players = int(Players) 
    

    इसके अलावा में के रूप में, के रूप में minitech कहा (और के रूप में दिखाया उपर्युक्त), आपको केवल खिलाड़ियों की बजाय रेंज (खिलाड़ियों) पर फिर से शुरू करने की आवश्यकता है, क्योंकि इससे 0 से खिलाड़ियों के लिए संख्याओं की एक सूची बनाई जाएगी, और आप केवल उस डेटा पर फिर से सक्रिय हो सकते हैं जो किसी अनुक्रम प्रारूप में है।

संपादित करें (अनुवर्ती सवाल का जवाब देने):

highestIndex = 0 
    for i in range(Players): 
     if PlayerList[i] > playerList[highestIndex]: 
      highestIndex = i 

पर: आप आप देख पूरी बात से अधिक पुनरावृत्ति और सबसे बड़ा मान का ट्रैक रखने के द्वारा सूची में सबसे बड़ा मान पा सकते हैं अंत, उच्चतम इंडेक्स उच्चतम स्कोर वाले खिलाड़ी की सूची में इंडेक्स रखेगा।

पायथन में एक अंतर्निहित फ़ंक्शन, अधिकतम() है, जो आपको एक सूची में अधिकतम मूल्य प्रदान करेगा। यह आपको उस मूल्य का स्थान नहीं देगा, हालांकि, इस मामले में उपयोग करना अधिक बोझिल होगा।

संबंधित मुद्दे