2012-07-30 38 views
5

Tôi rất mới với python và đã cố gắng tạo trò chơi blackjack nhiều người chơi trên python trong một thời gian. Tôi đã gặp rất nhiều vấn đề và tự hỏi liệu các bạn có thể giúp tôi với họ không.Tạo trò chơi blackjack nhiều người chơi

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" 

Đây là những gì tôi có cho đến nay. Tôi hiểu có rất nhiều ngữ pháp và mã không hoạt động. Tôi đã tự hỏi nếu các bạn có thể cho tôi biết những gì là sai với mã và có thể đề nghị một số tùy chọn về cách sửa chữa nó.

mối quan tâm chính của tôi ngay bây giờ:

  1. Tôi đang thực hiện một "multiplayer" blackjack trò chơi. Tôi không biết làm cách nào để tạo vòng lặp cho trò chơi blackjack nhiều người chơi. Trong mã của tôi, tôi hỏi có bao nhiêu người đang chơi. Làm cách nào để tạo vòng lặp cho trò chơi mà không biết số số sẽ là bao nhiêu?

    Ngoài ra, làm cách nào để tạo một hàm để tìm ra người chiến thắng mà không biết có bao nhiêu người chơi đang chơi?

  2. Sau khi tôi gõ vào

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

    Các Players trong vòng lặp for mang lại cho tôi một lỗi cú pháp. Chuyện gì thế?

Như một bản cập nhật, tôi đã suy nghĩ về những gì bạn nói về thực hiện một danh sách và tôi vẫn không thực sự hiểu thế nào tôi nên đi về thực hiện một mã để tìm ra người chiến thắng.

ví dụ

ngay cả khi tôi thực hiện một danh sách, nếu tôi không biết có bao nhiêu người chơi đang thực sự chơi, tôi sẽ không thể để so sánh các yếu tố trong danh sách. Nếu tôi biết có bao nhiêu người đang chơi,

playerlist = [1,2,3] 

tôi có thể nói

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

Nhưng kể từ khi tôi sẽ không biết có bao nhiêu người đang chơi cho đến khi người dùng thực sự loại trong đầu vào, tôi bị mất như thế nào tôi phải viết mã cho người chiến thắng.

Tôi không biết nếu có cách nói "nếu điều này lớn hơn phần còn lại". Tôi chỉ biết nói "nếu điều này lớn hơn thế".

Có cách nào để nói "nếu điều này lớn hơn phần còn lại" trong python không? Nếu không, bạn có thể cho tôi một số gợi ý để tạo mã để tìm ra người chiến thắng không?

+4

Nó phải là 'cho tôi trong phạm vi (Người chơi)', không phải 'cho tôi trong phạm vi Người chơi'. – Ryan

+0

Câu hỏi về blackjack là gì? http://stackoverflow.com/questions/11724954/how-do-i-separate-each-list-for-a-player-in-the-blackjack-game#comment15557653_11724954 – Benjamin

Trả lời

2
  1. Bạn đang đi đúng hướng với biến "Người chơi". Nếu bạn lưu trữ một int đại diện cho số lượng người chơi ở đó, sau đó bất cứ lúc nào bạn muốn làm điều gì đó cần phải biết số lượng người chơi, chỉ cần sử dụng biến Người chơi thay thế. Ví dụ, bạn có thể viết một vòng lặp for lặp lại số lần đó (như bạn đã gần như đã có). Để lặp lại các trình phát, bạn cần đặt chúng trong một số loại cấu trúc dữ liệu (có thể là danh sách).

    Một khi bạn biết số lượng người chơi, bạn có thể thiết lập danh sách như thế này:

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

    Sau đó, bạn có thể truy cập vào mỗi người chơi trong một vòng lặp for bằng cách tham khảo playerList [i]. Bằng cách đó, bạn có thể làm mọi thứ cho mỗi người chơi mà không biết số lượng người chơi trước thời hạn.

  2. Khi bạn sử dụng raw_input, đầu vào được lưu dưới dạng chuỗi. Để sử dụng nó như là một int (đó là cách bạn muốn sử dụng nó), bạn cần phải chuyển đổi nó đầu tiên. Bạn có thể làm điều này với

    Players = int(Players) 
    

    mặc dù nó sẽ được an toàn hơn để trước tiên hãy chắc chắn rằng số lượng người dùng nhập thực sự là một con số, như trong

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

    Ngoài ra, như minitech nói (và như ở trên), bạn cần phải lặp qua phạm vi (Người chơi), thay vì chỉ Người chơi, vì điều đó sẽ tạo danh sách các số từ 0 đến Người chơi-1 và bạn chỉ có thể lặp qua dữ liệu trong một số loại định dạng chuỗi.

EDIT (trả lời câu hỏi theo dõi): Bạn có thể tìm giá trị lớn nhất trong danh sách bằng cách duyệt qua toàn bộ điều và theo dõi các giá trị lớn nhất mà bạn nhìn thấy:

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

Tại cuối cùng, cao nhất sẽ giữ chỉ số trong danh sách các cầu thủ có số điểm cao nhất.

Python cũng có hàm dựng sẵn, hàm max(), sẽ cung cấp cho bạn giá trị tối đa trong danh sách. Tuy nhiên, nó sẽ không cung cấp cho bạn vị trí của giá trị đó, vì vậy nó sẽ cồng kềnh hơn để sử dụng trong trường hợp này.

Các vấn đề liên quan