无法导入我的游戏文件 运行

cant import my game file to be able to run

我目前正在编写一个有菜单的游戏,一旦用户点击开始玩游戏,到目前为止我已经编写了我的菜单并且游戏即将完成但我不确定如何连接他们?我创建了 4 个文件,一个运行程序,一个带有菜单 class,一个称为游戏,最后一个 shapes.Shapes 是我想在用户启动后启动的游戏点击开始游戏。我想我的问题可能是我没有在 Shapes 文件中使用 class 但我不确定?

我会在下面留下文件的代码。

运行程序:` 从游戏导入游戏 导入形状

g = Game()

while g.running:
   g.curr_menu.display_menu()
   g.game_loop()

菜单文件:

import pygame

class Menu():
    def __init__(self, game):
        self.game = game
        self.mid_w, self.mid_h = self.game.DISPLAY_W / 2, self.game.DISPLAY_H / 2
        self.run_display = True
        self.cursor_rect = pygame.Rect(0, 0, 20, 20)
        self.offset = - 100

    def draw_cursor(self):
        self.game.draw_text('*', 25, self.cursor_rect.x, self.cursor_rect.y)

    def blit_screen(self):
        self.game.window.blit(self.game.display, (0, 0))
        pygame.display.update()
        self.game.reset_keys()

class MainMenu(Menu):
    def __init__(self, game):
        Menu.__init__(self, game)
        self.state = "Start"
        self.startx, self.starty = self.mid_w, self.mid_h + 40
        self.optionsx, self.optionsy = self.mid_w, self.mid_h + 78
        self.creditsx, self.creditsy = self.mid_w, self.mid_h + 120
        self.cursor_rect.midtop = (self.startx + self.offset, self.starty)

    def display_menu(self):
        self.run_display = True
        while self.run_display:
            self.game.check_events()
            self.check_input()
            self.game.display.fill(self.game.BLACK)
            self.game.draw_text('Main Menu', 48, self.game.DISPLAY_W / 2, self.game.DISPLAY_H / 2 - 20)
            self.game.draw_text("Start Training", 28, self.startx, self.starty)
            self.game.draw_text("Options", 28, self.optionsx, self.optionsy)
            self.game.draw_text("Credits", 28, self.creditsx, self.creditsy)
            self.draw_cursor()
            self.blit_screen()


    def move_cursor(self):
        if self.game.DOWN_KEY:
            if self.state == 'Start':
                self.cursor_rect.midtop = (self.optionsx + self.offset, self.optionsy)
                self.state = 'Options'
            elif self.state == 'Options':
                self.cursor_rect.midtop = (self.creditsx + self.offset, self.creditsy)
                self.state = 'Credits'
            elif self.state == 'Credits':
                self.cursor_rect.midtop = (self.startx + self.offset, self.starty)
                self.state = 'Start'
        elif self.game.UP_KEY:
            if self.state == 'Start':
                self.cursor_rect.midtop = (self.creditsx + self.offset, self.creditsy)
                self.state = 'Credits'
            elif self.state == 'Options':
                self.cursor_rect.midtop = (self.startx + self.offset, self.starty)
                self.state = 'Start'
            elif self.state == 'Credits':
                self.cursor_rect.midtop = (self.optionsx + self.offset, self.optionsy)
                self.state = 'Options'

    def check_input(self):
        self.move_cursor()
        if self.game.START_KEY:
            if self.state == 'Start':
                self.game.playing = True
            elif self.state == 'Options':
                self.game.curr_menu = self.game.options
            elif self.state == 'Credits':
                self.game.curr_menu = self.game.credits
            self.run_display = False

class OptionsMenu(Menu):
    def __init__(self, game):
        Menu.__init__(self, game)
        self.state = 'Progress'
        self.volx, self.voly = self.mid_w, self.mid_h + 20
        self.controlsx, self.controlsy = self.mid_w, self.mid_h + 60
        self.cursor_rect.midtop = (self.volx + self.offset, self.voly)

    def display_menu(self):
        self.run_display = True
        while self.run_display:
            self.game.check_events()
            self.check_input()
            self.game.display.fill((0, 0, 0))
            self.game.draw_text('Options', 48, self.game.DISPLAY_W / 2, self.game.DISPLAY_H / 2 - 30)
            self.game.draw_text("Progress", 28, self.volx, self.voly)
            self.game.draw_text("Controls", 28, self.controlsx, self.controlsy)
            self.draw_cursor()
            self.blit_screen()

    def check_input(self):
        if self.game.BACK_KEY:
            self.game.curr_menu = self.game.main_menu
            self.run_display = False
        elif self.game.UP_KEY or self.game.DOWN_KEY:
            if self.state == 'Progress':
                self.state = 'Controls'
                self.cursor_rect.midtop = (self.controlsx + self.offset, self.controlsy)
            elif self.state == 'Controls':
                self.state = 'Progress'
                self.cursor_rect.midtop = (self.volx + self.offset, self.voly)
        elif self.game.START_KEY:
            # TO-DO: Create a Volume Menu and a Controls Menu
            pass

class CreditsMenu(Menu):
    def __init__(self, game):
        Menu.__init__(self, game)

    def display_menu(self):
        self.run_display = True
        while self.run_display:
            self.game.check_events()
            if self.game.START_KEY or self.game.BACK_KEY:
                self.game.curr_menu = self.game.main_menu
                self.run_display = False
            self.game.display.fill(self.game.BLACK)
            self.game.draw_text('Credits', 28, self.game.DISPLAY_W / 2, self.game.DISPLAY_H / 2 - 20)
            self.game.draw_text('Made by Dylan Jackson', 20, self.game.DISPLAY_W / 2, self.game.DISPLAY_H / 2 + 10)
            self.blit_screen()

游戏文件:

import pygame
import os
from menu import *


class Game():
    def __init__(self):
        pygame.init()
        self.running, self.playing = True, False
        self.UP_KEY, self.DOWN_KEY, self.START_KEY, self.BACK_KEY = False, False, False, False
        self.DISPLAY_W, self.DISPLAY_H = 700, 600
        self.display = pygame.Surface((self.DISPLAY_W,self.DISPLAY_H))
        self.window = pygame.display.set_mode(((self.DISPLAY_W,self.DISPLAY_H)))
        self.font_name = 'Font.ttf'
        #self.font_name = pygame.font.get_default_font()
        self.BLACK, self.WHITE = (0, 0, 0), (255, 255, 255)
        self.main_menu = MainMenu(self)
        self.options = OptionsMenu(self)
        self.credits = CreditsMenu(self)
        self.curr_menu = self.main_menu


    def game_loop(self):
        while self.playing:
            self.check_events()
            if self.START_KEY:
                self.playing= True

            self.display.fill(self.BLACK)
            self.draw_text('Thanks for Playing', 30, self.DISPLAY_W/2, self.DISPLAY_H/2)
            self.window.blit(self.display, (0,0))
            pygame.display.update()
            self.reset_keys()



    def check_events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.running, self.playing = False, False
                self.curr_menu.run_display = False
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    self.START_KEY = True
                if event.key == pygame.K_BACKSPACE:
                    self.BACK_KEY = True
                if event.key == pygame.K_DOWN:
                    self.DOWN_KEY = True
                if event.key == pygame.K_UP:
                    self.UP_KEY = True

    def reset_keys(self):
        self.UP_KEY, self.DOWN_KEY, self.START_KEY, self.BACK_KEY = False, False, False, False

    def draw_text(self, text, size, x, y ):
        font = pygame.font.Font(self.font_name,size)
        text_surface = font.render(text, True, self.WHITE)
        text_rect = text_surface.get_rect()
        text_rect.center = (x,y)
        self.display.blit(text_surface,text_rect)

形状文件:

import pygame
import os
import time
import random

WHITE = (250, 250, 250)
WIDTH, HEIGHT = 750, 600
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Eye Reaction App !")
FPS = 60
IMAGE_WIDTH, IMAGE_HEIGHT = 60, 50

GOLD_STAR_IMAGE = pygame.image.load(
    os.path.join('Assets', 'gold_star.png'))
GOLD_STAR = pygame.transform.scale(GOLD_STAR_IMAGE, (IMAGE_WIDTH, IMAGE_HEIGHT))

GREEN_TRIANGLE_IMAGE = pygame.image.load(
    os.path.join('Assets', 'green_triangle.png'))
GREEN_TRIANGLE = pygame.transform.scale(GREEN_TRIANGLE_IMAGE, (IMAGE_WIDTH, IMAGE_HEIGHT))

LIGHT_BLUE_RECTANGLE_IMAGE = pygame.image.load(
    os.path.join('Assets', 'light_blue_rectangle.png'))
LIGHT_BLUE_RECTANGLE = pygame.transform.scale(LIGHT_BLUE_RECTANGLE_IMAGE, (IMAGE_WIDTH, IMAGE_HEIGHT))

ORANGE_SQUARE_IMAGE = pygame.image.load(
    os.path.join('Assets', 'orange_square.png'))
ORANGE_SQUARE = pygame.transform.scale(ORANGE_SQUARE_IMAGE, (IMAGE_WIDTH, IMAGE_HEIGHT))

PURPLE_HEXAGON_IMAGE = pygame.image.load(
    os.path.join('Assets', 'purple_hexagon.png'))
PURPLE_HEXAGON = pygame.transform.scale(PURPLE_HEXAGON_IMAGE, (IMAGE_WIDTH, IMAGE_HEIGHT))

RED_CIRCLE_IMAGE = pygame.image.load(
    os.path.join('Assets', 'red_circle.png'))
RED_CIRCLE = pygame.transform.scale(RED_CIRCLE_IMAGE, (IMAGE_WIDTH, IMAGE_HEIGHT))


def draw_window_one(star, triangle, rectangle, square, hexagon, circle):
    WIN.fill(WHITE)
    WIN.blit(GOLD_STAR, (star.x, star.y))
    WIN.blit(GREEN_TRIANGLE, (triangle.x, triangle.y))
    WIN.blit(LIGHT_BLUE_RECTANGLE, (rectangle.x, rectangle.y))
    WIN.blit(ORANGE_SQUARE, (square.x, square.y))
    WIN.blit(PURPLE_HEXAGON, (hexagon.x, hexagon.y))
    WIN.blit(RED_CIRCLE, (circle.x, circle.y))

    pygame.display.update()


def main():
    star = pygame.Rect(75, 0, WIDTH, HEIGHT)
    triangle = pygame.Rect(575, 0, WIDTH, HEIGHT)
    rectangle = pygame.Rect(175, 0, WIDTH, HEIGHT)
    square = pygame.Rect(275, 0, WIDTH, HEIGHT)
    hexagon = pygame.Rect(375, 0, WIDTH, HEIGHT)
    circle = pygame.Rect(475, 0, WIDTH, HEIGHT)

    clock = pygame.time.Clock()
    run = True
    while run:
        clock.tick(FPS)
        if star.y > HEIGHT:
            star.y = -1
        elif triangle.y > HEIGHT:
            triangle.y = -1
        elif rectangle.y > HEIGHT:
            rectangle.y = -1
        elif square.y > HEIGHT:
            square.y = -1
        elif hexagon.y > HEIGHT:
            hexagon.y = -1
        elif circle.y > HEIGHT:
            circle.y = -1
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
        star.y += 2
        triangle.y += 2
        rectangle.y += 2
        square.y += 2
        hexagon.y += 2
        circle.y += 2
        draw_window_one(star, triangle, rectangle, square, hexagon, circle)

    pygame.quit()
if __name__ == "__main__":
    main()

首先,运行程序需要assets文件夹。

即便如此,我认为你的主要问题是你在做

import Shapes 

不存在的,建议你这样导入

from shapes import *

这意味着将执行文件形状。并且您将能够使用声明的所有函数和变量。

如果你这样做

import shapes

要使用您的函数,您需要像这样调用它们

shapes.draw_window_one(...)