Oẳn tù tì Từ điển Python

Chắc hẳn bạn đã từng chơi trò chơi Búa, Búa, Kéo một lần. Về cơ bản, hai người chơi giơ nắm đấm, bàn tay úp hoặc hai ngón tay để đại diện cho oẳn tù tì hoặc kéo. Người chiến thắng dựa trên ba quy tắc đơn giản này

  • kéo phá đá
  • Kéo cắt giấy
  • Giấy bìa đá

Trong trường hợp hòa, không ai thắng

Trò chơi nhỏ này rất dễ tạo bằng Python bằng cách sử dụng bàn phím để nhập R, P hoặc S hoặc Q để thoát. Người chơi thứ hai là chính chương trình sử dụng trình tạo số ngẫu nhiên để chọn một trong ba kết quả. Trò chơi nhỏ này đôi khi được đưa ra dưới dạng bài tập sớm, nhưng những người mới bắt đầu thường bỏ lỡ một số tính năng thực sự thông minh của Python có thể làm cho trò chơi trở nên thanh lịch và ngắn gọn hơn. Chúng tôi sẽ minh họa các bộ dữ liệu, lớp và lớp con và từ điển trong bài viết đơn giản này

Chúng ta có thể bắt đầu bằng cách sử dụng một bộ để biểu diễn ba bước di chuyển có thể

moves=["P", "R", "S"]   #tuple of legal play characters

Đây là ba ký tự duy nhất mà người chơi được phép nhập. Vì vậy, chúng tôi có thể tạo một vòng lặp nhập đơn giản lặp lại cho đến khi một trong ba ký tự đó được nhập. Chúng tôi sử dụng phương pháp trên để đảm bảo mục nhập là chữ hoa. Lưu ý rằng mã “chơi theo nước đi” trả về True nếu ký tự được nhập là P, R hoặc S và nếu không thì trả về False

legal = False
while not legal:
    play = input["enter play [P, R, S]: "].upper[]
    legal = play in moves 

Và, nếu bạn muốn cho phép người chơi nhập “Q” để thoát trò chơi, bạn có thể kiểm tra Q đó và đặt cờ thoát

def playit[self]:
    legal = False
    while not legal:
        play = input["enter play [P, R, S]: "].upper[]
        if play=="Q":
            quit = True
        legal = play in Player.moves or quit

Như bạn có thể thấy, đây bây giờ là một chức năng. Nhưng tại sao không biến nó thành một phần của lớp học?

Bạn có thể nhớ lại rằng các lớp là một phần chính của Python. Các lớp là các thành phần có thể chứa dữ liệu và có thể tồn tại trong nhiều trường hợp với các dữ liệu khác nhau trong mỗi trường hợp.

Một lớp người chơi

Lớp người chơi hoàn chỉnh của chúng tôi có tên của người chơi và một biến chơi chứa lần chơi mới nhất. Nó cũng giữ trạng thái của cờ bỏ và cờ hợp pháp

_______3____4____5

Vì vậy, như bạn có thể thấy, lớp Player có một phương thức playit đặt biến play thành P, R hoặc S. Nó cũng có thể được đặt thành Q và cờ thoát cho biết đây không phải là một trò chơi thực sự. Lưu ý rằng bộ di chuyển là một biến lớp. Điều này có nghĩa là nó là một phần của tất cả các lớp thuộc loại này và bạn có thể truy cập nó bằng Trình phát. di chuyển

Nhưng, còn người chơi kia thì sao? . Vì vậy, chúng ta cần một lớp khác như Player cho trình phát máy tính

Như bạn có thể nhớ lại, bạn có thể lấy các lớp mới từ các lớp cũ, vì vậy chúng tôi tạo một lớp AutoPlayer bắt nguồn từ Player. Nó chỉ chứa phương thức playit mới. Tất cả các biến và phương thức khác đều nằm trong lớp Player cơ sở. Vì vậy, lớp AutoPlayer đơn giản của chúng ta chỉ là

class AutoPlayer[Player]:
    def __init__[self, name]:
        super[].__init__[name] # pass the name into the parent class

    def playit[self]:
        playval = randint[0, 2]     # select 0, 1 or 2
        self.play = Player.moves[playval] # get that play from the tuple
        # print out what it has selected
        print[self.name + " selects " + self.play]

Vì vậy, bây giờ, chúng tôi xem cách chúng tôi có thể viết một vòng lặp để bạn chơi trò chơi

player1 = Player["You"]
player2 = AutoPlayer["Auto"]
while not player1.quit: #loop until a 'Q' is entered
    player1.playit[]
    if not player1.quit:
        player2.playit[]

Chọn một người chiến thắng

Nhưng làm thế nào để chúng ta biết ai đã thắng? . Chúng tôi có thể tạo Từ điển về những trường hợp này và thông báo kết quả mà bạn in ra

________số 8

Ta chỉ cần kiểm tra hòa và kiểm tra xem ai thắng, bằng cách kết hợp chuỗi cho hai người chơi. Chúng tôi làm tất cả điều này trong một lớp Người chiến thắng, sau đó trả về kết quả. Đầu tiên chúng ta khởi tạo các biến

class Winner[]:
    game= {"RS": "rock breaks scissors",
           "SP": "scissors cuts paper",
           "PR": "paper covers rock"
           }

    def __init__[self, p1, p2]:
        # copy variables into class
        # to make this simpler to read
        self.p1 = p1
        self.p2 = p2

Lưu ý rằng từ điển trò chơi cũng là một biến lớp

Sau đó, phương thức findWin kiểm tra xem có hòa không và nếu không có hòa, nó gọi checkWin để kiểm tra xem p1 thắng p2 hay p2 thắng p1

legal = False
while not legal:
    play = input["enter play [P, R, S]: "].upper[]
    legal = play in moves 
0

Lưu ý rằng lớp Người chơi chứa một phương thức đếmWin làm tăng số người chiến thắng của người chơi đó đã thắng. Sau đó, khi bạn cuối cùng gõ 'Q', chương trình có thể in ra điểm số cuối cùng

legal = False
while not legal:
    play = input["enter play [P, R, S]: "].upper[]
    legal = play in moves 
1

đầu ra cuối cùng

Đây là cách chương trình hoạt động

legal = False
while not legal:
    play = input["enter play [P, R, S]: "].upper[]
    legal = play in moves 
2

Tóm lược

Chúng tôi đã sử dụng bộ dữ liệu để kiểm tra đầu vào hợp lệ [P, R hoặc S] và sau đó tạo một lớp Người chơi có phương thức playit và chứa biến play chứa ký tự đại diện cho lượt chơi đó. Sau đó, chúng tôi đã tạo một lớp AutoPlayer dẫn xuất có cùng các biến và phương thức bên trong, nhưng trong đó phương thức playit sử dụng hàm số ngẫu nhiên để tạo 0, 1 hoặc 2. Sau đó, chúng được lập chỉ mục vào bộ để tìm ký tự đại diện cho vở kịch đó

Cuối cùng, chúng tôi đã tạo một từ điển gồm ba lượt chơi có thể xảy ra và thông báo mô tả các trường hợp chiến thắng và sử dụng lớp Người chiến thắng để tìm xem p1+p2 thắng hay id p2+p1 thắng. Vì vậy, trong ví dụ đơn giản này, chúng tôi đã sử dụng bộ dữ liệu, từ điển, các lớp và lớp dẫn xuất để viết một chương trình trò chơi đơn giản

Mã hoàn chỉnh cho điều này và các chương trình trong các bài viết sau có sẵn tại GitHub dưới jameswcooper/articles

Làm thế nào để mã hóa đá

Đó là một chiếc cà vạt. "] elif user_action == "đá". nếu computer_action == "kéo". print["Đá đập cây kéo. Bạn thắng. "] khác. print["Giấy bọc đá. Bạn đã thua. "] elif user_action == "giấy". nếu computer_action == "rock". print["Giấy bọc đá. Bạn thắng. "] khác. print["Kéo cắt giấy

Làm cách nào để viết mã oẳn tù tì con thằn lằn spock trong Python?

# Vòng lặp trò chơi trong khi đúng. # Menu Trò Chơi print[] print["Chơi Nào. "] print["Phiên bản oẳn tù tì là phiên bản nào?"] print["Nhập 1 để chơi Oẳn tù tì-Kéo"] print["Nhấn 2 để chơi Oẳn tù tì-Thằn lằn-Spock"] print[ . lựa chọn = int[

Làm thế nào để BTS nói rock

Thay vì “oẳn tù tì“, thay vào đó là “kéo, oẳn tù tì“. Nói gì cơ?. Nhưng vâng, đó là sự thật. Tất nhiên, những từ này cũng được nói bằng tiếng Hàn, vì vậy thay vì “kéo, oẳn tù tì”, bạn sẽ nói. “ gawi, bawi, bo “.

Chủ Đề