-3

数学ゲームを作成しましたが、最初の質問をロードすると問題ありません。答えが正しければスコアは 100 増加しますが、次の質問をロードすると、古い質問の上に直接ロードされ、スコアはノーになります。より長く増加します。

また、私のカウンターはゲームを終了するために機能しません。

誰でも助けてくれますか?

 def do_question(self):
            ##    def create_widgets(self):
                    #counter here if over 5 then die
                    counter = 0
                    counter += 1
                    #counter + 1
                    if counter > 5:
                        import ITRIED

                SQL = 'SELECT * FROM tblQuestion'
                cursor = Databaseconnector.SELECT(SQL)
                rows = cursor.fetchall()
                random_row = random.choice(rows)

                print random_row.QuestionID, random_row.Question, random_row.Hint, random_row.A1, random_row.A2, random_row.A3, random_row.A4, random_row.CorrectAnswer

                self.a1button = Tkinter.Button(self, background="blue",foreground="white", text = (random_row.A1), command = self.QUESTION1)
                self.a1button.grid(row = 9, column = 1, sticky = 'W')

質問チェッカー:

             def QUESTION1(self):
                score = int(self.label7['text'])
                if self.a1button['text'] == self.label6['text']:
                    tkMessageBox.showinfo("CORRECT", "WELL DONE")
                    score = +100
                    self.do_question()
                else:
                    tkMessageBox.showinfo("INCORRECT", "YOU GOT IT WRONG :/")
                    label7 = +100
                    self.do_question()
                self.label7.config(text=str(score))
4

1 に答える 1

1

do_question が呼び出されるたびにカウンターをゼロにリセットするため、カウンターが 5 を超えることはありません。さらに、コード化した方法では、counter はローカル変数です。最初に行う必要があるのは、counter をインスタンス変数 (つまり、self.counter) にして、単一の関数に対してローカルにならないようにすることです。

同じことがスコア変数にも当てはまります。インスタンス変数ではなく、関数に対してローカルです。

「古いものの上に直接ロードする」理由については、そうするように指示しているためです。do_question では、グリッドを使用してボタンを行 9、列 1 に配置しています。既に行 9、列 1 にあるものを削除することはありません。新しい質問を作成する前に、前の質問に対してgrid_removeorを呼び出す必要があります。grid_forget見える。

于 2013-03-19T14:30:15.340 に答える