2013-11-24 1 views
0

난 그냥 불량과 같은 게임을 만들기위한 튜토리얼을 끝 냈고, 나는 freature를 구현하려고합니다.여러 파일 처리 (코드 종속성 - Python)

문제는 전체 게임이 1k + 라인이있는 단일 파일이라는 것입니다.

당신이 볼 수 있듯이 :

http://roguebasin.roguelikedevelopment.org/index.php?title=Complete_Roguelike_Tutorial,_using_python%2Blibtcod,_part_13_code

내가 구현지도/플레이어/NPC들과 같은 게임의 각 측면에 대한 파일과 좀더 처리하기 위해 다른 파일/폴더를 나눌/items ...하지만 최소한 Classes/Functions/Main으로 나눕니다.

문제는 내가 Main.py에 넣고 때, :

from Classes import * 
from Functions import * 

나는 홈페이지에 사용되는 모듈이다

NameError: name 'libtcod' is not defined 

를 얻을. 는 그럼 난 Main.py

에 나는 또한에 시도

를 전역 변수 인 Classes.py 및

Functions.py

에 Main.py을 가져 그리고

NameError: global name 'MAP_WIDTH' is not defined 

MAP_WIDTH를 얻기 위해 노력 Classes.py 및 Functions.py

에 전체 Main.py를 가져하지만 내가 얻을 :

NameError: name 'Fighter' is not defined 
,536,

파이터는 Classes.py의 클래스입니다

누구든지 나를 분류 할 수 있도록 도와 주므로 누구든지 생물을 구현할 수 있습니다.

편집 : 하나의 간단한 예는 다음과 같습니다

Main.py

from Functions import * 
def plus_one(ab): 
    return ab +1 

a = 1 
b = 2 
c = add_things() 
print plus_one(c) 

에게 Functions.py

from Main import * 
def add_things(): 
    global a,b 
    return a + b 

그것은 간단한 예,하지만 프로젝트에 상호 많이 얻을 클래스/함수와 메인 파일 사이의 의존성.

+0

Classes.py 또는 Functions.py에서 libtcod를 사용하는 경우 현재 Main.py로 가져 오는 것과 마찬가지로 모듈을 모듈로 가져와야합니다. –

+0

나는 클래스에 대해 NameError를 얻고있다. –

+0

제 제안은 당신이 책을 읽거나 파이썬으로 객체 지향 프로그래밍에 관한 튜토리얼을 읽는 것입니다. 예를 들어, Beginning Python : 초보자부터 전문가까지 Magnus Lie Hetland는 좋은 출발점입니다. –

답변

0

코드 및 계획 한 프로그램 아키텍처에는 많은 문제가 있습니다. 귀하의 게시물에 대한 내 의견을 읽어주십시오. 당신은 객체 지향 프로그래밍에 대한 지식을 뒷받침 할 필요가 있습니다.

먼저, from Classes import *을 절대 사용하지 않는 것이 좋습니다. import Classes을 사용해야합니다. 그런 다음 모듈에서 함수 또는 상수에 액세스하려면 Classes.function_name 또는 Classes.constant를 사용합니다. 파이썬에서 올바르게 임포트하는 방법에 대한 자세한 정보는 http://effbot.org/zone/import-confusion.htm

둘째, 전역 변수는 파이썬에서 권장하지 않습니다. 그러나 필요한 경우 파이썬에서 global variable은 전체 프로그램이 아니라 모듈에 전역 적이라는 것을 기억해야합니다. 파이썬의 전역 변수는 이상한 짐승입니다. 전역 변수를 읽을 필요가 있다면 특별한 것은 필요 없습니다.그러나 함수 내에서 전역 변수를 수정하려면 global 키워드를 사용해야합니다.

셋째, 당신이하는 일은 원 의존성이라고합니다. 모듈 A, 가져 오기 모듈 B 및 모듈 B는 모듈 A를 가져옵니다. 공유 함수, 클래스 등을 세 번째 모듈 C에 정의 할 수 있습니다. 그러면 A와 B 모두 모듈 C를 가져올 수 있습니다. 또한 모듈 C에서 MAP_WIDTH과 같은 상수를 정의 할 수 있습니다. import C 인 경우 A 또는 B에서 C.MAP_WIDTH으로 액세스하십시오.

+0

아, 정보를 주셔서 감사합니다 ... 저는 여전히 Python과 프로그래밍 전반에 대해 매우 익숙합니다. 내가 제공 한 코드는 제 것이 아니라 튜토리얼의 코드입니다. 나는 그것이 권고받지 않았 음을 이미 알게 된 것처럼이 많은 세계를 사용하지 않을 것이다. 다른 전역에서 액세스 할 수 있도록 모든 전역 파일을 저장하기 위해 네 번째 파일을 만드는 방법에 대해 생각해 보았습니다. 3? 내가 언급 한 책을 확인해 보겠습니다. –