所以我正在为视频游戏开发一种自定义平铺方法。我将本地图块类型的数据存储为列表,其中 True 表示相同类型,False 表示不同类型,图块的布局如下:
| 7 | 0 | 1 |
-------------
| 6 | | 2 |
-------------
| 5 | 4 | 3 |
现在有一些(确切地说是 48 个)不同的图块表示形式,但是当我将布尔列表转换为二进制时,我得到了 (0,255) 中的数字。显然列表中存在重复项,因此以下是删除这些重复项的方法。偶数是基本方向,它们总是代表自己,但是奇数只有在两个相邻的基本方向都被占用时才应该填充(真)。
| T | T | F |
-------------
| F | | T |
-------------
| T | F | T |
output should be => [T,F,T,X,F,X,F,X] => 10100000 => 160
X 可以是任何东西,我可能会选择 0。
所以这就是我尝试过的:
#inputs
i,j = 1,1
pixels = [[True,False,True],[True,True,False],[False,True,True]]
#inside a function
binary_list = []
for x in [1,-1]:
binary_list.append(pixels[i+0][i-x])
for y in [-x,0,x]:
binary_list.append(pixels[i+x][i+y]
binary_list.append(binary_list[-1])
str_bits = ""
for i in range(8):
if not i % 2:
str_bits = str_bits + str(int(binary_list[i]))
elif binary_list[i-1] and binary_list[i+1]:
str_bits = str_bits + str(int(binary_list[i]))
else:
str_bits = str_bits + "0"
#return value just return the int but for visibility now...
print(str_bits, int(str_bits, base=2))
所以实际上,我将使用 type_check 而不是像素列表引用,是的,它可以工作,但我怎样才能做得更好/更Python化?
当您使用数字时,最好使用整数,而不是构建字符串并在最后进行转换。简单的位移位与将数字附加到字符串具有相同的作用。
bin_bits = 0
for i in range(8):
bin_bits <<= 1
if not i % 2:
bin_bits += binary_list[i]
elif binary_list[i-1] and binary_list[i+1]:
bin_bits += binary_list[i]
else:
pass # no need to append zeros