2015-01-08 6 views
0

저는 libtcodpy로 roguelike를 작성하고 있습니다. 작동하지만이 목록을 실행할 때 페이지 하단의 http://kooneiform.wordpress.com/2009/03/29/241/은 전체 목록이며 다른 시도해 본 결과 다음과 같은 오류가 표시됩니다.Libtcodpy에 문제가 있습니다.

참고 자료 libtcodpy.py, SDL.dll, libtcod-mingw.dll 파일은 libtcodpy에서 가장 많이 사용되는 튜토리얼을 따라 작동합니다.

$ python roguelike_practice2.py 
Traceback (most recent call last): 
    File "roguelike_practice2.py", line 165, in <module> 
    draw() 
    File "roguelike_practice2.py", line 98, in draw 
    libtcod.console_set_foreground_color(0, libtcod.white) 
AttributeError: 'module' object has no attribute 'console_set_foreground_color' 

내가 또한 같은 프로그램에 console_set_background_color, console_print_left와 동일한 문제가 발생 : 목록에 대한

나는이 특정 오류가 발생 위. 없음. 모두 같은 오류가 있습니다. 다른 명부

같은 일이 같이

#!/usr/bin/python 

###imports### 

import os 

import libtcodpy as libtcod 

###utility functions### 

def get_key(key): 
    if key.vk == libtcod.KEY_CHAR: 
     return chr(key.c) 
    else: 
     return key.vk 

###global constants and variables### 


window_width = 46 
window_height = 20 

first = True 
fov_px = 9 
fov_py = 10 
fov_recompute = True 
fov_map = None 
fov_colors = { 
       'dark wall' : libtcod.Color(0, 0, 100), 
       'light wall' : libtcod.Color(130, 110, 50), 
       'dark ground' : libtcod.Color(50, 50, 150), 
       'light ground' : libtcod.Color(200, 180, 50) 
       } 
fov_init = False 
fov_radius = 4 

do = { 
     'up' : (0, -1), 
     'down' : (0, 1), 
     'right' : (1, 0), 
     'left' : (-1, 0) 
     } 

keys = { 
     'i' :     do['up'], 
     'k' :     do['down'], 
     'j' :     do['left'], 
     'l' :     do['right'], 
     libtcod.KEY_UP :  do['up'], 
     libtcod.KEY_KP8 :  do['up'] 
     } 

smap = ['##############################################', 
     '#######################  #################', 
     '##################### #  ###############', 
     '###################### ###  ###########', 
     '##################  #####    ####', 
     '################  ######## ###### ####', 
     '###############  #################### ####', 
     '################ ######     ##', 
     '######## ####### ###### #  #  # ##', 
     '######## ######  ###     ##', 
     '########         ##', 
     '####  ######  ### #  #  # ##', 
     '#### ### ########## ####     ##', 
     '#### ### ########## ###########=##########', 
     '#### ################## #####   #####', 
     '#### ###    #### #####   #####', 
     '####   #  ####    #####', 
     '########  #  #### #####   #####', 
     '########  #####  ####################', 
     '##############################################', 
     ] 


###drawing### 


def draw(): 
    global fov_px, fov_py, fov_map, first 
    global fov_init, fov_recompute, smap 

    if first: 
     wh = window_height 
     ww = window_width 
     first = False 
     libtcod.console_clear(0) 
     libtcod.console_set_fore(0, ww, wh, libtcod.white) 
     libtcod.console_print_left(0, 1, 1, libtcod.BKGND_NONE, 
         "IJKL : move around") 
     libtcod.console_set_fore(0, ww, wh, libtcod.black) 
     libtcod.console_put_char(0, fov_px, fov_py, '@', 
        libtcod.BKGND_NONE) 

     for y in range(window_height): 
      for x in range(window_width): 
       if smap[y][x] == '=': 
        libtcod.console_put_char(0, x, y, 
           libtcod.CHAR_DHLINE, 
           libtcod.BKGND_NONE) 

    if not fov_init: 
     fov_init = True 
     fov_map = libtcod.map_new(window_width, window_height) 
     for y in range(window_height): 
      for x in range(window_width): 
       if smap[y][x] == ' ': 
        libtcod.map_set_properties(fov_map, x, y, True, True) 
       elif smap[y][x] == '=': 
        libtcod.map_set_properties(fov_map, x, y, True, False) 

    if fov_recompute: 
     fov_recompute = False 
     libtcod.map_compute_fov(fov_map, fov_px, fov_py, fov_radius, True) 

    for y in range(window_height): 
     for x in range(window_width): 
      affect, cell = 'dark', 'ground' 
      if libtcod.map_is_in_fov(fov_map, x, y): 
       affect = 'light' 
      if (smap[y][x] == '#'): 
       cell = 'wall' 
      color = fov_colors['%s %s' % (affect, cell)] 
      libtcod.console_set_back(0, x, y, color, libtcod.BKGND_SET) 


###game state updates### 


def update(key): 
    global fov_py, fov_px, fov_recompute, smap 

    key = get_key(key) 
    if key in keys: 
     dx, dy = keys[key] 
     if smap[fov_py+dy][fov_px+dx] == ' ': 
      libtcod.console_put_char(0, fov_px, fov_py, ' ', 
              libtcod.BKGND_NONE) 
      fov_px = fov_px + dx 
      fov_py = fov_py + dy 
      libtcod.console_put_char(0, fov_px, fov_py, '@', 
              libtcod.BKGND_NONE) 
      fov_recompute = True 

###initialization and main loop### 


font = os.path.join('fonts', 'arial12x12.png') 
libtcod.console_set_custom_font(font, libtcod.FONT_LAYOUT_TCOD | libtcod.FONT_TYPE_GREYSCALE) 

libtcod.console_init_root(window_width, window_height, 'Python Tutorial', False) 

while not libtcod.console_is_window_closed(): 
    draw() 
    libtcod.console_flush() 
    key = libtcod.console_wait_for_keypress(True) 
    update(key) 
    if key.vk == libtcod.KEY_ESCAPE: 
     break 

나는 다시 내가 폴더에 필요한 모든 파일이 윈도우 오전, 다음과 같은 오류가 나타날. 이 목록에 대한

오류 :

Traceback (most recent call last): 
    File "roguelike_practice1.py", line 167, in <module> 
    draw() 
    File "roguelike_practice1.py", line 100, in draw 
    libtcod.console_set_fore(0, ww, wh, libtcod.white) 
    File "c:\Users\cshenkan\CloudStation\Programming\Libtcod\Project 2\libtcodpy.p 
y", line 764, in console_set_fore 
    _lib.TCOD_console_set_fore(con, x, y, col) 
    File "c:\Python27\lib\ctypes\__init__.py", line 378, in __getattr__ 
    func = self.__getitem__(name) 
    File "c:\Python27\lib\ctypes\__init__.py", line 383, in __getitem__ 
    func = self._FuncPtr((name_or_ordinal, self)) 
AttributeError: function 'TCOD_console_set_fore' not found 

나는이 TCOD_console_set_fore 오류에 무리를 실행합니다. 하지만 내가 말했듯이, 나는 같은 오류가 발생하지만 TCOD_console_set_back과 같은 다른 함수를 사용한다.

왜 이러한 오류가 발생하는지 확실하지 않습니다. 파이썬 2.7.9 32 비트를 사용하고, libtcod 1.5.1을 사용합니다. Windows 7 64 비트를 실행 중입니다. 그 set_foreground 및 변형 함수, 또는 print_left 함수 또는 작동하지 않는 다른 함수가 필요하지 않은 다른 프로그램을 실행할 수 있음을 명심하십시오. 그러나 나는 작동하지 않는 모든 기능에 영향을 미치는 하나 또는 두 개의 문제라고 확신합니다. \

누구나 아이디어가 있다면 온라인으로 정보를 찾는데 많은 시간을 할애했습니다. 그리고 libtcod에 대한 포럼은 관리자의 조인 참여 승인을 위해 며칠이 걸립니다.

어쨌든 미리 감사드립니다! 궁금한 점이 있거나 명확한 설명이 필요한 경우 나에게 물어보십시오.

답변

1

TCOD 1.5.1 renamed some functions이므로 두 목록이 충돌하는 이유입니다.

버전 1.5.1은 각각 console_set_default_foregroundconsole_set_background_colorconsole_set_char_foregroundconsole_set_char_background-console_set_fore, console_set_default_background에와 console_set_backconsole_set_foreground_color의 이름을 변경하고, console_wait_for_keypresssys_wait_for_event로 대체되었습니다.

또한 console_print_leftconsole_print_ex으로 바뀌 었으며 배경과 인쇄 할 문자열 사이에 '맞춤'매개 변수가 추가로 있습니다.

+0

많은 도움을 주셔서 감사합니다. – shenk

1

이러한 기능은 1.5.1에서 더 이상 사용되지 않는 것으로 보입니다. 1.5.0에서 찾을 수 있지만 1.5.1이나 1.5.2에서는 찾을 수 없습니다. 대신 console_print_ex 또는 console_print_rect_ex를 사용해야한다고 생각합니다. 그렇지 않으면 코스를 벗어나 1.5.0으로 다시 전환 할 수 있습니다.

+0

답변 해 주셔서 감사합니다. – shenk