私はPythonで不正なゲームを作成していて、私のTile
クラスを定義しています。タイルはブロック、壁または床のいずれかにすることができます。私は(が、3つの値を持つ)を使用すると、ブール値を使用する方法に類似しPythonユーザー定義データ型
self.state = Blocked
の線に沿って何かを書くことができるようにしたいと思います。
私にこれを可能にするためにデータ型を定義する良い方法がありますか?
おかげ
私はPythonで不正なゲームを作成していて、私のTile
クラスを定義しています。タイルはブロック、壁または床のいずれかにすることができます。私は(が、3つの値を持つ)を使用すると、ブール値を使用する方法に類似しPythonユーザー定義データ型
self.state = Blocked
の線に沿って何かを書くことができるようにしたいと思います。
私にこれを可能にするためにデータ型を定義する良い方法がありますか?
おかげ
3つの定数については、私は列挙型「パターン」の開梱版使用します。それはしかしそれよりもっと複雑取得した場合
Blocked, Wall, Floor = range(3)
を、私は他のenum types in pythonを見てしまいます。
class State:
Blocked=1
Wall=2
Floor=3
some = State.Blocked
[第3の回答](http://stackoverflow.com/questions/36932/whats-the-best-way-to-implement-an-enum-in-python/1695250#1695250)の2番目のバージョンは__way__が優れていますIMO。それはこの結果と同じ結果に終わりますが、エラーが起こりにくいです。 – aaronasterling
ビットフラグを使用します。 True/Falseは4ビットまたは1バイトに4つのブーリアンを格納できる1ビットなので、簡単な言葉でブール値をバイナリ形式で保存することができます。
したがって、このようにそれをしましょう:
のPython構文:
a = 0x0
#[これはビットフラグまたはバイナリ数<class 'int'>
またはpython27 <type 'int'>
でのPythonの表現である]
バイナリ表現:
は0x0 = 000
[0はゼロです。バイナリ変数の長さは関係ありません]
0x1 = 001
[1]
0x2 = 010
[2]
を0x4 = 100
[4]ので、ここ
我々000000000001 == 001 == 01 ==ので、我々は確認することができる3つの以上の異なるブール場所を有する
が、ビット・フラグに0x1の
0x3 = 011
[3 = 2 + 1]
0x5 = 101
[5 = 4 + 1]
0x6に= 110
[6 = 4 + 2]
0x7の= 111
[7 = 4 + 2 + 1]
ほとんどの簡単な用語 私は1つの比較構文&
を意味します。これはANDを意味します。つまり、ビットフラグの '1'の場所は同じでなければなりません。 001 & 010を使用して、ビットフラグに2種類をチェックしたい場合は、単にそれらを一緒に追加して、チェックしそう同じ場所に「1」
を持っていないので、だから、実用的な観点からの0x1の&を0x2に== 0x2のは、Falseになります上記の構文で。
例:0x3&(0x1+0x2)==(0x1+0x2)
これが役立ちます。ハッピーグーグル。
Python 3でタプル(range(3))を使う必要はありません - ジェネレータへのタプル割り当てはうまく動作します(私はそれをテストしました)。 –
@Chris、ありがとう。一定。 – aaronasterling