【问题标题】:How to open a window for a certain user discord.py如何为某个用户打开一个窗口 discord.py
【发布时间】:2021-03-05 19:51:02
【问题描述】:

我正在编写一个 Discord 机器人,您可以通过输入诸如 !pong 之类的命令来玩游戏,它会打开一个窗口来玩经典的乒乓球游戏。问题是,每当我以外的任何用户键入命令(例如!snake)时,它都会为我打开窗口,而不是为他们打开。我怎样才能为他们打开窗户? 这是我的代码:

    @client.command()
    async def snake(ctx):
      await ctx.send(f"Open snake game for {ctx.author.name}...")
      # Score
      score = 0
      high_score = 0

      # Set up the screen
      wn = turtle.Screen()
      wn.title("Snake Game")
      wn.bgcolor("green")
      wn.setup(width=600, height=600)
      wn.tracer(0) # Turns off the screen updates

      # Snake head
      head = turtle.Turtle()
      head.speed(0)
      head.shape("square")
      head.color("black")
      head.penup()
      head.goto(0,0)
      head.direction = "stop"

      # Snake food
      food = turtle.Turtle()
      food.speed(0)
      food.shape("circle")
      food.color("red")
      food.penup()
      food.goto(0,100)

      segments = []

      # Pen
      pen = turtle.Turtle()
      pen.speed(0)
      pen.shape("square")
      pen.color("white")
      pen.penup()
      pen.hideturtle()
      pen.goto(0, 260)
      pen.write("Score: 0  High Score: 0", align="center", font=("Courier", 24, "normal"))

      # Functions
      def go_up():
          if head.direction != "down":
              head.direction = "up"

      def go_down():
          if head.direction != "up":
              head.direction = "down"

      def go_left():
          if head.direction != "right":
              head.direction = "left"

      def go_right():
          if head.direction != "left":
              head.direction = "right"

      def move():
          if head.direction == "up":
              y = head.ycor()
              head.sety(y + 20)

          if head.direction == "down":
              y = head.ycor()
              head.sety(y - 20)

          if head.direction == "left":
              x = head.xcor()
              head.setx(x - 20)

          if head.direction == "right":
              x = head.xcor()
              head.setx(x + 20)

      # Keyboard bindings
wn.listen()
wn.onkeypress(go_up, "w")
wn.onkeypress(go_down, "s")
wn.onkeypress(go_left, "a")
wn.onkeypress(go_right, "d")

# Main game loop
while True:
    wn.update()

    # Check for a collision with the border
    if head.xcor()>290 or head.xcor()<-290 or head.ycor()>290 or head.ycor()<-290:
        time.sleep(1)
        head.goto(0,0)
        head.direction = "stop"

        # Hide the segments
        for segment in segments:
            segment.goto(1000, 1000)
        
        # Clear the segments list
        segments.clear()

        # Reset the score
        score = 0

        # Reset the delay
        delay = 0.1

        pen.clear()
        pen.write("Score: {}  High Score: {}".format(score, high_score), align="center", font=("Courier", 24, "normal")) 


    # Check for a collision with the food
    if head.distance(food) < 20:
        # Move the food to a random spot
        x = random.randint(-290, 290)
        y = random.randint(-290, 290)
        food.goto(x,y)

        # Add a segment
        new_segment = turtle.Turtle()
        new_segment.speed(0)
        new_segment.shape("square")
        new_segment.color("grey")
        new_segment.penup()
        segments.append(new_segment)

        # Shorten the delay
        delay -= 0.001

        # Increase the score
        score += 10

        if score > high_score:
            high_score = score
        
        pen.clear()
        pen.write("Score: {}  High Score: {}".format(score, high_score), align="center", font=("Courier", 24, "normal")) 

    # Move the end segments first in reverse order
    for index in range(len(segments)-1, 0, -1):
        x = segments[index-1].xcor()
        y = segments[index-1].ycor()
        segments[index].goto(x, y)

    # Move segment 0 to where the head is
    if len(segments) > 0:
        x = head.xcor()
        y = head.ycor()
        segments[0].goto(x,y)

    move()    

    # Check for head collision with the body segments
    for segment in segments:
        if segment.distance(head) < 20:
            time.sleep(1)
            head.goto(0,0)
            head.direction = "stop"
        
            # Hide the segments
            for segment in segments:
                segment.goto(1000, 1000)
        
            # Clear the segments list
            segments.clear()

            # Reset the score
            score = 0

            # Reset the delay
            delay = 0.1
        
            # Update the score display
            pen.clear()
            pen.write("Score: {}  High Score: {}".format(score, high_score), align="center", font=("Courier", 24, "normal"))

    time.sleep(delay)

wn.mainloop()`

谁能帮帮我?

【问题讨论】:

  • 我认为无法为其他用户打开浏览器。
  • 你不能。它只为您打开,因为您将其托管在您的计算机上。
  • 程序在你的电脑上运行,所以他们玩不了

标签: python discord discord.py discord.py-rewrite


【解决方案1】:

你不能为他们打开它。你只能为托管机器人的人打开它,如果你想让它工作,你需要他们自己下载机器人并运行它。您可以学习制作基于浏览器的游戏(需要了解 HTML/CSS/js)并生成一个新链接,以便他们可以在自己的浏览器上玩。

【讨论】:

    【解决方案2】:

    问题是你在这里等待按键:

    wn.listen()
    wn.onkeypress(go_up, "w")
    wn.onkeypress(go_down, "s")
    wn.onkeypress(go_left, "a")
    wn.onkeypress(go_right, "d")
    

    虽然您应该使用 bot.wait_for() 等待消息。您可以阅读官方文档了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 2020-02-18
      相关资源
      最近更新 更多