01/10/2018, 16:43

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 ạ:
https://drive.google.com/file/d/1WMMiPdeDCu3dj1pAp0WgETnEG1llKbhu/view?usp=sharing

Trương Tấn Phát viết 18:56 ngày 01/10/2018

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
Nguyễn Văn Thế viết 18:49 ngày 01/10/2018

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

Nguyen The Son viết 18:46 ngày 01/10/2018

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

Nguyễn Văn Thế viết 18:46 ngày 01/10/2018

http://inventwithpython.com

Nguyễn Văn Thế viết 18:55 ngày 01/10/2018

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 ạ?

Trương Tấn Phát viết 18:53 ngày 01/10/2018

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.

HK boy viết 18:43 ngày 01/10/2018

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

Nguyễn Văn Thế viết 18:45 ngày 01/10/2018

: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

Trương Tấn Phát viết 18:46 ngày 01/10/2018

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.

Nguyễn Văn Thế viết 18:48 ngày 01/10/2018

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')
Nguyễn Văn Thế viết 18:58 ngày 01/10/2018

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

Trương Tấn Phát viết 18:52 ngày 01/10/2018

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.

Nguyễn Văn Thế viết 18:44 ngày 01/10/2018

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

Trương Tấn Phát viết 18:44 ngày 01/10/2018

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

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

bạn có thể code mình xem với :((


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ứ.

Nguyễn Văn Thế viết 18:54 ngày 01/10/2018

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

Trương Tấn Phát viết 18:49 ngày 01/10/2018
img = ImageTk.PhotoImage(Image.open('hangman.png'))
label = Label(frame, image = img)
Nguyễn Văn Thế viết 18:49 ngày 01/10/2018

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

Trương Tấn Phát viết 18:52 ngày 01/10/2018

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]);
Nguyễn Văn Thế viết 18:45 ngày 01/10/2018

no modun name imagetk

Trương Tấn Phát viết 18:47 ngày 01/10/2018
import PIL
from PIL import Image, ImageTk

Không có thì lên mạng tải PIL về.

Bài liên quan
0