elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Consulta Chess en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Consulta Chess en C  (Leído 759 veces)
Franjabube

Desconectado Desconectado

Mensajes: 4


Franjabube-.


Ver Perfil
Consulta Chess en C
« en: 6 Junio 2015, 05:30 am »

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

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 ^^


« Última modificación: 6 Junio 2015, 05:39 am por Franjabube » En línea

C, Pascal, Java, C++, Assembly
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
war chess(guerra en ajedrez)3D para PC
Juegos y Consolas
gordy(D!@bL0) 1 23,364 Último mensaje 15 Febrero 2008, 14:43 pm
por Castiblanco
War Chess 3D Full Version
Juegos y Consolas
Laciana 2 1,085 Último mensaje 14 Marzo 2008, 21:45 pm
por Randomize
War Chess [Full] [MU]
Juegos y Consolas
unloadgames 0 3,782 Último mensaje 24 Febrero 2010, 19:16 pm
por unloadgames
Consulta; Necesito armar una consulta para saber si una fecha ha caido dentro...
Bases de Datos
astinx 6 4,448 Último mensaje 23 Diciembre 2011, 20:34 pm
por astinx
Video hackeando el chess titans con cheat engine
Hacking Básico
AlexPro 2 1,931 Último mensaje 19 Febrero 2012, 12:23 pm
por #!drvy
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines