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…