0

我已经多次查看教程,但仍然有这个错误。在该系列的第一个视频之后,他能够显示该板。该错误在我的导入语句中突出显示了 ChessEngine。

这是我的主要资源:https ://www.youtube.com/watch?v=EnYui0e73Rs&t=2095s

这是错误: ImportError: cannot import name 'ChessEngine' from 'Chess' (unknown location)

请停下来

我的代码如下

***import pygame as p
from Chess import ChessEngine
WIDTH = HEIGHT = 512  # optional 400
DIMENSIONS = 8  # dimensions are 8x8
SQ_SIZE = HEIGHT // DIMENSIONS
MAX_FPS = 15  # For animation
IMAGES = {}
'''
Initialize global dictionary of images. this will be called once in the main
'''
def load_images():
    pieces = ["wp", "wR", "wN", "wB", "wQ", "wK", "wB", "wN", "wR", "bp", "bR", "bN", "bB", "bQ", "bK", "bB", "bN",
              "bR"]
    for piece in pieces:
        IMAGES[piece] = p.transform.scale(p.image.load("images/" + piece + "wp.png"), (SQ_SIZE, SQ_SIZE))
#         note: we can access an image by saying 'IMAGES['wp']
'''
main driver for our code  handles user input and updating graphics 
'''
def main():
    p.init()
    screen = p.display.set_mode((WIDTH, HEIGHT))
    clock = p.time.Clock()
    screen.fill(p.Color("white"))
    gs = ChessEngine.GameState()
    print(gs.board)
    load_images()  # only operated once
    running = True
    while running:
        for e in p.event.get():
            if e.type == p.QUIT:
                running = False
            drawGameState((screen, gs))
            clock.tick(MAX_FPS)
            p.display.flip()
def drawGameState(screen, gs):
    drawBoard(screen) #draw squares on board
    drawPieces(screen, gs.board)
def drawBoard(screen):
    colors = [p.Color("white", p.Color("grey"))]
    for r in range(DIMENSIONS):
        for c in range(DIMENSIONS):
            color = colors[((r+c) % 2)]
            p.draw.rect(screen, color, p.Rect(c*SQ_SIZE, r*SQ_SIZE, SQ_SIZE, SQ_SIZE))
def drawPieces(screen, board):
    '''
    draws the pieces on the board using current gameState.board
    '''
if __name__ == "__main__":
    main()***
4

1 回答 1

0

如果您看到 youtube 视频的文件夹结构,他有一个名为 Chess 的根文件夹:

| Chess
| | --> images
| | --> ChessEngine.py
| | --> __init__.py 
| ...

当您声明时import,如果存在具有导入名称的模块(文件夹或文件),python 将搜索调用文件夹(根文件夹)。如果文件夹包含__init__.py文件,它将被视为一个模块。

对于您的使用,您有两种选择:

  1. 有一个以Chess.py导出成员命名的文件ChessEngine
  2. 有一个名为 的文件夹Chess,其中包含一个__init__.py公开ChessEngine成员的文件

我想如果您按照链接的整个教程进行操作,他们会告诉您如何从__init__.py文件中公开成员。

如果您想更好地了解导入系统 (Docs Python)的工作原理,可以查看文档。

于 2021-02-10T16:18:04.830 回答