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____5Vì 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ố 8Ta 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
0Lư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
2Tó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ấyLà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 “.