Questa è una tecnica per codificare tutte le direzioni come array: ogni coppia di di[i],dj[i]è una direzione diversa.
Se immaginiamo di avere un pezzo in una posizione x, y, e vogliamo aggiungere alla sua x e al suo valore y per spostarlo in una posizione vicina, 1,0 è est, -1,0 è ovest, 0,1 è il sud, 0, -1 è il nord e così via.
(Qui ho detto che in alto a sinistra è 0,0 e in basso a destra è 4,4 e ho mostrato quale spostamento farà ogni indice degli array dal punto centrale, X, a 2,2.)
.....
.536.
.1X0.
.724.
.....
Nel modo in cui è impostato, se lo fai ^1( ^essendo XOR bit per bit) sull'indice ottieni la direzione opposta: 0 e 1 sono opposti, 2 e 3 sono opposti e così via. (Un altro modo per impostarlo è andare in senso orario partendo da nord, quindi ^4ti porta nella direzione opposta.)
Ora puoi testare tutte le direzioni da un dato punto eseguendo il loop sugli array die dj, invece di dover scrivere ogni direzione sulla propria riga (per otto in totale!) (Non dimenticare di controllare i limiti :))
diKe djKformare tutte le direzioni dei cavalieri invece di tutte le direzioni adiacenti. Qui, ^1ruoterà lungo un asse, ^4darà il salto del cavaliere opposto.
.7.6.
0...5
..K..
1...4
.2.3.
d={0,1,0,-1,0}per questo: le coppie di oggetti perd[i], d[i+1]darmi quattro direzioni cardinali.