0

libtcodpy でローグライクを書いています。それは機能しますが、このリストを実行すると: 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 関数、またはその他の機能していない関数を必要としない他のプログラムを実行できることを覚えておいてください。しかし、機能しないすべての機能に影響を与える 1 つまたは 2 つの問題があると確信しています。\

誰かがアイデアを持っている場合、私はオンラインで情報を探すのに多くの時間を費やしました. また、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 に答える