Evaluando propuestas

Game Damas inglesas en C

Publicado el 03 Noviembre, 2015 en Programación y Tecnología

Sobre este proyecto

Abierto

Crear Damas inglesas en C
Indicaciones:
Imprimir el tablero con fichas al iniciar el juego y después de cada movimiento.

Indicar el turno del jugador

Pedir coordenadas de la ficha a mover, si la ficha no existe en esa coordenada o la coordenada es incorrecta, indicar el error y volver a pedir.

Pedir coordenadas de la nueva posición de la ficha, si la coordenada es incorrecta o esta ocupada, indicar el error y volver a pedir.

Un jugador no puede mover fichas que no sean de su color.

Si el jugador debe comer, no se debe permitir otro movimiento que no sea el comer la ficha. Solo puede comer una ficha por turno.

Las fichas de tipo normal solo avanzan una posición en diagonal hacia adelante.

Las fichas de tipo reyna puede avanzar las posiciones que desee en diagonal hacia adelante o hacia atras, siempre y cuando no haya una ficha en su trayectoria que pueda comer.

Por cada movimiento de ficha que se realize se deberá verificar si existe un ganador y terminar el juego.


#Include <stdio.h>
#include <stdlib.h>


struct ficha
{
    char color;
    int tipo;
    int visible;
};
struct tablero
{
    struct ficha t[8][8];
    char turno;
};

void iniciaTablero(struct tablero * tab);
void imprimeTablero(struct tablero tab);
int checaTablero(struct tablero tab);
int mueveFicha(int ro,int co,int dir, struct tablero *tab);

int main()
{
    int ro,co,dir,b,band,c=0;
    struct tablero tab;
    iniciaTablero(&tab);
  // imprimeTablero(tab);

    tab.turno='B';
    do
    {
     
        imprimeTablero(tab);
        printf("\nturno es: %c",tab.turno);
        printf("\nficha x: ");
        scanf("%d",&co);
        printf("\nficha y: ");
        scanf("%d",&ro);
        printf("mover hacia (izq=0/der=1): ");
        scanf("%d",&dir);

        c=mueveFicha(ro,co,dir,&tab);
         if((c%2)==0&&c!=0)
          {
              tab.turno='B';
          }
          else
          if(c!=0)
          {
              tab.turno='N';
          }
              
      // imprimeTablero(tab);
    //  printf("***********%d",c);
      /*if(c!=0)
      {
           if(c==1)
            {
                tab.turno='N';
                printf("\nturno es: %c",tab.turno);
            }
            else
          // if(c==2)
            {
                tab.turno=='B';
                printf("\nturno es: %c",tab.turno);
            }
      }*/
     
         
       
        b=checaTablero(tab);
       
    }while(b==0);
    return (0);
}

void iniciaTablero(struct tablero *tab)
{
    int i,j;
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
        {
        tab->t[i][j].visible=0;
        tab->t[i][j].tipo=0;
        tab->t[i][j].color='_';
        }
    }
    for(i=0;i<3;i++)
    {
        for(j=0;j<8;j++)
        {
            if((i%2)==0&&(j%2)==0)
            {
            tab->t[i][j].visible=1;
            tab->t[i][j].tipo=1;
            tab->t[i][j].color='N';
            }
            else
                if((i%2)!=0&&(j%2)!=0)
                {
                tab->t[i][j].visible=1;
                tab->t[i][j].tipo=1;
                tab->t[i][j].color='N';
                }
        }
    }
    for(i=7;i>4;i--)
    {
        for(j=0;j<8;j++)
        {
            if((i%2)==0&&(j%2)==0)
            {
            tab->t[i][j].visible=1;
            tab->t[i][j].tipo=1;
            tab->t[i][j].color='B';
            }
            else
                if((i%2)!=0&&(j%2)!=0)
                {
                tab->t[i][j].visible=1;
                tab->t[i][j].tipo=1;
                tab->t[i][j].color='B';
                }
        }
    }
    return;
}
void imprimeTablero(struct tablero tab)
{
    int i, j, k;
    for(i=0;i<8;i++)
    {
        if (i==0)
          {
              printf("  ");
            for(k=0;k<8;k++)
            {
                printf("%d",k);
            }
        }
        printf("\n");
        printf("%d ",i);
        for(j=0;j<8;j++)
        {
            if(tab.t[i][j].visible==1)
            {
                printf("%c",tab.t[i][j].color);
            }
            else
            {
                printf(" ");
            }
        }
    }
}
int checaTablero(struct tablero tab)
{
    int i,j,c,b=0;

    for(i=0,c=0;i<8;i++)
    {
        for(j=0;j<8;j++)
        {
            if(tab.t[i][j].visible==1&&tab.t[i][j].color=='N')
            {
                c++;
            }
        }
    }
    if(c==0)
    {

        b=1;
        printf("El ganador es Blanco\n");
    }
    else{
        for(i=0,c=0;i<8;i++)
          {
        for(j=0;j<8;j++)
        {
            if(tab.t[i][j].visible==1&&tab.t[i][j].color=='B')
            {
                c++;
            }
        }
        }
        if(c==0)
        {

        b=1;
        printf("El ganador es Negro\n");
          }
    }
    return b;
}
int mueveFicha(int ro,int co,int dir, struct tablero *tab)
{
    int b=0;
    char c=tab->turno;
    if(tab->t[ro][co].color==tab->turno)
    {
    if(dir==0&&tab->turno=='B')
    {
        if(tab->t[ro-1][co-1].tipo==0)
        {
            tab->t[ro-1][co-1].tipo=1;
            tab->t[ro-1][co-1].color='B';
            tab->t[ro-1][co-1].visible=1;
            tab->t[ro][co].tipo=0;
            tab->t[ro][co].color='_';
            tab->t[ro][co].visible=0;
            b++;
        }
        else
            if(tab->t[ro-1][co-1].color!=tab->turno)
        {
            tab->t[ro-2][co-2].tipo=1;
            tab->t[ro-2][co-2].color='B';
            tab->t[ro-2][co-2].visible=1;
            tab->t[ro-1][co-1].tipo=0;
            tab->t[ro-1][co-1].color='_';
            tab->t[ro-1][co-1].visible=0;
            tab->t[ro][co].tipo=0;
            tab->t[ro][co].color='_';
            tab->t[ro][co].visible=0;
            b++;
        }
    }
    else
        if(dir==1&&tab->turno=='B')
    {
        if(tab->t[ro-1][co+1].tipo==0)
        {
            tab->t[ro-1][co+1].tipo=1;
            tab->t[ro-1][co+1].color='B';
            tab->t[ro-1][co+1].visible=1;
            tab->t[ro][co].tipo=0;
            tab->t[ro][co].color='_';
            tab->t[ro][co].visible=0;
       
          b++;
        }
        else
            if(tab->t[ro-1][co+1].color!=tab->turno)
        {
            tab->t[ro-2][co+2].tipo=1;
            tab->t[ro-2][co+2].color='B';
            tab->t[ro-2][co+2].visible=1;
            tab->t[ro-1][co+1].tipo=0;
            tab->t[ro-1][co+1].color='_';
            tab->t[ro-1][co+1].visible=0;
            tab->t[ro][co].tipo=0;
            tab->t[ro][co].color='_';
            tab->t[ro][co].visible=0;
            b++;
        
        }


}

    if(dir==0&&tab->turno=='N')
    {
        if(tab->t[ro+1][co-1].tipo==0)
        {
            tab->t[ro+1][co-1].tipo=1;
            tab->t[ro+1][co-1].color='N';
            tab->t[ro+1][co-1].visible=1;
            tab->t[ro][co].tipo=0;
            tab->t[ro][co].color='_';
            tab->t[ro][co].visible=0;
            b=b+2;
        
        }
        else
            if(tab->t[ro+1][co-1].color!=tab->turno)
        {
            tab->t[ro+2][co-2].tipo=1;
            tab->t[ro+2][co-2].color='N';
            tab->t[ro+2][co-2].visible=1;
            tab->t[ro+1][co-1].tipo=0;
            tab->t[ro+1][co-1].color='_';
            tab->t[ro+1][co-1].visible=0;
            tab->t[ro][co].tipo=0;
            tab->t[ro][co].color='_';
            tab->t[ro][co].visible=0;
            b=b+2;
           
        }
    }
    else
        if(dir==1&&tab->turno=='N')
    {
        if(tab->t[ro+1][co+1].tipo==0)
        {
            tab->t[ro+1][co+1].tipo=1;
            tab->t[ro+1][co+1].color='N';
            tab->t[ro+1][co+1].visible=1;
            tab->t[ro][co].tipo=0;
            tab->t[ro][co].color='_';
            tab->t[ro][co].visible=0;
         
            b=b+2;
        }
        else
            if(tab->t[ro+1][co+1].color!=tab->turno)
        {
            tab->t[ro+2][co+2].tipo=1;
            tab->t[ro+2][co+2].color='N';
            tab->t[ro+2][co+2].visible=1;
            tab->t[ro+1][co+1].tipo=0;
            tab->t[ro+1][co+1].color='_';
            tab->t[ro+1][co+1].visible=0;
            tab->t[ro][co].tipo=0;
            tab->t[ro][co].color='_';
            tab->t[ro][co].visible=0;
            b=b+2;
       
        }
}
}
else
b=0;

return b;
}

Categoría Programación y Tecnología
Subcategoría Aplicaciones de escritorio
¿Es un proyecto o una posición? Un proyecto
Actualmente tengo Tengo las especificaciones
Disponibilidad requerida Según se necesite
Experiencia en este tipo de proyectos No (No he administrado este tipo de proyectos anteriormente)
Integraciones de API Otros (Otras APIs)
Plataformas requeridas Windows

Plazo de Entrega: 04 Noviembre, 2015

Habilidades necesarias

Otros proyectos publicados por A. H.