Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Ayuda: tablero y piezas de ajedrez en c++ builder (https://www.clubdelphi.com/foros/showthread.php?t=60540)

luisfco 05-10-2008 17:21:30

Ayuda: tablero y piezas de ajedrez en c++ builder
 
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

Cita:

Empezado por coso (Mensaje 318293)
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

Ñ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

Cita:

No se si seria mucho pedir

me gustaria que me programaras la base



Cita:

quiero programar ajedrez en c++ builder


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

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

Código:

char Tablero[8][8];
;

por ejemplo para poner las fichas iniciales...

Código:

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 [Germán.Estévez] 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 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, 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 [Germán.Estévez] 26-10-2008 12:18:39

Cita:

Empezado por luisfco (Mensaje 322202)
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

Código:


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
Código:

//[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...


La franja horaria es GMT +2. Ahora son las 12:42:57.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi