터미널 게임 (Mac OSX, Python 2.6.5)에서 퍼즐을 얻으려고 curses
을 사용하고 있습니다. 퍼즐은 자물쇠를 여는 다이얼을 돌리는 것을 포함합니다. 다소 (추함을 변명) 간단하게 내 코드 :파이썬 : 'curses'를 두 번 호출하면 터미널이 두텁게됩니다.
import curses
dial = ["| -1 |","|-1/3 |","| 0 |","| 1/2 |","| 2/3 |","| 1 |"]
clear = " "
pointer = " ^ "
subdials = [clear,clear]
d = {'d0':{},'d1':{}}
d['d0'] = {'val':2,'disp':dial[2]}
d['d1'] = {'val':2,'disp':dial[2]}
def spin(scr):
try:
curses.curs_set(0)
except:
pass
solved = 0
p = 0
subdials[p] = pointer
dials = [d['d0']['disp'],d['d1']['disp']]
maxy,maxx = scr.getmaxyx()
newscr = scr.subwin(10,51,maxy-15,0)
newscr.box(ord('|'),ord('-'))
newscr.addstr(4,8,''.join(dials))
newscr.addstr(6,8,''.join(subdials))
newscr.refresh()
while solved == 0:
r = scr.getch()
subdials[p] = clear
currd = 'd'+str(p)
if r == ord('q') or r == ord('Q'):
break
elif r == curses.KEY_LEFT:
if p > 0 and p < 2:
p -= 1
else: pass
elif r == curses.KEY_RIGHT:
if p >= 0 and p < 1:
p += 1
else: pass
elif r == curses.KEY_UP:
if d[currd]['val'] >= 0 and d[currd]['val'] < 5:
d[currd]['val'] += 1
d[currd]['disp'] = dial[d[currd]['val']]
else: pass
elif r == curses.KEY_DOWN:
if d[currd]['val'] > 0 and d[currd]['val'] <= 5:
d[currd]['val'] -= 1
d[currd]['disp'] = dial[d[currd]['val']]
else: pass
else: pass
subdials[p] = pointer
dials = [d['d0']['disp'],d['d1']['disp']]
newscr.addstr(4,8,''.join(dials))
newscr.addstr(6,8,''.join(subdials))
newscr.refresh()
if d['d0']['val'] == 5 and d['d1']['val'] == 3:
solved = 1
if solved == 0:
scr.addstr(maxy-1,0,"You can't figure out the lock.")
else:
scr.addstr(maxy-1,0,"The lock is open!")
scr.getch()
scr.clear()
return solved
def box():
solved = curses.wrapper(spin)
return solved
'상자'기능을 종료하는 방법은 두 가지가 있습니다, 또는 퍼즐을 해결하여 종료 'Q'를 눌러이. 첫 번째로 저주에서 벗어나면 아무런 문제가 없습니다. 그러나 '상자'를 다시 호출하면 문제가 빨리 발생합니다.
먼저 curses 창에서 내 기능이 pass
으로 지시 된 키 입력이 화면에 표시됩니다. 둘째, 그리고 나빠질 때, 퍼즐을 두 번째로 끝낼 때 - 종료 또는 이기기 - noecho
및 cbreak
이 꺼지지 않으므로 터미널이 채워지고 재설정해야합니다.
(NB가 :. 내가 '상자'를 계속 전화하면, 키 입력이 더 이상 저주 창 자체에 반향되어 있지만, 내 터미널이 정상으로 돌아 가지 않습니다)
내가 할 수없는 내 인생에 대한 이 문제의 원인을 찾아냅니다. 도움!
안녕하세요. 제 콘솔에서 게임을 실행 해 보았습니다. * python curses.py *가 즉시 종료되었습니다. 너 어떻게 지내니? 둘째, cProfile 모듈로 코드를 실행하여 과도한 함수 호출이 있는지 확인할 수 있습니다. * python -m cProfile curses.py *. 이것은 무한 루프를 나타낼 수 있습니다. –
@Aaron Newton - 답변 해 주셔서 감사합니다. 파이썬 인터프리터를 실행하고, 스크립트에서 모든 것을 가져온 다음,'box' 함수를 호출합니다. 장기적으로, 그게 내가하고자하는 일이다.이 스크립트를 독립적으로 실행하는 것이 아니라 내 메인 게임 스크립트 내에서 함수를 호출한다. 이 스크립트에'box()'를 호출하는 줄을 추가하고 cProfile을 사용하여이 스크립트를 실행했습니다. 아무렇지도 않은 것으로 보이지 않았습니다. – Nrvous
삭제 해 주셔서 감사합니다. '>>> 수입 curses_prog 게임 >>> 실행 = game.box >>> 실행 <0x00000000022ABC18에서 기능 상자>로 >>> 실행() 역 추적 (가장 최근 통화 마지막에게 : 나는 다음과 같은 시도했습니다) 파일 = curses.wrapper (스핀) AttributeError 해결 상자에 파일 "curses_prog.py"라인 (78)에서 "", 라인 1 : '모듈'오브젝트가 속성이없는 'wrapper''을 (여기에 서식을 미안). 이것은 단지 무식하거나 Python을 구현 한 것일 수도 있지만 실행시킬 수는 없습니다. –