I would approach the game this way:

1) The layout of the game: I see the layout as rows of squares built into a triangle like this

|(0,0)|

|(1,0)||(1,1)|

|(2,0)||(2,1)||(2,2)|

|(3,0)||(3,1)||(3,2)||(3,3)|

|(4,0)||(4,1)||(4,2)||(4,3)||(4,4)|

with each square has a unique coord(i,j).

With this layout, a JUMP iS VALID if and only if one of these statements is true:

let say a jump from (i,j) --> (i',j') is valid iff

1) i' = i+2 && j' = j && notEmpty(i+1,j)

2) i' = i+2 && j' = j+2 && notEmpty(i+1,j+1)

3) i' = i+2 && j' = j-2 && notEmpty(i,j-1)

4) i' = i && j' = j+2 && notEmpty(i,j+1)

5) i' = i-2 && j' = j && notEmpty(i-1,j)

6) i' = i-2 && j' = j-2 && notEmpty(i-1,j-1)

....

1) The layout of the game: I see the layout as rows of squares built into a triangle like this

|(0,0)|

|(1,0)||(1,1)|

|(2,0)||(2,1)||(2,2)|

|(3,0)||(3,1)||(3,2)||(3,3

|(4,0)||(4,1)||(4,2)||(4,3

with each square has a unique coord(i,j).

With this layout, a JUMP iS VALID if and only if one of these statements is true:

let say a jump from (i,j) --> (i',j') is valid iff

1) i' = i+2 && j' = j && notEmpty(i+1,j)

2) i' = i+2 && j' = j+2 && notEmpty(i+1,j+1)

3) i' = i+2 && j' = j-2 && notEmpty(i,j-1)

4) i' = i && j' = j+2 && notEmpty(i,j+1)

5) i' = i-2 && j' = j && notEmpty(i-1,j)

6) i' = i-2 && j' = j-2 && notEmpty(i-1,j-1)

....