2013-02-21 2 views
1

Я пишу roguelike в python с libtcod. движение работало нормально, прежде чем я переключился на объектную ориентацию. Когда я запускаю свою игру python, она появляется, но как только я пытаюсь переместить плеер, он замерзает. Вот мой код:Программа Python не отвечает при перемещении игры

import libtcodpy as libtcod; 

SCREEN_WIDTH = 80; 
SCREEN_HEIGHT = 50; 
LIMIT_FPS = 20; 

class Object: 
    def __init__(self, x, y, char, color): 
     self.x = x 
     self.y = y 
     self.char = char 
     self.color = color 

    def move(self, dx, dy): 
     self.x = dx 
     self.y = dy 

    def draw(self): 
     #libtcod.console_set_default_foreground(con, self.color) 
     libtcod.console_put_char(con, self.x, self.y, self.char, libtcod.BKGND_NONE) 

    def clear(self): 
     libtcod.console_put_char(con, self.x, self.y, ' ', libtcod.BKGND_NONE) 

def handle_keys(): 
    key = libtcod.console_check_for_keypress() 
    if key.vk == libtcod.KEY_ENTER and key.lalt: 
     libtcod.console_set_fullscreen(not libtcod.console_is_fullscreen()) 

    elif key.vk == libtcod.KEY_ESCAPE: 
     return True #exit game 

    if libtcod.console_is_key_pressed(libtcod.KEY_UP): 
     player.move(0, -1) 

    elif libtcod.console_is_key_pressed(libtcod.KEY_DOWN): 
     player.move(0, 1) 

    elif libtcod.console_is_key_pressed(libtcod.KEY_LEFT): 
     player.move(-1, 0) 

    elif libtcod.console_is_key_pressed(libtcod.KEY_RIGHT): 
     player.move(1, 0) 

libtcod.console_set_custom_font('arial10x10.png', libtcod.FONT_TYPE_GREYSCALE | libtcod.FONT_LAYOUT_TCOD); 
libtcod.console_init_root(SCREEN_WIDTH, SCREEN_HEIGHT, 'Lets Crawl', False); 
libtcod.sys_set_fps(LIMIT_FPS); 
con = libtcod.console_new(SCREEN_WIDTH, SCREEN_HEIGHT) 

player = Object(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, '@', libtcod.white) 
#npc = Object(SCREEN_WIDTH/2 - 5, SCREEN_HEIGHT/2, '@', libtcod.yellow) 
objects = [player] 

while not libtcod.console_is_window_closed(): 

    for object in objects: 
     object.draw() 


    #libtcod.console_check_for_keypress() 
    libtcod.console_blit(con, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, 0, 0) 
    libtcod.console_flush(); 

    for object in objects: 
     object.clear() 

    exit = handle_keys() 
    if exit: 
     break 

Это может иметь что-то делать с временем цикла и движением ... тьфу я не знаю

ответ

1

Может быть, вместо

def move(self, dx, dy): 
    self.x = dx 
    self.y = dy 

вы хотите

def move(self, dx, dy): 
    self.x += dx 
    self.y += dy 

в противном случае, вы просто установить позицию игрока в (-1, 0) (вне экрана), если вы нажмете, например, KEY_LEFT. Может быть, поэтому вы думаете, что он заморожен.

Кроме того, ваш код работает нормально для меня.

+0

Ух, я отставлен. Спасибо. Вы знакомы с Libtcod? Я не могу использовать какие-либо цвета. –

+0

Несколько лет назад я сделал несколько файлов Libtcod в python ... – sloth

+0

Знаете ли вы, почему цвета не работают вообще? все белое, даже когда я устанавливаю его на другой цвет. –

Смежные вопросы