2

テキストアドベンチャーを作成しています。これに静的テキストを追加するにはどうすればよいですか。つまり、常にウィンドウの左側にあるテキストです。他のすべてのテキストが下にスクロールしている場合でも。また、このテキストを赤くするにはどうすればよいですか。

4

2 に答える 2

4

以下は、静的テキストを赤色で表示する例です (常に上部に表示されます)。

import sys
import curses


curses.initscr()

if not curses.has_colors():
    curses.endwin()
    print "no colors"
    sys.exit()
else:
    curses.start_color()

curses.noecho()    # don't echo the keys on the screen
curses.cbreak()    # don't wait enter for input
curses.curs_set(0) # don't show cursor.

RED_TEXT = 1
curses.init_pair(RED_TEXT, curses.COLOR_RED, curses.COLOR_BLACK)

window = curses.newwin(20, 20, 0, 0)
window.box()
staticwin = curses.newwin(5, 10, 1, 1)
staticwin.box()

staticwin.addstr(1, 1, "test", curses.color_pair(RED_TEXT))

cur_x = 10
cur_y = 10
while True:
    window.addch(cur_y, cur_x, '@')
    window.refresh()
    staticwin.box()
    staticwin.refresh()
    inchar = window.getch()
    window.addch(cur_y, cur_x, ' ')
    # W,A,S,D used to move around the @
    if inchar == ord('w'):
        cur_y -= 1
    elif inchar == ord('a'):
        cur_x -= 1
    elif inchar == ord('d'):
        cur_x += 1
    elif inchar == ord('s'):
        cur_y += 1
    elif inchar == ord('q'):
        break
curses.endwin()

結果のスクリーンショット:

ここに画像の説明を入力

refresh()のウィンドウは最後に編集する必要があることに注意してください。そうしないと、下にあるウィンドウがそれらの上に描画されます。

静的テキストを変更する場合は、次のようにします。

staticwin.clear()   #clean the window
staticwin.addstr(1, 1, "insert-text-here", curses.color_pair(RED_TEXT))
staticwin.box()     #re-draw the box
staticwin.refresh()

2行目の2文字目1, 1から書き始めることを意味します (覚えておいてください: 座標は から始まります)。これは、ウィンドウのボックスが最初の行と最初の列に描画されるために必要です。0

于 2013-06-15T10:18:15.993 に答える
0

別のウィンドウに配置して、静的テキストを作成します。すべてのテキストに十分な大きさのウィンドウを作成してから、動的テキスト用に小さいウィンドウを作成します。COLOR_*テキストは、テキスト属性としてさまざまな定数を渡すことによって色付けされます。

于 2013-06-15T09:51:21.453 に答える