Hỏi về 1 dòng trong code trò chơi hangman bằng python

ai giải thích chi tiết hộ mình dòng code này với, mình ko hiểu lắm.
full code đây ạ:

Bạn không hiểu hàm getGuess() nên không hiểu dòng này luôn.

dòng này là cho người chơi nhập 1 kí tự, tham số của hàm là bao gồm các kí tự người chơi đã nhập trước đó (đúng và sai). Dựa vào đó hàm getGuess có thể thông báo nếu người chơi đã đoán chữ đó rồi.

def getGuess(alreadyGuessed):
    # Returns the letter the player entered. This function makes sure the player entered a single letter, and not something else.
    while True:
        print('Guess a letter.')
        guess = input()
        guess = guess.lower()
        if len(guess) != 1:
            print('Please enter a single letter.')
# dùng ở dòng này
        elif guess in alreadyGuessed:
            print('You have already guessed that letter. Choose again.')
        elif guess not in 'abcdefghijklmnopqrstuvwxyz':
            print('Please enter a LETTER.')
        else:
            return guess
3 Likes

mình hiểu rồi, cảm ơn bạn

Bác cho em hỏi mình tìm được code này từ nguồn nào ạ?

http://inventwithpython.com

thuật toán chính của game này có phải sử dụng vòng lặp while true không ạ?

while true không liên quan đến thuật toán của trò chơi. Nó nhằm mục đích lặp lại thao tác nhập một kí tự từ người chơi và thỏa điều kiện như:

  • Chỉ có 1 kí tự.
  • Phải nằm trong a-z.
  • Chưa nhập (dự đoán) trước đó.

Nói gọn là bắt người chơi nhập đúng yêu cầu thì mới tiếp tục.

1 Like

2 posts were merged into an existing topic: Topic lưu trữ các post off-topic - version 3

2 Likes

:3 mình muốn làm thêm 2 mức khó và dễ cho game, bạn chỉ mình với
độ khó của game phụ thuộc vào độ nhiều và dài của wordlist :smiley:

Bạn chỉ cần thêm các từ khó hơn (hoặc dễ hơn) vào danh sách khác. Vd:
Sau mấy cái hình:

# chế độ chơi
mode = 0
# words giờ là mảng chứa 2 phần dễ và khó
words = ['ant baboon badger ...', 'các từ khó hơn']

Tại:

secretWord = getRandomWord(words)

Sửa thành:

# Yêu cầu chọn chế độ dễ/khó
print('Please select difficult mode: 0: Easy; 1: Hard.')
 # đổi sang số
mode=int(input())
# nếu giá trị nhập ngoài 0 và 1 thì chuyển thành 0
mode=0 if mode > 1 or mode < 0 else mode
# lấy số ngẫu nhiên từ danh sách tương đương.
secretWord = getRandomWord(words[mode]) 

Ha, mình đang viết bằng điện thoại đấy. Có thể có lỗi.

1 Like

cảm ơn bạn nha, mình tạo thêm 1 wordlist mới gồm các chuỗi từ ngắn(mức dễ) ,đặt tên là word

while True:
    print('Choose level, input e to choose easy level or input h to choose hard level')
    level = input().lower()
    if level == 'e':
        secretWord = getRandomWord(word)
        print('Game Level : Easy')
        break
    elif level == 'h':
        secretWord = getRandomWord(words)
        print('Game Level : Hard')
        break
    else:
        print('invalid choose, input e to choose easy level or input h to choose hard level')

bạn ơi, mình muốn thêm giao diện tkinter thì làm sao nhỉ ? b chỉ mình vs

Thay hình chữ bằng hình đồ họa (jpg, png…) cho nó hiện lên nhãn (label), nhãn để hiện các ô chữ cần đoán và các nút (button) hiện các kí tự từ a-z để người chơi đoán.

2 Likes

Bạn có video nào học về đồ họa trong python ko nhỉ ? :frowning:

Không bạn à. Mình chưa từng dùng python bao giờ :blush:

:expressionless:
Bạn tự tìm hiểu theo gợi ý của mình.

Chưa dùng python nhưng nếu cần thì mình viết được cơ bản khi xem mấy đoạn mã mẫu và tài liệu trên trang chính thức.
Nhưng đang dùng điện thoại, không phải máy tính. Cũng không dùng ide trực tuyến được vì dùng giao diện trực quan, chứ không dùng console.

Nếu bạn biết tkinter thì cũng làm cơ bản về nó rồi chứ.

1 Like

mình cũng đang tìm tài liệu :3
ko biết thế hình ảnh bằng cách nào

img = ImageTk.PhotoImage(Image.open('hangman.png'))
label = Label(frame, image = img)
2 Likes

danh sách hình ảnh thì sao bạn nhỉ ? bạn có tài liệu gửi mình vs

Thì dùng mảng, rồi mỗi lần đoán sai sẽ thay bằng hình khác.

imgs =[ImageTk.PhotoImage(Image.open('hangman_1.png')),ImageTk.PhotoImage(Image.open('hangman_2.png')),...ImageTk.PhotoImage(Image.open('hangman_6.png'))]
# Mỗi lần sẽ gán hình khác nhau.
label.configure(image=imgs[0]);
2 Likes

no modun name imagetk

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?