Create Snake Game use Turtle in Python

Hello mọi người, em đang học về Python và học đến project Snake Game use Turtle

Trong main.py có đoạn code như sau:

for segment in snake.segments[1:]:
    if snake.head.distance(segment) < 20:
        game_is_on = False
        scoreboard.game_over()

Kích thước của 1 segment là 20x20
Khi em để distance < 20 thì snake chạy được 1 đoạn thì lại bị bug, có khi chạy thẳng vẫn game_over
Khi em chuyển distance < 10 thì snake không bị bug nữa.
Mong mọi người giải đáp giúp em với ạ

Hi there,

Cụ thể cậu gặp bug gì vậy?
Đoạn code đó về mặt logic có vẻ đúng, xét theo logic trò rắn săn mồi thông thường. Đó là TH khi rắn cắn vào thân của chính nó => game over.

2 Likes

Vấn đề có thể nằm ở hàm distance của thư viện Turtle. Bạn có thử so sánh với 19.9 chưa?
Nếu thư viện dùng các phép tính với số thực (không thông qua decimalfractions), rất có thể kết quả của hàm distance có thể là 19.99... hoặc tương tự gây nên kết quả sẽ nhỏ hơn 20 khi so sánh.
Thử phép tính đơn giản mà khi nhìn vào ta sẽ biết chính xác kết quả là 20, nhưng…

print(20*0.12345/0.12345)

Kết quả thực tế, sau khi chạy:

20.000000000000004

Tương tự, nhìn vào biết chắc kết quả là 0.

print(20-(20*0.12345/0.12345))

Nhưng:

-3.552713678800501e-15

Số thực trong lập trình không chính xác 100%. Nó có thể sai số (tăng/giảm) một tí, sẽ làm các phép so sánh trả về kết quả không chính xác 100%.
https://0.30000000000000004.com/#python-3

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