他下课回来打电话给一个新同学

2024-09-30 01:25:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Python3.4创建自己的游戏GoFish版本(目前有两个玩家)。我的比赛有两个主要阶段。第一个问题是决定谁先采取行动。这是通过调用我的类FirstStage(file2.py)来完成的,它基本上是一个手游戏石头布剪刀-我对抗机器人。在我们有一个赢家之后,FirstStage返回一个整数(0或1),它代表这个阶段的赢家。然后第二阶段类(file3.py)被称为传递自我胜利者作为论据。游戏脚本被分割成许多文件,因为我使用了许多类。这是基本的想法,但出于某种原因,FistStage没有返回任何东西。有人能帮我吗?这是我的密码:

文件1.py

from file2 import *
from file3 import *
import tkinter as tk

class start_gui(tk.Frame):

    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self,parent, *args, **kwargs)
        # create canvas
        self.canvas = tk.Canvas(parent, width=800, height=800, background="green")
        self.canvas.pack()

        # here we call FirstStage class to determine who starts first
        self.c = FirstStage(parent)
        self.winner = self.c.getwinner()
        #here we call SecondStage call to start the real game
        self.d = SecondStage(self.winner)

if __name__ == "__main__":
    # create main window
    root = tk.Tk()
    root.geometry("800x800")
    start_gui(root)
    root.mainloop()

文件2.py

import tkinter as tk
from functools import partial
from PIL import ImageTk
from PIL import Image

class FirstStage(tk.Frame):

    def __init__(self, canv):
        tk.Frame.__init__(self, parent, background="black", padx=10, pady=10)
        self.winner = 0
        #here new frame is created
        #buttons and images are place in a grid
        self.rock_paper_scissors()

    def rock_papper_scissors(self):
        #here goes some code 
        #player against API 
        #undefine number of times until there is a winner


    def close(self, w):
        self.grid_forget()
        self.destroy()
        # here buttons, images and frame are destroy
        # save winner
        self.winner = w

    def getwinner(self):
        #return int - 0 for player and 1 for robot(opponent)
        return self.winner

文件3.py

class SecondStage:
    def __init__(self, winner)
        #here goes some scripts

Tags: 文件frompyimportselfhereinitdef
1条回答
网友
1楼 · 发布于 2024-09-30 01:25:36

这是很长,所以我不能提供它作为一个评论。你知道吗

我按原样测试了您的代码(做了一些小的改动),并且FirstStage返回了正确的获胜者,目前它是0或者您在self.winner = 0中给出的任何值。你知道吗

  1. file2.py中,在__init__方法中有canv,但传递了 parenttk.Frame.__init__。这给了我一个错误 参数不匹配,因此我将canv更改为parent。你知道吗
  2. 方法定义过程中rock_paper_scissors的拼写 __init__方法中的方法调用不同,请检查 拼写。你知道吗
  3. 您试图更改file2.pyclose方法中的self.winner,但您提供的代码中没有调用该方法,因此self.winner保持不变(值为0)。你知道吗
  4. 如果在file1.py中的self.winner = self.c.getwinner()后面放一个print语句,您会发现获胜者是 确实回来了。你知道吗

如果您做了这些更改,但仍然没有得到正确的获胜者,那么问题可能是您如何在file2.py中实现FirstStage;这在问题中没有提供。你知道吗

以下是我用于测试的代码:

文件1.py

from file2 import *
from file3 import *
import tkinter as tk

class start_gui(tk.Frame):

    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self,parent, *args, **kwargs)
        # create canvas
        self.canvas = tk.Canvas(parent, width=800, height=800, background="green")
        self.canvas.pack()

        # here we call FirstStage class to determine who starts first
        self.c = FirstStage(parent)
        self.winner = self.c.getwinner()
        print(self.winner)
        #here we call SecondStage call to start the real game
        self.d = SecondStage(self.winner)

if __name__ == "__main__":
    # create main window
    root = tk.Tk()
    root.geometry("800x800")
    start_gui(root)
    root.mainloop()

文件2.py

import tkinter as tk
from functools import partial
from PIL import ImageTk
from PIL import Image

class FirstStage(tk.Frame):

    def __init__(self, parent):
        tk.Frame.__init__(self, parent, background="black", padx=10, pady=10)
        self.winner = 0
        #here new frame is created
        #buttons and images are place in a grid
        self.rock_paper_scissors()

    def rock_paper_scissors(self):
        pass
        #here goes some code 
        #player against API 
        #undefine number of times until there is a winner


    def close(self, w):
        self.grid_forget()
        self.destroy()
        # here buttons, images and frame are destroy
        # save winner
        self.winner = w

    def getwinner(self):
        #return int - 0 for player and 1 for robot(opponent)
        return self.winner

文件3.py

class SecondStage:
    def __init__(self, winner):
        pass
        #here goes some scripts

相关问题 更多 >

    热门问题