0

質問がありますが、どの言語を使用すればよいかわかりません。グローバルを使用せずに、他のモジュールからメイン ドライバー モジュールで定義されたキャンバスにアクセスする方法について、少し混乱しています。たとえば、driver.py でキャンバスをインスタンス化しましたが、Level.py から描画しようとしています。コンテキストとしては、最終的にはテキスト ファイルを読み取り、そこから抽出したデータに基づいて RPG 風のゲーム用にマップを描画します。これが私のコードです:

Driver.py:

import tkinter
import Level


HEIGHT = 1024
WIDTH = 800
TILE_SIZE = 32
VERTICAL_TILES = HEIGHT//TILE_SIZE
HORIZONTAL_TILES = WIDTH//TILE_SIZE

root = tkinter.Tk()
root.title("RPG Land")
window = tkinter.Canvas(root,width= WIDTH, height=HEIGHT )


lev = Level.LevelMgr()
lev.loadLevel()
lev.drawLevel()

window.pack()

root.mainloop()

Annnd Level.py:

import tkinter
from driver import window

class LevelMgr:
    def __init__(self):
        self.levelData = []
        self.visibleLevel = []
        self.tileColors = {
                            0 : 'empty',
                            1 : 'wall',
                            2 : 'bush' }

    def loadLevel(self):
        fyle = open('levels/level1','r')
        count = 0
        for lyne in fyle:
            self.levelData.append(lyne)
            count += 1


    def drawLevel(self):
        currentY = 0
        currentX = 0
        for col in self.levelData:
            currentY += 32
            for t in col:
                window.create_rectangle(currentX, currentY, 32, 32, fill="blue")
                currentX += 32

プログラムをより適切に構成する方法についてのアドバイスもいただければ幸いです。他の名前空間にアクセスする場合、適切な方法は何ですか? level.py に「ドライバーをインポート」するだけでなく、driver.py に「レベルをインポート」する必要がありますか? そのようなプログラムの基本的な構造について、私は少し混乱しています。

4

1 に答える 1

1

LevelMgrウィンドウに依存するため、明示的に名前を付けます__init__

class LevelMgr:
    def __init__(self, window):
        self.window = window
    def drawLevel(self):
        ...
            for t in col:
                self.window.create_rectangle(currentX, currentY, 32, 32, fill="blue")

import ステートメントを削除します。

from driver import window

次に、Driver.py で:

lev = Level.LevelMgr(window)

別の可能性は、windowの代わりに Level.py で単純に定義することですDriver.py

于 2013-04-04T04:13:38.087 に答える