ここに私のコードです。私が望むのは、マップに1がある場合は、そこにWall
を作成することです。しかし、私がプログラムを実行すると、それはWall(col, row). NameError: name 'col' is not defined.
と言いますこれをどのように修正できますか?私は多くの答えを探しましたが、本当に解決した人はいません。 col
とrow
を使用して、特定のXとYにWall
を追加する場所をコンピュータにどのように伝えることができますか?どんな助けもありがとうございます。Pygameでmap.txtファイルをマップとしてインポートするには?
import pygame as pg
import sys
import os
WIDTH = 800
HEIGHT = 600
TITLE = 'Importing A Map'
CLOCK = pg.time.Clock()
FPS = 60
DARKGRAY = (40, 40, 40)
RED = (255, 0, 0)
game_folder = os.path.dirname(__file__)
# create tiles, (WIDTH = 20 tiles, HEIGHT = 15 tiles)
TILESIZE = 40
GRIDWIDTH = WIDTH/TILESIZE
GRIDHEIGHT = HEIGHT/TILESIZE
screen = pg.display.set_mode((WIDTH, HEIGHT))
pg.display.set_caption(TITLE)
def load_map():
map_data = []
with open(path.join(game_folder, 'map.txt'), 'rt') as f:
for line in f:
map_data.append(line)
def new_game():
for row, tiles in enumerate(map_data):
for col, tile in enumerate(tiles):
# Here is the part where I have problems.
if tile == '1':
Wall(col, row)
def draw_tiles():
for x in range(0, WIDTH, TILESIZE):
pg.draw.line(screen, DARKGRAY, (x, 0), (x, HEIGHT))
for y in range(0, HEIGHT, TILESIZE):
pg.draw.line(screen, DARKGRAY, (0, y), (WIDTH, y))
class Wall(pg.sprite.Sprite):
def __init__(self, x, y):
pg.sprite.Sprite.__init__(self)
self.x = x
self.y = y
self.image = pg.Surface((TILESIZE, TILESIZE))
self.image.fill(RED)
self.rect = self.image.get_rect()
self.rect.x = x * TILESIZE
self.rect.y = y * TILESIZE
wall = Wall(col, row)
def game_loop():
pg.init()
all_sprites = pg.sprite.Group()
all_sprites.add(wall)
running = True
while running:
for event in pg.event.get():
if event.type == pg.QUIT:
running = False
draw_tiles()
all_sprites.update()
all_sprites.draw(screen)
pg.display.update()
CLOCK.tick(FPS)
pg.quit()
game_loop()
パーサーは正しくあります:変数 'col'と' row'の値を使用しようとしていますが、どちらもまだ値を持っていません。私はあなたのコードの構造に疑問を抱いています:クラス定義と 'game_loop'関数の間にメインプログラムのステートメントが単独で存在するのはなぜですか? – Prune
ようこそStackOverflowへ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。 投稿したコードをテキストファイルに貼り付け、説明した問題を再現できるはずです。 特に、ゲームグリッドの構築に使用しようとしているコードを*のみ*与えてください。サンプル入力を、特にハードコーディングされた座標リストとして含めるようにしてください。 – Prune
あなたのコードには2つの 'Wall(col、row)'呼び出しがあります。どの原因でエラーが発生していますか? 'map.txt'ファイルのデータのフォーマットは?これらはあなたを助けるために人々が知る必要があるものです。そうでなければ彼らは推測する必要があります。 – martineau