2014-12-13 2 views
0

Я выполняю задание с использованием модуля черепахи, в котором я создаю текстовую игру. Я довольно новичок в коде вообще и python, и я хотел бы имитировать кнопки, которые нужно нажимать с помощью мыши. От взгляда на другие потоки, я уверен, что это возможно, перемещая черепаху в mouseclick, а затем выполняя действие, зависящее от того, находится ли питон в определенной области, который будет визуально отображаться как кнопка. Поскольку я неопытен, я не уверен, как указать координаты и проверить, находится ли черепаха внутри них.Python-Turtle-Эффективно воссоздающие кнопки

Вот что я начал с:

from turtle import * 
import turtle as t 
from time import sleep 
import time as time 

pen= Turtle() 
bt=pen.clone() 
bt.pu() 
bt.setpos(-200,-200) 
menu=0 

pen.pu() 
pen.setpos(0,50) 
pen.write("1.Option1",align="center",font=("Chiller",40)) 
time.sleep(0.5) 

pen.setpos(0,-30) 
pen.write("2.Option2",align="center",font=("Chiller",40)) 
time.sleep(0.5) 

pen.setpos(0,-110) 
pen.write("3.Option3",align="center",font=("Chiller",40)) 
menu=1 

while menu==1: 
    screen= Screen() 
    screen.onscreenclick(bt.goto) 
    bt.getscreen()._root.mainloop() 
while menu==1: 
    if bt.xcor>(-200) and bt.xcor<(200): 
     if bt.ycor>(20) and bt.ycor<(80): 
      pen.clear() 
      pen.write("option 1") 
     elif bt.ycor>(-60) and bt.ycor<(0): 
      pen.clear() 
      pen.write("option 2") 
     elif bt.ycor>(-140) and bt.ycor<(-80): 
      pen.clear() 
      pen.write("option 3") 

Как я уже сказал, идиот язык был бы оценен; может кто-то сказать мне, почему это не работает и, возможно, предлагает решение. Кроме того, я не совсем уверен, что «экран = Screen()» бит делает, я только что нашел его в другом потоке и реализовали его ...

Заранее спасибо за любую помощь

+0

Что не работает? и похоже, что ваш отступ отключен ... –

+1

Вы уже встречались с PyGame? –

+0

Добро пожаловать в StackOverflow. В вашем вопросе, пожалуйста, укажите, что не работает, ваш выход, нужный результат и ошибки (если есть), которые вы можете получить. – kartikg3

ответ

0

Да, это можно сделать. (Является ли это должно быть сделано еще один вопрос.) Ниже демонстрационный код, который изменяет текст в нижней части экрана при нажатии одной из трех вариантов:

from turtle import Turtle, Screen 

FONTSIZE = 40 
FONT = ("Ariel", FONTSIZE, "normal") 

turtle = Turtle(visible=False) 
turtle.penup() 

turtle.setpos(0, FONTSIZE*2 - FONTSIZE/2) 
turtle.write("1.Option1", align="center", font=FONT) 

turtle.setpos(0, -FONTSIZE/2) 
turtle.write("2.Option2", align="center", font=FONT) 

turtle.setpos(0, -FONTSIZE*2 - FONTSIZE/2) 
turtle.write("3.Option3", align="center", font=FONT) 

turtle.setpos(-200, -200) 
turtle.write("Select an Option", font=FONT) 

def onclick_handler(x, y): 
    if -100 < x < 100: 
     if FONTSIZE < y < FONTSIZE*3: 
      turtle.undo() 
      turtle.write("Option 1", font=FONT) 
     elif -FONTSIZE < y < FONTSIZE: 
      turtle.undo() 
      turtle.write("Option 2", font=FONT) 
     elif -FONTSIZE*3 < y < -FONTSIZE: 
      turtle.undo() 
      turtle.write("Option 3", font=FONT) 

screen = Screen() 
screen.onscreenclick(onclick_handler) 
screen.mainloop() 

Ваш исходный код был бесконечный цикл в ней что осложняет ситуацию - у вас не должно быть бесконечных циклов в программах черепахи. Вместо того, чтобы ваш обработчик щелчка перемещал черепаху, а затем обнаружил бесконечный цикл, где черепаха по меню, вы можете просто настроить обработчик кликов, где щелчок был по меню, и избежать некоторой сложности.

Помимо этого, номера жесткого кодирования всегда хлопотны, и вы всегда должны стараться избегать их. Рассчитайте, что вы можете, документируйте с постоянной переменной, что вы не можете.

Смежные вопросы