0

了解しました。Pythonでプロジェクトに取り組んでいます。これは私の最初のREALPythonプロジェクトです。さて、私の問題:グラフィックス。各タイルがASCIIカラーの文字である場合、単純な方法はDwarfFortressスタイルのグラフィックスになると思いました。今、私はこれを行う方法がありますが、それはあまり効率的ではないと思います。これは私のコードです:

import os
import time
import random
clear = lambda: os.system('clear')

g = '\033[32m' + '# '
t = '\033[31m' + '^ '
l = [g, g, g, g, g, g,
     g, g, g, g, g, g,
     g, g, g, g, g, g,
     g, g, g, g, g, g,
     g, g, g, g, g, g,
     g, g, g, g, g, g]

def level():
    i = 0
    while i < 1000:
        print l[0] + l[1] + l[2] + l[3] + l[4] + l[5]
        print l[6] + l[7] + l[8] + l[9] + l[10] + l[11]
        print l[12] + l[13] + l[14] + l[15] + l[16] + l[17]
        print l[18] + l[19] + l[20] + l[21] + l[22] + l[23]
        print l[24] + l[25] + l[26] + l[27] + l[28] + l[29]
        print l[30] + l[31] + l[32] + l[33] + l[34] + l[35]
        i += 1

        for b in l:
            ch = round(random.random())
            if ch:
                l[l.index(b)] = g
            else:
                l[l.index(b)] = t       
        clear()
level()

スタックオーバーフローのどこかから明確なものを取得しましたが、Windowsではclearコマンドが「clr」であり、MacとLinuxでは「clear」であることを考えると、Windowsでは機能しないはずです。Helpature?

編集-'問題は色ではなく、印刷です。基本的に、画面をクリアする必要がないように印刷するにはどうすればよいですか、印刷して変更するだけです。

4

2 に答える 2

3

私が知っている限り、この種のASCIIベースの端末グラフィックス操作は通常Cursesライブラリを使用して行われるので、試してみることをお勧めします。

ドキュメントには、「cursesライブラリは2つのデータ構造を保持しています。1つは現在の物理画面の内容を表し、仮想画面は目的の次の状態を表します。doupdate()グラウンドは、仮想画面に一致するように物理画面を更新します。」まさにあなたが望むもの。必要なものを仮想画面に描画するだけで、準備ができたら、curses.doupdate()仮想画面に一致するように物理画面を更新する関数を呼び出します。

于 2012-04-21T22:22:44.827 に答える
0

ANSIエスケープコードは、それを有効にするためのツールをインストールしない限り、Windowsでは機能しません。

あなたはPythonを使用しているので、私はここSOであなたの解決策を見つけました(Pythonを使用して色付きのターミナルで印刷する質問?

coloramaに移動します: http://pypi.python.org/pypi/colorama 。インストールするだけで(非常に簡単です)、準備が整います。

于 2012-04-21T22:19:16.403 に答える