viết chương trình thực hiện ý tưởng:nhân vật vạt thực hiện lặp lại liên tục"nếu chạm con trỏ chuột thì đổi màu nếu không thì vỗ cánh và mỗi lần cánh cách nhau 1 giây
Quảng cáo
2 câu trả lời 116
Khi nhấn lá cờ xanh
mãi mãi
nếu <chạm con trỏ chuột?>
thì
thay đổi hiệu ứng màu sắc 25
nếu không thì
chuyển sang trang phục tiếp theo
đợi 1 giây
Giải thích:
"mãi mãi": để thực hiện vòng lặp liên tục.
"<chạm con trỏ chuột?>": là điều kiện kiểm tra nếu nhân vật Vạt chạm chuột.
"thay đổi hiệu ứng màu sắc 25": làm nhân vật đổi màu khi chạm chuột.
"chuyển sang trang phục tiếp theo" + "đợi 1 giây": tạo hiệu ứng vỗ cánh mỗi giây.
import turtle
import time
import random
# Cài đặt màn hình
screen = turtle.Screen()
screen.setup(width=600, height=600)
screen.bgcolor("white")
screen.tracer(0) # Tắt tự động cập nhật màn hình
# Tạo nhân vật vạt (hình tròn đơn giản)
vat = turtle.Turtle()
vat.shape("circle")
vat.color("blue")
vat.penup()
vat.goto(0, 0)
# Biến theo dõi trạng thái vỗ cánh
dang_vo_canh = False
thoi_gian_vo_canh_truoc = 0
def doi_mau():
"""Đổi màu ngẫu nhiên cho nhân vật vạt."""
mau_moi = (random.random(), random.random(), random.random())
vat.color(mau_moi)
def vo_canh():
"""Thay đổi hình dạng để tạo hiệu ứng vỗ cánh."""
global dang_vo_canh
if dang_vo_canh:
vat.shapesize(stretch_wid=1, stretch_len=1) # Trở về hình tròn ban đầu
else:
vat.shapesize(stretch_wid=1, stretch_len=1.5) # Kéo dài theo chiều ngang
dang_vo_canh = not dang_vo_canh
def kiem_tra_chuot():
"""Kiểm tra xem con trỏ chuột có chạm vào nhân vật vạt không."""
x_vat, y_vat = vat.position()
x_chuot, y_chuot = screen.mousex(), screen.mousey()
khoang_cach = ((x_vat - x_chuot)**2 + (y_vat - y_chuot)**2)**0.5
if khoang_cach < 15: # Khoảng cách an toàn để coi là chạm
doi_mau()
def lap_lai_lien_tuc():
"""Hàm thực hiện lặp lại các hành động."""
global thoi_gian_vo_canh_truoc
kiem_tra_chuot()
thoi_gian_hien_tai = time.time()
if thoi_gian_hien_tai - thoi_gian_vo_canh_truoc >= 1:
vo_canh()
thoi_gian_vo_canh_truoc = thoi_gian_hien_tai
screen.update()
screen.ontimer(lap_lai_lien_tuc, 30) # Gọi lại sau 30ms (để tạo chuyển động mượt mà hơn)
# Bắt đầu vòng lặp chính
lap_lai_lien_tuc()
screen.mainloop()
Giải thích chương trình:
import turtle, import time, import random: Nhập các thư viện cần thiết cho đồ họa (turtle), quản lý thời gian (time) và tạo số ngẫu nhiên (random).
Cài đặt màn hình:screen = turtle.Screen(): Tạo một cửa sổ đồ họa.
screen.setup(width=600, height=600): Đặt kích thước cửa sổ.
screen.bgcolor("white"): Đặt màu nền trắng.
screen.tracer(0): Tắt chế độ tự động cập nhật màn hình để vẽ nhanh hơn. Chúng ta sẽ cập nhật thủ công bằng screen.update().
Tạo nhân vật vạt:vat = turtle.Turtle(): Tạo một đối tượng rùa (turtle), đây sẽ là nhân vật của chúng ta.
vat.shape("circle"): Đặt hình dạng ban đầu là hình tròn.
vat.color("blue"): Đặt màu ban đầu là xanh lam.
vat.penup(): Nhấc bút lên để không vẽ đường khi di chuyển.
vat.goto(0, 0): Đặt nhân vật vào giữa màn hình.
dang_vo_canh = False: Một biến boolean để theo dõi xem cánh đang ở trạng thái "vỗ" hay "nghỉ".
thoi_gian_vo_canh_truoc = 0: Lưu trữ thời điểm lần vỗ cánh gần nhất để đảm bảo khoảng cách 1 giây.
doi_mau():Sử dụng random.random() để tạo ra các giá trị màu RGB ngẫu nhiên (từ 0.0 đến 1.0).
vat.color(mau_moi): Đặt màu mới cho nhân vật.
vo_canh():Kiểm tra trạng thái dang_vo_canh.
Nếu đang vỗ cánh (True), đặt lại kích thước chiều dài về 1 để trở thành hình tròn.
Nếu không đang vỗ cánh (False), kéo dài kích thước chiều dài lên 1.5 để tạo hiệu ứng cánh mở rộng.
Đảo ngược giá trị của dang_vo_canh cho lần gọi tiếp theo.
kiem_tra_chuot():vat.position(): Lấy tọa độ (x, y) hiện tại của nhân vật vạt.
screen.mousex(), screen.mousey(): Lấy tọa độ (x, y) hiện tại của con trỏ chuột trên màn hình.
Tính khoảng cách giữa nhân vật và con trỏ chuột bằng công thức khoảng cách giữa hai điểm.
Nếu khoảng cách nhỏ hơn một ngưỡng nhất định (ví dụ: 15), coi như con trỏ chuột chạm vào nhân vật và gọi hàm doi_mau().
lap_lai_lien_tuc():Gọi kiem_tra_chuot() để kiểm tra và đổi màu nếu cần.
thoi_gian_hien_tai = time.time(): Lấy thời gian hiện tại.
Kiểm tra xem khoảng thời gian kể từ lần vỗ cánh trước có lớn hơn hoặc bằng 1 giây không.
Nếu đủ thời gian, gọi hàm vo_canh() để thực hiện hiệu ứng vỗ cánh và cập nhật thoi_gian_vo_canh_truoc.
screen.update(): Cập nhật màn hình để hiển thị các thay đổi.
screen.ontimer(lap_lai_lien_tuc, 30): Lên lịch gọi lại hàm lap_lai_lien_tuc sau 30 mili giây. Điều này tạo ra một vòng lặp liên tục, cho phép chương trình kiểm tra và thực hiện các hành động một cách mượt mà.
Bắt đầu vòng lặp chính:lap_lai_lien_tuc(): Gọi hàm lặp lại lần đầu tiên để khởi động quá trình.
screen.mainloop(): Bắt đầu vòng lặp sự kiện của turtle, cho phép cửa sổ đồ họa phản hồi với các tương tác (ví dụ: di chuyển chuột) và duy trì cửa sổ mở.
Cách chạy chương trình:
Lưu đoạn mã trên vào một tệp Python (ví dụ: vat_vo_canh.py).
Mở cửa sổ dòng lệnh hoặc terminal.
Di chuyển đến thư mục chứa tệp Python.
Chạy lệnh: python vat_vo_canh.py
Bây giờ, bạn sẽ thấy một cửa sổ đồ họa với một hình tròn màu xanh lam ở giữa. Khi bạn di chuyển con trỏ chuột chạm vào hình tròn, màu của nó sẽ thay đổi ngẫu nhiên. Nếu bạn không chạm vào, hình tròn sẽ thay đổi hình dạng (dẹt hơn rồi tròn lại) mỗi giây một lần, tạo hiệu ứng vỗ cánh.
Quảng cáo
Bạn muốn hỏi bài tập?
