0

我正在用 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 和variation 函数,或 print_left 函数或任何其他函数不起作用。但我敢肯定它会影响所有不起作用的功能的一两个问题。\

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

无论如何提前谢谢!问我任何问题,或者如果你需要澄清。

4

2 回答 2

1

这些功能似乎在 1.5.1 中已被弃用。我可以在 1.5.0 中找到它们,但在 1.5.1 和 1.5.2 中都找不到。我认为您必须改用 console_print_ex 或 console_print_rect_ex 。否则,您当然可以切换回 1.5.0。

于 2015-01-11T12:24:00.733 回答
1

TCOD 1.5.1重命名了一些函数,这就是你的两个列表崩溃的原因。

版本 1.5.1 分别重命名console_set_foreground_colorconsole_set_default_foregroundconsole_set_background_colorto和to and console_set_default_background,并已替换为.console_set_foreconsole_set_backconsole_set_char_foregroundconsole_set_char_backgroundconsole_wait_for_keypresssys_wait_for_event

此外,console_print_left已被替换console_print_ex,它在背景和要打印的字符串之间有一个额外的“对齐”参数。

于 2015-01-12T04:38:40.163 回答