2024-05-13 23:21:33 发布
网友
我正在用Python编写一个类似rogue的游戏,并定义我的Tile类。瓷砖可以是堵墙的,也可以是地板的。我想能写点东西
Tile
self.state = Blocked
类似于如何使用布尔值(但有三个值)。
有没有一种很好的方法可以让我定义一个数据类型来实现这一点?
谢谢
对于三个常量,我将使用枚举'pattern'的解包版本:
Blocked, Wall, Floor = range(3)
如果它变得比那更复杂,我会看看其他的enum types in python。
使用位标志。 你可以在google上搜索更多的信息,用最简单的术语,你可以用二进制形式存储布尔值,因为True/False是一位,你可以用4位或1位来存储4个不同的布尔值。
所以让我们这样说:
python语法:a = 0x0[这是位标志或二进制数的python表示<class 'int'>或python27<type 'int'>]
a = 0x0
<class 'int'>
<type 'int'>
二进制表示: 0x0=000[零就是零二进制变量有多长并不重要] 0x1=001[1] 0x2=010[2] 0x4=100[4] 所以这里我们有3个或更多不同的布尔位置可以检查,因为000000000001==001==01==0x1
000
001
010
100
但位标志 0x3=011[3=2+1] 0x5=101[5=4+1] 0x6=110[6=4+2] 0x7=111[7=4+2+1]
011
101
110
111
用最简单的话来说 我将给您一个比较语法&,这意味着和,这意味着位标志中的'1'必须相同。因此,实际上0x1&0x2==0x2将为False,因为001&010在同一位置没有“1”
&
因此,如果您想检查位标志中的两种类型,只需将它们加在一起,然后使用上面的语法进行检查。 示例:0x3&(0x1+0x2)==(0x1+0x2)
0x3&(0x1+0x2)==(0x1+0x2)
我希望这能有帮助。快乐的谷歌。
class State: Blocked=1 Wall=2 Floor=3 some = State.Blocked
对于三个常量,我将使用枚举'pattern'的解包版本:
如果它变得比那更复杂,我会看看其他的enum types in python。
使用位标志。 你可以在google上搜索更多的信息,用最简单的术语,你可以用二进制形式存储布尔值,因为True/False是一位,你可以用4位或1位来存储4个不同的布尔值。
所以让我们这样说:
python语法:
a = 0x0
[这是位标志或二进制数的python表示<class 'int'>
或python27<type 'int'>
]二进制表示:
0x0=
000
[零就是零二进制变量有多长并不重要]0x1=
001
[1]0x2=
010
[2]0x4=
100
[4]所以这里我们有3个或更多不同的布尔位置可以检查,因为000000000001==001==01==0x1
但位标志
0x3=
011
[3=2+1]0x5=
101
[5=4+1]0x6=
110
[6=4+2]0x7=
111
[7=4+2+1]用最简单的话来说 我将给您一个比较语法
&
,这意味着和,这意味着位标志中的'1'必须相同。因此,实际上0x1&0x2==0x2将为False,因为001&010在同一位置没有“1”因此,如果您想检查位标志中的两种类型,只需将它们加在一起,然后使用上面的语法进行检查。
示例:
0x3&(0x1+0x2)==(0x1+0x2)
我希望这能有帮助。快乐的谷歌。
相关问题 更多 >
编程相关推荐