简体   繁体   English

我正在作为学校项目在tkinter中创建一个游戏,它崩溃了并且没有错误

[英]I'm creating a game in tkinter as a school project and it crashes without an error

I am a GCSE student in year 10 so I have only just started my course and proper coding. 我是10年级的GCSE学生,所以我才刚刚开始我的课程和正确的编码。 We were set a task to create a game called botmod where you control a character that collects people then returns them to a base. 我们的任务是创建一个名为botmod的游戏,在其中您可以控制一个收集人物的角色,然后将他们放回基地。 I created the game fine using general knowledge and getting help from Google for what I didn't understand. 我利用常识创造了很好的游戏,并从我的不了解中获得了Google的帮助。 Once I finished the main program I started on creating a start menu where the user can set their own variables for the game such as grid size etc. once I had implemented this with the main program this is where the issue began. 一旦完成主程序,我便开始创建一个开始菜单,用户可以在其中设置自己的游戏变量,例如网格大小等。一旦用主程序实现了此操作,便开始了这个问题。 Once I go through both menus and select all options the program stops responding then crashes. 一旦我浏览了两个菜单并选择了所有选项,程序将停止响应,然后崩溃。

I am aware this code is extremely messy and that I should not be using global variables or at least be avoiding them as much as possible but we haven't properly started OOP yet so I decided against diving into it. 我知道这段代码非常混乱,我不应该使用全局变量,或者至少应尽可能避免使用它们,但是我们还没有正确启动OOP,所以我决定不去研究它。

Thank you in advance for the help. 预先感谢您的帮助。

from tkinter import *
from random import choice, shuffle

def Ending_Conditions():
    global Player_Power, Players_Collected
    if Players_Collected == 3:
        Game_End("YOU WIN!")
    elif Player_Power <= 0 and Players_Collected != 3:
        Game_End("Game Over")

def Game_End(End_Option):
    global Playing_Game, Game_Finished
    if End_Option == "EXIT":
        Playing_Game = False
        Root.destroy()
    else:
        Game_Finished = True
        Game_Canvas.create_rectangle(120, 120, 480, 300, fill = "#ffffff")
        Game_Canvas.create_text(300, 210, text = End_Option, font = ('Abadi', 35, "bold"))
        Continue_Button = Button(Root, text = 'Continue', command = lambda: Game_Restart('CONTINUE'))
        Exit_Button = Button(Root, text = 'Exit', command = lambda: Game_Restart('EXIT'))
        Continue_Button.pack()
        Exit_Button.pack()

def Game_Restart(Restart_Option):
    if Restart_Option == 'CONTINUE':
        Root.destroy()
        Restart_Game = True
    if Restart_Option == 'EXIT':
        Game_End('EXIT')

def Paused_UI():
    global Game_Paused, Close_PausedUI
    Close_PausedUI = Button(Root, text = 'Exit', command = Close_Paused_UI)
    Close_PausedUI.pack()
    Game_Paused = True

def Close_Paused_UI():
    global Game_Paused, Close_PausedUI
    Close_PausedUI.pack_forget()
    Game_Paused = False

def Generate_Game():
    global Game_Canvas, Game_Player, Game_Base, Player_Power, Power_Counter, People_Locations, Game_Paused, All_People, Game_Grid
    Current_Colour = 0
    Grid_Colour = []
    Player_PosX, Player_PosY, Player_Storage, Players_Collected = 30, 30, 0, 0, 
    People_Locations = {0:[150, 450, 0], 1:[270, 330, 1], 2:[450, 90, 2]}
    Game_Finished = False
    # Generate UI
    Game_Menu = Button(Root, text = 'Menu', command = Paused_UI)
    Game_Menu.pack()
    # Define grid colours
    Grid_Colours = ['#009446', '#D4F0FF', '#5f6365']
    # Generate power counter and pack canvas
    Power_Counter = Label(Root, text = Player_Power)
    Power_Counter.pack()
    Game_Canvas.pack()
    # Generate Grid and Colours
    for y in range(Game_Grid):
        for x in range(Game_Grid):
            shuffle(Grid_Colours)
            Game_Grid = Game_Canvas.create_rectangle(0+60*x, 0+60*y, 60+60*x, 60+60*y, fill = Grid_Colours[0])
            Grid_Colour.append(Grid_Colours[0])
    # Generate Robot Player
    Game_Player = Game_Canvas.create_text(Player_PosX, Player_PosY, text = "R", font = ('Abadi', 35, "bold"))
    # Generate Player Base
    Game_Base = Game_Canvas.create_text(450, 330, text = "B", font = ('Abadi', 35, "bold"))
    # Generate People
    for i in range(Game_People):
        Person_Location = People_Locations[0+i]
        Game_Person = Game_Canvas.create_text(Person_Location[0], Person_Location[1], text = "P", font = ('Abadi', 35, "bold"), tag = 'Game_Person')
    All_People = Game_Canvas.find_withtag('Game_Person')
    All_People = list(All_People)

def Move_Player(event):
    global Game_Canvas, Game_Player, Game_Base, Player_PosY, Player_PosX, Current_Colour, Player_Power, Power_Counter, Player_Storage, Players_Collected, Game_Finished, Current_Person
    if event.char.lower() == '\x1b' and Game_Paused == False:
        Paused_UI()
    elif event.char.lower() == '\x1b' and Game_Paused == True:
        Close_Paused_UI()
    if Game_Paused == False and Game_Finished != True:
        Movement_Value = Movement_Values[event.char.lower()]
        if Player_PosX != Movement_Value[0] and Player_PosY != Movement_Value[1]:
            # Detect current grid colour and configure power accordingly
            Player_Power = Player_Power - Power_Values[Grid_Colour[Current_Colour]]
            Power_Counter.configure(text = Player_Power)
            Current_Colour = Current_Colour + Movement_Value[4]
            # Delete the player then recreate in its new position
            Game_Canvas.delete(Game_Player)
            Player_PosX, Player_PosY = Player_PosX + Movement_Value[2], Player_PosY + Movement_Value[3]
            Game_Player = Game_Canvas.create_text(Player_PosX, Player_PosY, text = "R", font = ('Abadi', 35, "bold"))
            # Detect Person
            for item in People_Locations:
                Person_Location = People_Locations[item]
                if Player_PosX  == Person_Location[0] and Player_PosY == Person_Location[1] and Player_Storage != 1:
                    Current_Person = Person_Location[2]
                    Game_Canvas.delete(All_People[Current_Person])
                    Player_Storage += 1
            if Player_PosX == 450 and Player_PosY == 330:
                if Player_Storage == 1:
                    Player_Storage -= 1
                    Players_Collected += 1
                    Clear_Current = People_Locations[Current_Person]
                    Clear_Current = Clear_Current[2]
                    People_Locations.pop(Clear_Current)
        Ending_Conditions()

def Start_Game():
    global Start_Canvas
    Start_Canvas = Canvas(Root, width = 600, height = 500, bd=0, highlightthickness=0, bg = '#ffffff')
    Start_Canvas.pack()

    Title = Start_Canvas.create_text(300, 163, text = "BOTMOD", font = ('Cinema Gothic BTN Shadow', 75, 'normal'))

    Play_Button = Button(text = "PLAY", width = 10, font=('Arial', 15), command = Play_Game)
    Play_Button = Start_Canvas.create_window(300, 325, window = Play_Button)

    Exit_Button = Button(text = "EXIT", width = 10, font=('Arial', 15), command = lambda: Game_End("EXIT"))
    Exit_Button = Start_Canvas.create_window(300, 375, window = Exit_Button)

def Play_Game():
    global Menu_Canvas, Grid_Entry, Power_Entry, People_Entry
    Start_Canvas.destroy()
    Menu_Canvas = Canvas(Root, width = 600, height = 500, bd=0, highlightthickness=0, bg = '#C0C0C0')
    Menu_Canvas.pack()

    Title_Rectangle = Menu_Canvas.create_rectangle(120, 10, 480, 100, fill = '#000000')
    Slider_Rectangle = Menu_Canvas.create_rectangle(120, 110, 480, 430, fill = '#000000')
    Footer_Rectangle = Menu_Canvas.create_rectangle(120, 440, 480, 490, fill = '#000000')

    Title = Menu_Canvas.create_text(300, 55, text = "BOTMOD", font = ('Cinema Gothic BTN Shadow', 55, 'normal'), fill = '#ffffff')

    Description_Text = Label(text = "Set Game Options", font=('Arial', 15, 'bold'), bg = '#000000', fg = '#ffffff')
    Description_Text = Menu_Canvas.create_window(300, 145, window = Description_Text)

    Power_Text = Label(text = "Robot Power", font=('Cinema Gothic BTN Shadow', 15), bg = '#000000', fg = '#ffffff')
    Power_Text = Menu_Canvas.create_window(300, 195, window = Power_Text)
    Power_Entry = Scale(from_= 50, to = 350, orient = HORIZONTAL, bg = '#000000', fg = '#ffffff', highlightthickness=0, bd = 0)
    Power_Entry = Menu_Canvas.create_window(300, 225, window = Power_Entry)

    People_Text = Label(text = "Person Count", font=('Cinema Gothic BTN Shadow', 15), bg = '#000000', fg = '#ffffff')
    People_Text = Menu_Canvas.create_window(300, 280, window = People_Text)
    People_Entry = Scale(from_= 3, to = 10, orient = HORIZONTAL, bg = '#000000', fg = '#ffffff', highlightthickness=0, bd = 0, state=DISABLED)
    People_Entry = Menu_Canvas.create_window(300, 310, window = People_Entry)

    Grid_Text = Label(text = "Grid Count", font=('Cinema Gothic BTN Shadow', 15), bg = '#000000', fg = '#ffffff')
    Grid_Text = Menu_Canvas.create_window(300, 365, window = Grid_Text)
    Grid_Entry = Scale(from_= 5, to = 15, orient = HORIZONTAL, bg = '#000000', fg = '#ffffff', highlightthickness=0, bd = 0)
    Grid_Entry = Menu_Canvas.create_window(300, 395, window = Grid_Entry)

    Play_Button = Button(text = "OK", width = 15, font=('Cinema Gothic BTN Shadow', 10), command = lambda: Init_Game("DEFAULT"), bg = '#000000', fg = '#ffffff')
    Play_Button = Menu_Canvas.create_window(400, 465, window = Play_Button)
    PlayWD_Button = Button(text = "Use Defaults", width = 15, font=('Cinema Gothic BTN Shadow', 10), command = lambda: Init_Game("CUSTOM"), bg = '#000000', fg = '#ffffff')
    PlayWD_Button = Menu_Canvas.create_window(200, 465, window = PlayWD_Button)

def Init_Game(Game_Options):
    global Grid_Count, Player_PosY, Player_PosX, Game_Paused, Game_Finished, Playing_Game, Player_Power, Game_Grid, Player_Movement, Game_People, Game_Canvas, Menu_Canvas, Grid_Entry, Power_Entry, People_Entry, Grid_Rectangle
    if Game_Options == "DEFAULT":
        Game_Grid = 10
        Grid_Rectangle = 600/10
        Player_Movement = Grid_Rectangle/2
        Player_Power = 150
        Game_People = 3
    else:
        Game_Grid = Grid_Entry.get()
        Grid_Rectangle = 600/Game_Grid
        Player_Movement = Grid_Rectangle/2
        Player_Power = Power_Entry.get()
        Game_People = People_Entry.get()

    Menu_Canvas.destroy()        
    Playing_Game = True
    Game_Paused = False
    Restart_Game = False

    Movement_Values = {'w':(1000, 30, 0, -60, -10), 'a':(30, 1000, -60, 0, -1), 's':(1000, 570, 0, 60, 10), 'd':(570, 1000, 60, 0, 1)}
    Power_Values = {'#009446':2, '#D4F0FF':1, '#5f6365':3}
    People_Locations = {0:[150, 450, 0], 1:[270, 330, 1], 2:[450, 90, 2]}
    while Playing_Game == True:
            Restart_Game = False
            while Restart_Game == False:
                if Playing_Game == False:
                    break
                else:
                    Root = Tk()
                    Game_Canvas = Canvas(Root, width = 600, height = 600, bd=0, highlightthickness=0)
                    Generate_Game()
                    Root.bind('<KeyPress>', Move_Player)                  
                    Root.protocol("WM_DELETE_WINDOW", lambda: Game_End("EXIT"))
            if Playing_Game == False:
                break

Root = Tk()
Start_Game()
Root.mainloop()

Had a look today and it turns out the loops at the bottom were what caused the issue not 100% sure what I did as it was trial and error but I will post the code anyway. 今天看了一下,结果发现底部的循环是导致该问题的原因,但并不是百分百地确定我所做的是反复试验,但无论如何我都会发布代码。

Also that code isn't finished completely yet. 而且该代码还没有完全完成。

from tkinter import *
from random import choice, shuffle

def Ending_Conditions():
    global Player_Power, Players_Collected
    if Players_Collected == 3:
        Game_End("YOU WIN!")
    elif Player_Power <= 0 and Players_Collected != 3:
        Game_End("Game Over")

def Game_End(End_Option):
    global Playing_Game, Game_Finished
    if End_Option == "EXIT":
        Playing_Game = False
        Root.destroy()
    else:
        Game_Finished = True
        Game_Canvas.create_rectangle(120, 120, 480, 300, fill = "#ffffff")
        Game_Canvas.create_text(300, 210, text = End_Option, font = ('Abadi', 35, "bold"))
        Continue_Button = Button(Root, text = 'Continue', command = Game_Restart)
        Exit_Button = Button(Root, text = 'Exit', command = lambda: Game_End('EXIT'))
        Continue_Button.pack()
        Exit_Button.pack()

def Game_Restart():
    global Already_Played
    Root.destroy()
    Restart_Game = True
    Already_Played = True

def Paused_UI():
    global Game_Paused, Close_PausedUI
    Close_PausedUI = Button(Root, text = 'Exit', command = Close_Paused_UI)
    Close_PausedUI.pack()
    Game_Paused = True

def Close_Paused_UI():
    global Game_Paused, Close_PausedUI
    Close_PausedUI.pack_forget()
    Game_Paused = False

def Generate_Game():
    global Game_Canvas, Game_Player, Game_Base, Player_Power, Power_Counter, People_Locations, Game_Paused, All_People, Game_Gridcount, Current_Colour, Player_PosY, Player_PosX, Grid_Colour, Players_Collected, Player_Storage
    Current_Colour = 0
    Grid_Colour = []
    Player_PosX, Player_PosY, Player_Storage, Players_Collected, Players_Removed = 300/Game_Gridcount, 300/Game_Gridcount, 0, 0, 0
    People_Locations = {0:[150, 450, 0], 1:[270, 330, 1], 2:[450, 90, 2]}
    Game_Finished = False
    # Generate UI
    Game_Menu = Button(Root, text = 'Menu', command = Paused_UI)
    Game_Menu.pack()
    # Define grid colours
    Grid_Colours = ['#009446', '#D4F0FF', '#5f6365']
    # Generate power counter and pack canvas
    Power_Counter = Label(Root, text = Player_Power)
    Power_Counter.pack()
    Game_Canvas.pack()
    # Generate Grid and Colours
    for y in range(Game_Gridcount):
        for x in range(Game_Gridcount):
            shuffle(Grid_Colours)
            Game_Grid = Game_Canvas.create_rectangle(Grid_Rectangle*x, Grid_Rectangle*y, Grid_Rectangle+Grid_Rectangle*x, Grid_Rectangle+Grid_Rectangle*y, fill = Grid_Colours[0])
            Grid_Colour.append(Grid_Colours[0])
    # Generate Robot Player
    Game_Player = Game_Canvas.create_text(Player_PosX, Player_PosY, text = "R", font = ('Abadi', 450//Game_Gridcount, "bold"))
    # Generate Player Base
    Game_BaseX, Game_BaseY = Grid_Rectangle*(Game_Gridcount-1.5), Grid_Rectangle*(Game_Gridcount-2.5)
    Game_Base = Game_Canvas.create_text(Game_BaseX, Game_BaseY, text = "B", font = ('Abadi', 450//Game_Gridcount, "bold"))
    # Generate People
    for i in range(Game_People):
        Person_Location = People_Locations[i] Grid_Rectangle*(Game_Gridcount-1.5)
        Game_Person = Game_Canvas.create_text(Grid_Rectangle*(Game_Gridcount-Person_Location[0]), (Grid_Rectangle*(Game_Gridcount-Person_Location[1]), text = "P", font = ('Abadi', 450//Game_Gridcount, "bold"), tag = 'Game_Person')
    All_People = Game_Canvas.find_withtag('Game_Person')
    All_People = list(All_People)

def Move_Player(event):
    global Game_Canvas, Game_Player, Game_Base, Player_PosY, Player_PosX, Current_Colour, Player_Power, Power_Counter, Player_Storage, Players_Collected, Game_Finished, Current_Person
    if event.char.lower() == '\x1b' and Game_Paused == False:
        Paused_UI()
    elif event.char.lower() == '\x1b' and Game_Paused == True:
        Close_Paused_UI()
    if Game_Paused == False and Game_Finished != True:
        Movement_Value = Movement_Values[event.char.lower()]
        if Player_PosX != Movement_Value[0] and Player_PosY != Movement_Value[1]:
            # Detect current grid colour and configure power accordingly
            Player_Power = Player_Power - Power_Values[Grid_Colour[Current_Colour]]
            Power_Counter.configure(text = Player_Power)
            Current_Colour = Current_Colour + Movement_Value[4]
            # Delete the player then recreate in its new position
            Game_Canvas.delete(Game_Player)
            Player_PosX, Player_PosY = Player_PosX + Movement_Value[2], Player_PosY + Movement_Value[3]
            Game_Player = Game_Canvas.create_text(Player_PosX, Player_PosY, text = "R", font = ('Abadi', 450//Game_Gridcount, "bold"))
            # Detect Person
            for item in People_Locations:
                Person_Location = People_Locations[item]
                if Player_PosX  == Person_Location[0] and Player_PosY == Person_Location[1] and Player_Storage != 1:
                    Current_Person = Person_Location[2]
                    Game_Canvas.delete(All_People[Current_Person])
                    Player_Storage += 1
            if Player_PosX == 450 and Player_PosY == 330:
                if Player_Storage == 1:
                    Player_Storage -= 1
                    Players_Collected += 1
                    Clear_Current = People_Locations[Current_Person]
                    Clear_Current = Clear_Current[2]
                    People_Locations.pop(Clear_Current)
        Ending_Conditions()

def Start_Game():
    global Start_Canvas
    Start_Canvas = Canvas(Root, width = 600, height = 500, bd=0, highlightthickness=0, bg = '#ffffff')
    Start_Canvas.pack()

    Title = Start_Canvas.create_text(300, 163, text = "BOTMOD", font = ('Cinema Gothic BTN Shadow', 75, 'normal'))

    Play_Button = Button(text = "PLAY", width = 10, font=('Arial', 15), command = Play_Game)
    Play_Button = Start_Canvas.create_window(300, 325, window = Play_Button)

    Exit_Button = Button(text = "EXIT", width = 10, font=('Arial', 15), command = lambda: Game_End("EXIT"))
    Exit_Button = Start_Canvas.create_window(300, 375, window = Exit_Button)

def Play_Game():
    global Menu_Canvas, Grid_Entry, Power_Entry, People_Entry
    if Already_Played == False:
        Start_Canvas.destroy()
    Menu_Canvas = Canvas(Root, width = 600, height = 500, bd=0, highlightthickness=0, bg = '#C0C0C0')
    Menu_Canvas.pack()

    Title_Rectangle = Menu_Canvas.create_rectangle(120, 10, 480, 100, fill = '#000000')
    Slider_Rectangle = Menu_Canvas.create_rectangle(120, 110, 480, 430, fill = '#000000')
    Footer_Rectangle = Menu_Canvas.create_rectangle(120, 440, 480, 490, fill = '#000000')

    Title = Menu_Canvas.create_text(300, 55, text = "BOTMOD", font = ('Cinema Gothic BTN Shadow', 55, 'normal'), fill = '#ffffff')

    Description_Text = Label(text = "Set Game Options", font=('Arial', 15, 'bold'), bg = '#000000', fg = '#ffffff')
    Description_Text = Menu_Canvas.create_window(300, 145, window = Description_Text)

    Power_Text = Label(text = "Robot Power", font=('Cinema Gothic BTN Shadow', 15), bg = '#000000', fg = '#ffffff')
    Power_Text = Menu_Canvas.create_window(300, 195, window = Power_Text)
    Power_Entry = Scale(Root, from_= 50, to = 350, orient = HORIZONTAL, bg = '#000000', fg = '#ffffff', highlightthickness=0, bd = 0)
    Power_Entrys = Menu_Canvas.create_window(300, 225, window = Power_Entry)

    People_Text = Label(text = "Person Count", font=('Cinema Gothic BTN Shadow', 15), bg = '#000000', fg = '#ffffff')
    People_Text = Menu_Canvas.create_window(300, 280, window = People_Text)
    People_Entry = Scale(Root, from_= 2, to = 10, orient = HORIZONTAL, bg = '#000000', fg = '#ffffff', highlightthickness=0, bd = 0)
    People_Entrys = Menu_Canvas.create_window(300, 310, window = People_Entry)

    Grid_Text = Label(text = "Grid Count", font=('Cinema Gothic BTN Shadow', 15), bg = '#000000', fg = '#ffffff')
    Grid_Text = Menu_Canvas.create_window(300, 365, window = Grid_Text)
    Grid_Entry = Scale(Root, from_= 6, to = 14, orient = HORIZONTAL, resolution = 2, bg = '#000000', fg = '#ffffff', highlightthickness=0, bd = 0)
    Grid_Entrys = Menu_Canvas.create_window(300, 395, window = Grid_Entry)

    Play_Button = Button(text = "OK", width = 15, font=('Cinema Gothic BTN Shadow', 10), command = lambda: Init_Game("CUSTOM"), bg = '#000000', fg = '#ffffff')
    Play_Button = Menu_Canvas.create_window(400, 465, window = Play_Button)
    PlayWD_Button = Button(text = "Use Defaults", width = 15, font=('Cinema Gothic BTN Shadow', 10), command = lambda: Init_Game("DEFAULT"), bg = '#000000', fg = '#ffffff')
    PlayWD_Button = Menu_Canvas.create_window(200, 465, window = PlayWD_Button)

def Init_Game(Game_Options):
    global Player_PosY, Player_PosX, Game_Paused, Game_Finished, Playing_Game, Player_Power, Game_Gridcount, Player_Movement, Game_People, Game_Canvas, Movement_Values, Power_Values, Grid_Rectangle
    if Game_Options == "DEFAULT":
        Game_Gridcount = 10
        Grid_Rectangle = 600/10
        Player_Movement = Grid_Rectangle/2
        Player_Power = 150
        Game_People = 3
    elif Game_Options == "CUSTOM":
        Game_Gridcount = Grid_Entry.get()
        Grid_Rectangle = 600/Game_Gridcount
        Player_Movement = Grid_Rectangle/2
        Player_Power = Power_Entry.get()
        Game_People = People_Entry.get()

    Movement_Values = {'w':(1000, 300/Game_Gridcount, 0, -600/Game_Gridcount, 10), 'a':(300/Game_Gridcount, 1000, -600/Game_Gridcount, 0, -1), 's':(1000, 600-Player_Movement, 0, 600/Game_Gridcount, Game_Gridcount-Game_Gridcount*2), 'd':(600-Player_Movement, 1000, 600/Game_Gridcount, 0, 1)}
    Power_Values = {'#009446':2, '#D4F0FF':1, '#5f6365':3}
    People_Locations = {0:[1.5, 1.5, 0], 1:[1.5, 4.5, 1], 2:[1.5, 1.5, 2], 3:[1.5, 1.5, 3], 4:[1.5, 1.5, 4], 5:[1.5, 1.5, 5], 6:[1.5, 1.5, 6], 7:[1.5, 1.5, 7], 8:[1.5, 1.5, 8], 9:[1.5, 1.5, 9], 10:[1.5, 1.5, 10]}
    Menu_Canvas.destroy()
    Game_Canvas = Canvas(Root, width = 600, height = 600, bd=0, highlightthickness=0)
    Generate_Game()
    Root.bind('<KeyPress>', Move_Player)                  
    Root.protocol("WM_DELETE_WINDOW", lambda: Game_End("EXIT"))

Playing_Game = True
Game_Paused = False
Restart_Game = False
Already_Played = False

while True:
    while Restart_Game == False:
        if Playing_Game == False:
            break
        else:
            Game_Finished = False
            Grid_Colour = []
            Power_Values = {'#009446':2, '#D4F0FF':1, '#5f6365':3}
            Root = Tk()
            if Already_Played == True:
                Play_Game()
                Root.mainloop()
            elif Already_Played == False:
                Start_Game()
                Root.mainloop()
    break

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM