PDA

Ver la Versión Completa : Ayuda: tablero y piezas de ajedrez en c++ builder


luisfco
05-10-2008, 17:21:30
Soy nuevo en programacion, quiero programar ajedrez en c++ builder, ya conosco la base de builder..

Nececito saber como empezar a contruir la base para el ajedrez es decir el tablero y como poner las piezas,
Yo lo estoy armandolo con una imagen grande el tablero y piezas sobrepuestas en el.

Sin embargo no veo muy bien como hacer que las piezas se muevan con respecto a una order con sus debidas restricciones,
o como tendria que darle a orden a la imagen que se mueva, o como debo armar el tablero y la piezas, para que actue como una matriz...
alguien me puede ayudar...

PD: Si alguien sabe como hacerlo podria especificar un poco como armarlo porfas, de antemano gracias

coso
05-10-2008, 19:01:53
Hola, lo primero seria tener una matriz 8x8 y en ellas que estuvieran representadas las fichas (por ejemplo, una matriz de char y cada ficha una letra) y luego si eso representarla graficamente. Luego para los movimientos, calcular segun el tipo de letra y posicion los movimientos posibles, por ejemplo, una funcion que te devuelva un array de longitud indeterminada con las x,y donde puede ir la ficha. La verdad es que es bastante trabajo, lo mejor seria que o bien te basaras en un ejemplo o que fueses poniendo tus dudas concretas. Saludos.

luisfco
07-10-2008, 06:48:59
Hola, lo primero seria tener una matriz 8x8 y en ellas que estuvieran representadas las fichas (por ejemplo, una matriz de char y cada ficha una letra) y luego si eso representarla graficamente. Luego para los movimientos, calcular segun el tipo de letra y posicion los movimientos posibles, por ejemplo, una funcion que te devuelva un array de longitud indeterminada con las x,y donde puede ir la ficha. La verdad es que es bastante trabajo, lo mejor seria que o bien te basaras en un ejemplo o que fueses poniendo tus dudas concretas. Saludos.

Primero que nada muchas gracias por contestar..
No se si seria mucho pedir

me gustaria que me programaras la base es decir construir un tablero y una pieza que se mueva con respecto a una matriz, no importa que no tenga restricciones, como una pieza de ajedrez, solo quiero ver como hacerle que se mueva, y me lo mamdaras ami correo forfas,

creo que es mucho pedir, pero seria mas facil que explicar como declarar la variables como cordenadas de las imagenes para usarlo en una matriz y despues debolverlo como las cordenas donde se localizaria la imagen
Creo te tomarias menos de tiempo en hacerla que en explicarme xDD, ya asi yo solo tendre que interpretar lo que haz hecho...
saludos
PD: mi correo es luisfcoo@gmail.com (luisfcoo@gmail.com)

Ñuño Martínez
07-10-2008, 09:33:07
Te recomendaría el libro de Tim Hartnel "El Libro Gigante de los Juegos para Ordenador", o sus partenaires, "El Libro Gigante de los Juegos para SpectrumZX" e "Inteligencia Artificial, Conceptos y Programas", si no fuera porque son imposibles de encontrar por ninguna parte. Incluyen la descripción de decenas de juegos, incluyendo Ajedrez, Damas y juegos de rol y simulación.

Y no pongas tu dirección de correo, salvo que te guste recibir SPAM, claro.

coso
07-10-2008, 11:07:25
No se si seria mucho pedir

me gustaria que me programaras la base


quiero programar ajedrez en c++ builder


la una y la otra son excluyentes... :rolleyes:

un array en c++ (una matriz) podria ser


char Tablero[8][8];
;

por ejemplo para poner las fichas iniciales...


void Inicio;
{
// negras

Tablero[0][0] = Tablero [7][0] = "t"; // torres
Tablero[1][0] = Tablero [6][0] = "c"; // caballos
Tablero[2][0] = Tablero [5][0] = "a"; // alfiles
Tablero[4][0] = "d" // dama
Tablero[3][0] = "r" // rey

// blancas

Tablero[0][7] = Tablero [7][7] = "T"; // torres
Tablero[1][7] = Tablero [6][7] = "C"; // caballos
Tablero[2][7] = Tablero [5][7] = "A"; // alfiles
Tablero[4][7] = "D" // dama
Tablero[3][7] = "R" // rey

// peones
for (int i = 0;i<8;i++)
{
Tablero[i][1] = "p" // peon blanco
Tablero[i][6] = "P" // peon negro
}
}


etc...

lo mejor sera que sigas el consejo tambien de ñuño...echa un vistazo y busca mucha informacion de cada paso que vayas a hacer. Pon aqui, como mucho, las dudas concretas (¿Como se hace una matriz 8x8?¿Como dibujar una matriz a la pantalla?) etc...aunque como te decia al principio, lo mejor sera que te cojas un buen ejemplo (hay realmente mucho codigo abierto sobre juegos de ajedrez) y intentar entender cada paso. Saludos.

Neftali
08-10-2008, 09:53:45
Hola.
Primeramente, y viendo que eres nuevo por aquí, te daré unas recomendaciones. La primera que revises la Guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php) de los foros.

* No es necesario que escribas en negrita, la letra normal también se lee.
* Normalmente aquí no programamos a media. Eso quieres decir que te podemos ayudar, pero no solemos hacer los trabajos del resto de personas. * No contestamos por e-mail. La razón más sencilla, porque entonces la posibles respuestas no le servirán a otras personas con los mismos problemas o similares. Toda la información es buena que quede en los foros; La pregunta y las respuestas.

En cuanto a tu problema, creo que estás empezando la caso por la ventana. Personalmente creo que lo primero que deberías tener son la reglas básicas de movimientos permitidos. Y a partir de ahí generar los movimientos. Lo más sencillo en pintarlos en una matriz y mover las pieas.

Si aun así te interesa seguir por ese camino, en mi página web (http://neftali.clubdelphi.com/), en la sección de ejemplos hay uno llamado "Crear/destruir componentes (imagenes) en Runtime y moverlas con el ratón"; Puedes ver cómo crear imágenes y como moverlas por el formulario.

luisfco
24-10-2008, 23:56:36
Gracias a todos por responder.

Ya estroy trabajando con el codigo para los movimientos de las piezas casi termino, digamos los movimientos basicos,

Pero mi duda es
Habra alguna forma para que que me busque automaticamente una imagen que se encuentra en una posicion (x,y) y que le aplique condiciones determinada

Si se puede ?

Podria yo hacer algo parecido, esto es para poder mover las imagenes[piezas] esque aun no se como hacerle para poder mover las imagenes sin referirme a una especificamente

De antemano gracias y un saludo a todos

Neftali
26-10-2008, 12:18:39
Habra alguna forma para que que me busque automaticamente una imagen que se encuentra en una posicion (x,y) y que le aplique condiciones determinada

Si se puede ?


Creo que esa información deberás tenerla tú almacenada el alguna estructura. es la forma enque sabes en cada momento cómo va la partida. No acabo de enterderte muy bien.
Si te olvidas de las imágenes (eso debería ser lo último que te deberías preocupar), y pensaras en un tablero con letras, por ejemplo. En algun sitio deberás tener almacenado en cada casilla del tablero qué pieza hay. Luego ya pondrás las imágenes.

luisfco
26-10-2008, 15:40:26
Tengo ya casi todo los movimientos yo hice esto para verlo mejor



int i,j,x;
for (i=1;i<9;i=i+1) //peones
{
StringGrid1->Cells[i-1][6]=1;
StringGrid1->Cells[i-1][1]=-1;
}
//torres
StringGrid1->Cells[0][0]=-5;
StringGrid1->Cells[7][0]=-5;
StringGrid1->Cells[0][7]=5;
StringGrid1->Cells[7][7]=5;
//caballos
StringGrid1->Cells[1][7]=3;
StringGrid1->Cells[6][7]=3;
StringGrid1->Cells[1][0]=-3;
StringGrid1->Cells[6][0]=-3;
//alfiles
StringGrid1->Cells[2][0]=-4;
StringGrid1->Cells[5][0]=-4;
StringGrid1->Cells[2][7]=4;
StringGrid1->Cells[5][7]=4;
//Rey
StringGrid1->Cells[3][7]=10;
StringGrid1->Cells[3][0]=-10;
//Reyna
StringGrid1->Cells[4][7]=8;
StringGrid1->Cells[4][0]=-8;

for (i=1;i<9;i=i+1) //celdas vacias
{
for (j=1;j<9;j=j+1)
{
if(StringGrid1->Cells[i-1][j-1].IsEmpty()==true)
{
StringGrid1->Cells[i-1][j-1]=0;
}

}
}

Un ejemplo sobre el movimiento del caballo

//[col_ini][ren_ini] posicion inicial de caballo y [col_fin][ren_fin] donde se desea mover
if (StringGrid1->Cells[col_ini-1][ren_ini-1]==3)
{
if ((((col_ini-col_fin==2)&((ren_ini-ren_fin==1)|(ren_ini-ren_fin==-1)))|((col_ini-col_fin==-2)&((ren_ini-ren_fin==1)|(ren_ini-ren_fin==-1)))|((col_ini-col_fin==1)&((ren_ini-ren_fin==2)|(ren_ini-ren_fin==-2)))|((col_ini-col_fin==-1)&((ren_ini-ren_fin==2)|(ren_ini-ren_fin==-2))))&(StringGrid1->Cells[col_fin-1][ren_fin-1]<=0))
{
StringGrid1->Cells[col_ini-1][ren_ini-1]=0;
StringGrid1->Cells[col_fin-1][ren_fin-1]=3;
}
else
{
ShowMessage("Movimiento Falso");
}
}



Por esto ahora me preocupa como enlazar este movimiento a una imagen, es decir que me busque entre todos los caballo a quien deseo mover(quien esta en cordenada(x*col_ini,y*ren_ini), donde x,y seria el tamaño de la imagen si la esquina superior del tablero estaria en (0,0) de la ventana) espero y se entienda, bueno es la forma en que pienso ahora, no se si haria otra...