有Libtcodpy的问题

时间:2015-01-08 05:48:45

标签: python python-2.7 libtcod

我正在用libtcodpy写一个roguelike。它有效,但是当我运行此列表时:页面底部的http://kooneiform.wordpress.com/2009/03/29/241/是完整列表,还有其他一些我尝试过的,我收到的错误如下:

仅供参考我在Windows上并且拥有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

我收到以下错误,同样我在文件夹中有所有需要的文件,并且在Windows上。

列出2的错误:

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和其他函数。

不确定我为什么会收到这些错误。我相信使用Python 2.7.9 32位和libtcod 1.5.1。运行Windows 7 64位。请记住,我可以运行其他程序,不需要任何set_foreground和变量函数,或print_left函数或任何其他函数不起作用。但我确定它会影响所有不起作用的功能。 \

如果有人有任何想法,我花了很多时间在网上寻找信息无济于事。 libtcod论坛需要几天时间才能获得管理员批准加入 - 跛脚。

无论如何,提前谢谢!如有任何问题或需要澄清,请向我询问。

2 个答案:

答案 0 :(得分:1)

看来这些功能在1.5.1中已弃用。我可以在1.5.0中找到它们,但在1.5.1和1.5.2中都没有。我想你必须使用console_print_ex或console_print_rect_ex。 否则你可能会切换回1.5.0。

答案 1 :(得分:1)

TCOD 1.5.1 renamed some functions,这就是你的两个列表崩溃的原因。

版本1.5.1将console_set_foreground_color重命名为console_set_default_foreground,将console_set_background_color重命名为console_set_default_background,将console_set_foreconsole_set_back重命名为console_set_char_foreground,分别为console_set_char_backgroundconsole_wait_for_keypress已替换为sys_wait_for_event

此外,console_print_left已被console_print_ex取代,后者在背景和要打印的字符串之间有一个额外的'alignment'参数。