Hola, que tal!
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
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 ^^
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 [Seleccionar]
#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 ^^