如何让这个程序在启动前等待屏幕点击



我正在尝试完成一个类的程序,我做得相当好。这是一款简单的蟒蛇龟图形游戏,你可以尝试避开毒点,导航到一个正方形。但是,我的程序会在用户点击屏幕之前立即启动。我该怎么解决这个问题?谢谢

我的代码:

# This game involves avoiding red poison blobs while attempting to navigate to
# a square. If you hit the blob, you begin to speed up, making it more difficult
# not to hit more. Additionally, you lose a point. If you reach the square you
# get a point.
import turtle
import math
import random
# screen
wn = turtle.Screen()
wn.bgcolor("black")
wn.tracer(3)
# Draw border
pen1 = turtle.Turtle()
pen1.color("white")
pen1.penup()
pen1.setposition(-275,-275)
pen1.pendown()
pen1.pensize(5)
for side in range(4):
    pen1.forward(550)
    pen1.left(90)
pen1.hideturtle()
# player
player = turtle.Turtle()
player.color("dark green")
player.shape("turtle")
player.penup()
# poisonBlob
maxpoisonBlob = 15
poisonBlob = []
for a in range(maxpoisonBlob):
    poisonBlob.append(turtle.Turtle())
    poisonBlob[a].color("dark red")
    poisonBlob[a].shape("circle")
    poisonBlob[a].shapesize(4, 4, 4)
    poisonBlob[a].penup()
    poisonBlob[a].speed(0)
    poisonBlob[a].setposition(random.randint(-255, 255), random.randint(-255, 255))
maxfood = 1
food = []
for a in range(maxfood):
        food.append(turtle.Turtle())
        food[a].color("light blue")
        food[a].shape("square")
        food[a].penup()
        food[a].speed(0)
        food[a].setposition(random.randint(-240, 240), random.randint(-240, 240))
# speed variable
speed = 6.5
def turnleft():
    player.left(30)
def turnright():
    player.right(30)
def increasespeed():
    global speed
    speed += 1
def touchPoison(t1, t2):
    d = math.sqrt(math.pow(t1.xcor()-t2.xcor(),2) + math.pow(t1.ycor()-t2.ycor(),2))
    if d < 50:
        return True
    else:
        return False
def touchfood(z1, z2):
        d = math.sqrt(math.pow(z1.xcor()-z2.xcor(),2) + math.pow(z1.ycor()-z2.ycor(),2))
        if d < 20:
                return True
        else:
                return False

turtle.listen()
turtle.onkey(turnleft, "Left")
turtle.onkey(turnright, "Right")

def main():
    print("Help your turtle navigate red poison blobs while attempting to navigate to then"
          "food! If you hit the poison, you begin to speed up, making it more difficultn"
          "not to hit more. Additionally, you lose a point. If you reach the square youn"
          "get a point. To navigate, click the screen, and then use the right and leftn"
          "arrow keys. Quickly, your turtle is running away!")
    score = 0
    while True:
        player.forward(speed)
        # turtle boundary
        if player.xcor() > 260 or player.xcor() < -260:
            player.right(180)
        # turtle boundary
        if player.ycor() > 260 or player.ycor() < -260:
            player.right(180)
        # move poison
        for a in range(maxpoisonBlob):
            poisonBlob[a].forward(3)
           # Poison boundaries
            if poisonBlob[a].xcor() > 220 or poisonBlob[a].xcor() < -220:
                poisonBlob[a].right(180)
            # Poision boundaries
            if poisonBlob[a].ycor() > 220 or poisonBlob[a].ycor() < -220:
                poisonBlob[a].right(180)     
            # Poison touching
            if touchPoison(player, poisonBlob[a]):
                increasespeed()
                poisonBlob[a].setposition(random.randint(-230, 230), random.randint(-230, 230))
                poisonBlob[a].right(random.randint(0,360))
                score -= 1
                #Draw score
                pen1.undo()
                pen1.penup()
                pen1.hideturtle()
                pen1.setposition(-260, 280)
                scorestring = "Score: %s" %score
                pen1.write(scorestring, font=("Calibri", 12))
        for a in range(maxfood):
            #Positive Point Checking
            if touchfood(player, food[a]):
                food[a].setposition(random.randint(-230, 230), random.randint(-230, 230))
                score += 1
                #Draw Score
                pen1.undo()
                pen1.penup()
                pen1.hideturtle()
                pen1.setposition(-260, 280)
                scorestring = "Score: %s" %score
                pen1.write(scorestring, font=("Calibri", 12))
if __name__ == "__main__":
    main()

通常我们尽量不直接回答家庭作业问题,但我会给你一些指导。

我不熟悉您正在使用的库,但基本思想是,您需要等到用户单击屏幕后才能继续。我的理解是,您希望在main中的print()函数之后这样做,这样用户就必须阅读消息,然后单击继续。

快速搜索发现了这个链接:蟒蛇中的乌龟-试图让乌龟移动到鼠标点击位置并打印其坐标

这将详细介绍onscreenclick()事件。根据你的onkey()方法判断,你已经熟悉了绑定到事件,所以你应该能够使用这些知识绑定到onscreenclick()事件,然后你只需要稍微分解一下你的代码,这样它就不会执行你的游戏,直到onscreencrick()事件发生。

如果这还不够清楚,请帮助我了解您的困惑所在,我会进一步提供帮助。谢谢

您可以从定义一个调用"if"语句的函数开始,然后通过在其中插入新定义的函数来使用turtle.onscreenclick(),如下所示:

def Game(x, y):
    if __name__ == "__main__":
        main()
turtle.onscreenclick(Game)

请确保在末尾插入所有这些内容

现在,在函数定义中的函数名称后面的括号中添加(x,y),会为用户在图形窗口中单击的点指定相应的(x,y)坐标,这反过来又会由于单击屏幕的动作而激活函数。我成功地做到了,所以我可以向你保证它是有效的!我希望这能有所帮助!:)

最新更新