无法导入我的游戏文件 运行
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(...)
我目前正在编写一个有菜单的游戏,一旦用户点击开始玩游戏,到目前为止我已经编写了我的菜单并且游戏即将完成但我不确定如何连接他们?我创建了 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(...)