[Delphi] Problema em jogo de damas

Se alguem puder me ajudar…
Estou falhando em um detalhe, alguem veja isso pra min…

O código é esse:

/*
 * Main.fx
 *
 * Created on 02/07/2011, 19:29:52
 */

package testardamas;

import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.paint.*;
import javafx.scene.effect.*;
import javafx.scene.effect.light.*;
import javafx.scene.shape.*;
import javafx.scene.input.*;
import javafx.ext.swing.*;
import javafx.animation.*;
import java.lang.*;
import java.util.*;

def SIZE = 90;  //tamanho de uma casa
def SIZE2 = SIZE/2; //metade de uma casa
def SIZEP = 36; //raio de uma peca

def DEBUG = true;

class Peca extends CustomNode{
	var x: Number;
	var y: Number;
	var i: Integer;
	var j: Integer;
	var jogador: Integer;
	var jogo: Jogo;
	var dama: Boolean = false;
	init{
		updateXY();
		jogo.tabuleiro.put( IJtoIndex(i,j) , this);
	}
	public function podeComer():Boolean{

		if(i+2 <= 7 and j+2 == 0 and j+2 == 0 and j-2 >= 0){
			if(jogo.tabuleiro.containsKey(IJtoIndex(i-1,j-1))){
				var peca: Peca = jogo.tabuleiro.get(IJtoIndex(i-1,j-1)) as Peca;
				if(peca.jogador != this.jogador){
					if(not jogo.tabuleiro.containsKey(IJtoIndex(i-2,j-2))){
						return true;
					}
				}
			}
		}

		if(i+2 == 0){
			if(jogo.tabuleiro.containsKey(IJtoIndex(i+1,j-1))){
				var peca: Peca = jogo.tabuleiro.get(IJtoIndex(i+1,j-1)) as Peca;
				if(peca.jogador != this.jogador){
					if(not jogo.tabuleiro.containsKey(IJtoIndex(i+2,j-2))){
						return true;
					}
				}
			}
		}

		return false;
	}
	public function IJtoIndex(i: Integer, j: Integer):Integer{
		return j*8 + i;
	}
	public function toIJ(valor: Number):Integer{
		return Math.round((valor - SIZE2) / SIZE).intValue();
	}
	public function toXY(valor: Integer):Number{
		return valor * SIZE + SIZE2;
	}
	public function updateXY():Void{
		x = toXY(i);
		y = toXY(j);
	}
	public function updateIJ():Void{
		jogo.tabuleiro.remove(IJtoIndex(i,j));
		i = toIJ(x);
		j = toIJ(y);
		jogo.tabuleiro.put(IJtoIndex(i,j), this);

		if((jogador == 1 and j == 7) or (jogador == 2 and j == 0)){
			dama = true;
		}
	}
	public function comer():Void{
		jogo.tabuleiro.remove(IJtoIndex(i,j));
		this.visible = false;
	}
	override function create():Node{
		return Circle{
			centerX: bind x centerY: bind y radius: SIZEP
			opacity: bind if(jogo.jogador == jogador) 1.0 else 0.5

			fill: bind RadialGradient{
				centerX: 0.5 centerY: 0.5
				focusX: 0.3 focusY: 0.3
				radius: 0.5
				proportional: true
				stops:[
					Stop{
						offset: 0.0
						color: if(jogador == 1)Color.color(1,0.8,0.8)else Color.LIGHTBLUE
					}
					Stop{
						offset: 0.4
						color: if(jogador == 1)Color.VIOLET else Color.GREEN
					}
					Stop{
						offset: 0.8
						color: if(jogador == 1)Color.DARKVIOLET else Color.DARKGREEN
					}
					Stop{
						offset: 1.0
						color: if(dama)Color.YELLOW else Color.BLACK
					}
				]
			}

			effect: DropShadow{
				offsetX: 1 offsetY: 1
				radius:3
				spread: 0.1
			}

			//1 movendo
			onMouseDragged: function(e: MouseEvent):Void{
				if(this.jogador != jogo.jogador){
					return;
				}
				x = e.sceneX;
				y = e.sceneY;
			}
			//2 movendo e soltando no lugar correto
			onMouseReleased: function(e: MouseEvent):Void{
				if(this.jogador != jogo.jogador){
					return;
				}

				x = e.sceneX;
				y = e.sceneY;

				var ii = toIJ(x);
				var jj = toIJ(y);

				var dx = Math.abs(ii-i);
				var dy = Math.abs(jj-j);

				var index = IJtoIndex(ii,jj);




 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////








 if( (dx > 0 or dy > 0) and dx == dy ){//se moveu (e na diagonal)
	if(DEBUG)println("moveu");
	if( (ii >= 0 and jj > j) or(jogador == 2 and ii > 0 and jj<j)){// andou pra frente
		if(DEBUG)println("andou pra frente");
                  updateIJ();
                  updateXY();
                  println(i);
                  println(j);
                  jogo.mudarJogador();
		}else{//andou pra traz
                     if(DEBUG)println("andou pra traz");
                     updateXY();
		}
                   if(dx>1){//mais que uma casa
                        if(DEBUG)println("mais que 1 casa");

                        if(dx == 2){//2 casas
                                if(DEBUG)println("2 casas");

                                var i_med = (ii+i)/2;
                                var j_med = (jj+j)/2;
                                var index_med = IJtoIndex(i_med,j_med);

                                if(jogo.tabuleiro.containsKey(index_med)){//pulou peça
                                        if(DEBUG)println("pulou peça");

                                        var peca: Peca = jogo.tabuleiro.get(index_med) as Peca;

                                        if(peca.jogador != this.jogador){//outro jogador
                                                if(DEBUG)println("pulou peça de outro jogador");

                                                peca.comer();

                                                updateIJ();
                                                updateXY();

                                                if(not podeComer()){
                                                   jogo.mudarJogador();
                                                }

                                        }else{
                                                if(DEBUG)println("pulou peça do mesmo jogador");
                                                updateXY();
                                        }
                                }else{//nao pulou peça
                                        if(DEBUG)println("nao pulou peça");

                                        updateXY();
                                }
                        }else{
                                if(DEBUG)println("mais que 2 casas");
                                updateXY();
                        }
                }
        }

else{//se nao moveu ou nao foi na diagonal
    if(DEBUG)println("nao moveu");
	updateXY();
}

if(dx>4){//fora do tabuleiro
    if(DEBUG)println("fora do tabuleiro");
    updateXY();
    }







  /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////







                                
				

			
			}
			//3 movendo pra frente
			onMousePressed: function(e: MouseEvent):Void{
				toFront();
			}
		}
	}
}

class Jogo{
	var tabuleiro: Hashtable = new Hashtable();
	var jogador = 2;//azul
	var pecas: Peca[];
	init{
		pecas = for(i in [0..4])
			for(j in [0..1])[
				Peca{
					i: if((j mod 2) == 0) i*2 else i*2+1
					j: j
					jogador: 1
					jogo: this
				}
				Peca{
					i: 9 - (if((j mod 2) == 0) i*2+1 else i*2)
					j: j + 6
					jogador: 2
					jogo: this
				}
			];
	}
	public function mudarJogador():Void{
		if(jogador == 1){
			jogador = 2;
		}else{
			jogador = 1;
		}
                println(jogador);
	}
	public function reset():Void{
		tabuleiro.clear();
		var index = 0;
		for(i in [0..4]){
			for(j in [0..1]){
				var peca: Peca = pecas[index++];
				peca.i = if((j mod 2) == 0) i*2 else i*2+1;
				peca.j = j;
				peca.updateXY();
				peca.visible = true;
				peca.dama = false;
				tabuleiro.put(peca.IJtoIndex(peca.i,peca.j), peca);

				peca = pecas[index++];
				peca.i = 9 - (if((j mod 2) == 0) i*2 else i*2+1);
				peca.j = j + 5;
				peca.updateXY();
				peca.visible = true;
				peca.dama = false;
				tabuleiro.put(peca.IJtoIndex(peca.i,peca.j), peca);
			}
		}
	}
}

var jogo: Jogo = Jogo{};

Stage{
	title: "Damas"
	scene: Scene{
		width: SIZE*10
		height: SIZE*8
		fill: Color.WHITE
		content: [
			Group{
				content: for(i in [0..4])
					for(j in [0..3])[
						Rectangle{
							x: i*2*SIZE y: j*2*SIZE
							width: SIZE height: SIZE
							fill: Color.GRAY
						}
						Rectangle{
							x: i*2*SIZE+SIZE y: j*2*SIZE+SIZE
							width: SIZE height: SIZE
							fill: Color.GRAY
						}
					]
				onKeyPressed: function(e: KeyEvent):Void{
					if(e.code == KeyCode.VK_SPACE){
						jogo.reset();
					}
				}
			}
			jogo.pecas
		]
	}
}

É um jogo de Damas, as peças estão comendo ao contrario, eu só nao consigo fazer akele primeiro “if” lá do motor.
E as verdes estao voltando, nao poderiam…
Por favor, alguem me dê uma força ai…

  1. Dê títulos descritivos ao seu tópico;
  2. Não coloque pedidos desesperados de ajuda ou socorro no fórum;
  3. Destaque a linha do seu problema com um comentário, e também descreva o erro. Lembre-se que não iremos compilar seu código fonte, nem iremos conhecer de bate e pronto tudo o que você implementou.
  4. Leia com atenção a descrição dos fóruns antes de postar. Seu código está em Delphi, então o fórum certo seria o de Outras Linguagens.