如何解决如何将pygame中的图像转换为numpy数组或数字?
我想知道如何将 pygame 中的图像转换为数字。我正在用python制作国际象棋游戏。我已经做好了一切。我首先用字符串制作了棋盘:
[
["bR","bN","bB","bQ","bK","bR"],["bp","bp","bp"],["--","--","--"],["wp","wp","wp"],["wR","wN","wB","wQ","wK","wR"]]
我在开始阶段就这样做了。我现在正在研究一种可以快速计算的国际象棋 AI,但是如果棋盘和图像采用数字形式或 numpy 数组;这将有助于图像的计算速度提高 2 到 3 倍。
这是我加载图像的方式:
IMAGES = {}
def loadImages():
pieces = ['wp','wR','wN','wB','wK','wQ','bp','bR','bN','bB','bK','bQ']
for piece in pieces:
IMAGES[piece] = p.transform.scale(p.image.load("images/" + piece + ".png"),(SQ_SIZE,SQ_SIZE))
# Note we can access an image by saying "IMAGES['wp']'
我将图像作为字典加载,这样它们就不会占用更多的 cpu,而且更酷。正如您所看到的,图像加载时带有它们的文件名,它是一个字符串。
上面的棋盘也都串起来了。我正在制作的国际象棋游戏的一点是,棋子的任何移动都不需要弦板,它只是棋盘的表示,因此我可以将其显示在屏幕上。所以如果我可以改变这个板,我所要做的就是改变图像的名称以在代码中匹配它们。例如:黑车(现在:'bR')可以更改为 01(黑色),而车可能是 012 或其他。但我一般不知道如何在 NumPy 或 python 中执行此操作。
我希望人们帮助我。我可以提供更多代码或您需要了解的更多见解。就告诉我嘛。我真的很感激。
解决方法
一种简单的方法是将 numpy.unique
与 return_inverse
选项一起使用:
找出数组的唯一元素。
return_inverse
bool,可选:如果为 True,还返回唯一数组的索引
示例:
import numpy
board = [
["bR","bN","bB","bQ","bK","bR"],["bp","bp","bp"],["--","--","--"],["wp","wp","wp"],["wR","wN","wB","wQ","wK","wR"]
]
values,indices = numpy.unique(board,return_inverse=True)
indices = indices.reshape((8,8))
print(values,'\n')
print(indices)
输出:
['--' 'bB' 'bK' 'bN' 'bQ' 'bR' 'bp' 'wB' 'wK' 'wN' 'wQ' 'wR' 'wp']
[[ 5 3 1 4 2 1 3 5]
[ 6 6 6 6 6 6 6 6]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[12 12 12 12 12 12 12 12]
[11 9 7 10 8 7 9 11]]
请注意,值按字母顺序排序。因此,无论棋子如何排列在棋盘上,每颗棋子总是得到相同的索引,因为棋盘上至少有一个棋子。
如果你想定义值,你可以使用字典:
lookup = {
"--": 0,"wK": 1,"wQ": 2,"wR": 3,"wB": 4,"wN": 5,"wp": 6,"bK": 7,"bQ": 8,"bR": 9,"bB": 10,"bN": 11,"bp": 12
}
indices = numpy.array([[lookup[p] for p in row] for row in board])
print(indices)
输出:
[[ 9 11 10 8 7 10 11 9]
[12 12 12 12 12 12 12 12]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0 0]
[ 6 6 6 6 6 6 6 6]
[ 3 5 4 2 1 4 5 3]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。