Vengo desesperadamente en busca de ayuda, tengo una entrega el dia martes y hoy vinieron a cambiarme el paradigma de como venia resolviendo el ejercicio
La idea es hacer un ajedrez en consola
Código:
#include <stdio.h>
#include <stdlib.h>
typedef enum { false, true } bool;
typedef enum {BLANCO, NEGRO, NULO} Color_t;
typedef enum {PEON, TORRE, CABALLO, ALFIL, REINA, REY} Pieza_t;
typedef struct {
Color_t color_pieza;
int piezas;
char* nombre;
}Jugador;
typedef struct{
Color_t color_pieza;
Pieza_t tipo_pieza;
}Pieza;
typedef struct {
Color_t color_casillero;
Pieza* lugar_pieza;
}Casilla;
typedef Casilla** Tablero;
//Setea los datos de una pieza
Pieza nueva_pieza(Color_t color, Pieza_t tipo){
Pieza p;
p = malloc(sizeof(Pieza));
p.color_pieza = color;
p.tipo_pieza = tipo;
printf("Pieza alocada\n");
return p;
}
//Aloca memoria para todos los casilleros piezas
Tablero inicializar_tablero(){
Tablero tablero;
return tablero=(Casilla**) calloc(8, sizeof(Casilla*));
}
//Aloca memoria para una pieza, setea sus valores, y la devuelve al puntero .lugar_pieza
void set_tablero(Tablero tablero){
int peones_blancos_fila=1, peones_negros_fila=6;
int primera_fila=0, ultima_fila=7;
int i;
for(i=0;i<8;i++){
tablero[peones_blancos_fila][i].lugar_pieza = nueva_pieza(NEGRO, PEON);
}
for(i=0;i<8;i++){
tablero[peones_negros_fila][i].lugar_pieza = nueva_pieza(BLANCO, PEON);
}
//Alloca para las negras
()tablero[primera_fila][0].lugar_pieza = nueva_pieza(NEGRO, TORRE);
tablero[primera_fila][7].lugar_pieza = nueva_pieza(NEGRO, TORRE);
tablero[primera_fila][1].lugar_pieza = nueva_pieza(NEGRO, CABALLO);
tablero[primera_fila][6].lugar_pieza = nueva_pieza(NEGRO, CABALLO);
tablero[primera_fila][2].lugar_pieza = nueva_pieza(NEGRO, ALFIL);
tablero[primera_fila][5].lugar_pieza = nueva_pieza(NEGRO, ALFIL);
tablero[primera_fila][3].lugar_pieza = nueva_pieza(NEGRO, REY);
tablero[primera_fila][4].lugar_pieza = nueva_pieza(NEGRO, REINA);
//Alloca para las blancas
tablero[ultima_fila][0].lugar_pieza = nueva_pieza(BLANCO, TORRE);
tablero[ultima_fila][7].lugar_pieza = nueva_pieza(BLANCO, TORRE);
tablero[ultima_fila][1].lugar_pieza = nueva_pieza(BLANCO, CABALLO);
tablero[ultima_fila][6].lugar_pieza = nueva_pieza(BLANCO, CABALLO);
tablero[ultima_fila][2].lugar_pieza = nueva_pieza(BLANCO, ALFIL);
tablero[ultima_fila][5].lugar_pieza = nueva_pieza(BLANCO, ALFIL);
tablero[ultima_fila][3].lugar_pieza = nueva_pieza(BLANCO, REY);
tablero[ultima_fila][4].lugar_pieza = nueva_pieza(BLANCO, REINA);
}
//Retorna el valor char asociado a la pieza y color.
char caracter_pieza(Pieza p){
char car;
switch(p.tipo_pieza){
case PEON:
car = 'p';
break;
case TORRE:
car = 't';
break;
case CABALLO:
car = 'c';
break;
case ALFIL:
car = 'a';
break;
case REY:
car = 'k';
break;
case REINA:
car = 'q';
break;
}
if(p.color_pieza == NEGRO){
return toupper(car);
}
return car;
}
void imprimir_tablero_n(Tablero tablero){
int i=0,j=0;
//-----------DIBUJAR EL TABLERO----------------//
int c=0;
for (i=0;i<8;i++){
printf(" +---+---+---+---+---+---+---+---+\n");
printf("%d",c);
for (j=0;j<8;j++){
printf("| %c ", caracter_pieza(tablero[i][j].lugar_pieza));
}
c++;
printf("|");
printf("\n");
}
printf(" +---+---+---+---+---+---+---+---+\n");
printf(" h g f e d c b a \n");
}
int main(int argc, char **argv){
Tablero tab = inicializar_tablero();
set_tablero(tab);
return 0;
}
La idea es una matriz 8x8. Tengo problemillas
1. Crear el tablero, sería alocar la memora de cada Casilla, la cual cada una va a tener un puntero que va a apuntar a una Pieza alocada posteriormente, cuando el puntero es NULL; no hay pieza en el casillero.
2. En la funcion set_tablero(); la idea es asignar cada puntero de la posición a una nueva "estructura alocada en memoria". Luego del printf el programa crashea, es decir, el resultado no es el esperado
3. Matriz a imprimir, idea
Disculpen los HORRORES de codigo, se ven, pero estoy en priori de solucionar ese esquemilla..soy estudiante ^^