Esta é uma técnica para codificar todas as direções como matrizes - cada par de di[i],dj[i]
está em uma direção diferente.
Se imaginarmos que temos uma peça em um local x, y, e quisermos somar seus valores x e y para movê-la para um local próximo, 1,0 é leste, -1,0 é oeste, 0,1 é sul, 0, -1 é norte e assim por diante.
(Aqui, eu disse que o canto superior esquerdo é 0,0 e o canto inferior direito 4,4 e mostrei qual movimento cada índice das matrizes fará a partir do ponto central, X, em 2,2.)
.....
.536.
.1X0.
.724.
.....
Da forma como está configurado, se você fizer ^1
( ^
sendo XOR bit a bit) no índice, obterá a direção oposta - 0 e 1 são opostos, 2 e 3 são opostos e assim por diante. (Outra forma de configurá-lo é ir no sentido horário, começando no norte - então, ^4
leva você na direção oposta.)
Agora você pode testar todas as direções a partir de um determinado ponto fazendo um loop sobre seus arrays di
e dj
, em vez de precisar escrever cada direção em sua própria linha (para oito no total!) (Só não se esqueça de verificar os limites :))
diK
e djK
formar todas as direções dos cavaleiros em vez de todas as direções adjacentes. Aqui, ^1
vai virar ao longo de um eixo, ^4
vai dar o salto do cavalo oposto.
.7.6.
0...5
..K..
1...4
.2.3.
d={0,1,0,-1,0}
para isso: pares de itens parad[i], d[i+1]
me dar quatro direções cardeais.