2013-02-21 2 views
1

저는 Python에서 libtcod를 사용하여 roguelike를 작성하고 있습니다. 객체 지향으로 전환하기 전에 운동이 잘 작동했습니다. 파이썬 게임을 실행하면 플레이어가 움직이려고하자마자 멈 춥니 다.재생할 때 파이썬 프로그램이 응답하지 않음

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 

그것은 while 루프와 운동을 함께 할 수있는 뭔가가있을 ... 우 내가

답변

1

어쩌면 대신

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

원하는 몰라 : 여기 내 코드입니다

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

그렇지 않으면 플레이어의 위치를 ​​예를 들어 KEY_LEFT을 누르면(화면 외부). 어쩌면 그것이 얼어 있다고 생각하는 이유 일 수 있습니다.

그 외에도 코드가 잘 작동합니다.

+0

나는 지체되었다. 고맙습니다. Libtcod에 대해 잘 알고 있습니까? 나는 어떤 색깔도 사용할 수 없다. –

+0

몇 년 전 파이썬에서 Libtcod를 사용했는데 ... – sloth

+0

왜 색상이 전혀 작동하지 않는지 아십니까? –