【问题标题】:Python Game Not WorkingPython游戏不工作
【发布时间】:2016-05-08 18:40:24
【问题描述】:

我的游戏有问题,我认为是导致问题的功能

def move(self):

        self.canvas.move(self.Oball,self.move_x,0)
        if self.canvas.coords(self.Oball)[0] <= 0:
            self.move_x = 1
        elif self.canvas.coords(self.Oball)[2] >= 700:
            self.move_x = -1



def EatBall(self):

    if self.canvas.coords(self.ball) == self.canvas.coords(ball1.Oball):
        canvas.delete(ball1.Oball)
        self.PlayerWon += 1

    elif self.canvas.coords(self.ball) == self.canvas.coords(ball2.Oball):
        canvas.delete(ball2.Oball)
        self.PlayerWon += 1

    elif self.canvas.coords(self.ball) == self.canvas.coords(ball3.Oball):
        canvas.delete(ball3.Oball)
        self.PlayerWon += 1

    if self.PlayerWon == 3:
        time2 = time()
        TimeItTook = time2 - self.time1
        canvas.create_text(350,100,text="You Won",font=("Arial",22))
        canvas.create_text(350,200,text="It took you %s seconds to eat all the balls" % int(TimeItTook),font=("Arial",18))
        self.PlayerWon = 10

“if self.canvas.coords(self.Oball)[0]

【问题讨论】:

  • 请阅读stackoverflow.com/help/mcve——绝对没有任何理由应该开始任何 SO 问题,“我正在编写一个 [大型项目]。这是整个代码库。”

标签: python-3.x tkinter tkinter-canvas


【解决方案1】:

原因

“if self.canvas.coords(self.Oball)[0]

就是吃完一个球后self.canvas.coords(self.Oball)返回None,然后会引发index out of range异常

所以你可以像这样改变你的代码

border = self.canvas.coords(self.Oball)
if border and self.canvas.coords(self.Oball)[0] <= 0:
    self.move_x = 1
elif border and self.canvas.coords(self.Oball)[2] >= 700:
    self.move_x = -1

你说

变量 self.PlayerWon 不会在每次有球时增加 吃过

因为每次赋值为0,所以应该把self.PlayerWon = 0放在__init__方法中。

【讨论】:

  • 感谢您修复我的程序,但我不完全明白您是如何修复它的。您所做的只是添加一个边框变量并检查它的 0 索引值是否小于或等于 0。您能否解释一下为什么此代码有效
  • @Crafterguy if border 检查是否为无。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2018-08-29
  • 2019-02-22
  • 2018-12-14
  • 2014-04-05
相关资源
最近更新 更多