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



我目前正在编写一个有菜单的游戏,一旦用户点击开始游戏,游戏就开始了,到目前为止,我已经对菜单进行了编码,游戏几乎完成了,但我不知道如何连接它们?我创建了4个文件,一个运行程序,一个带有菜单类,一个称为游戏,最后一个是形状。形状是我想在用户点击开始游戏后开始的游戏。我想我的问题可能是我没有在Shapes文件中使用类,但我不确定?

我将把代码留给下面的文件。

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

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(...)

最新更新