paparoach1484
Registrado: 25 Abr 2006 Mensajes: 13
| Publicado: 18/09/2009 4:28 am | | | Título: ayuda ta te ti linux |
| hola gente como les va les comento que estoy haciendo un proyecto para una materia de la facultad que consiste en un programa en c linux que es el clasico juego del tateti y yo encontre algo de la logica por ahi y buieno le hice muchos cambios le programe un socket lo separe en funciones y demas y anda joya cuando hay ganadores pero tengo problemas cuando no ganaa nadie no puedo agregar un if que me genere esa condicion porque cuando lo agrego rompo alguno de los whiles de arriba espero alguien pueda darme una mano aca subo los codigos
mi servidor es tateti.c
tateti.c #include <Socket_Servidor.h> #include <Socket_Cliente.h> #include <Socket.h> #include <tablero.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define FILAS 3 #define COL 3
void dibujar ( char tablero[FILAS][COL] ); int verificar ( char tablero[FILAS][COL] );
int main(){ int Socket_Usuario1; int Usuario2; char Cadena[100]; int i = 0; int o=0; int x=0; int jugada = 0; int ganador = 0; int fila = 0; int columna = 0; char tablero[3][3] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'} };
Socket_Usuario1 = Abre_Socket_Inet ("kazaa"); //Se abre el socket del usuario 1 if (Socket_Usuario1 == -1){ printf ("No se puede abrir socket del Jugador 1\n"); exit (-1); }else{ printf("\nJugador 1 Iniciado"); printf("\n-----------------\n"); printf("Esperando Conexion del Jugador 2...\n"); }
while((Usuario2 = Acepta_Conexion_Cliente(Socket_Usuario1))){ if (Usuario2 == -1){ printf ("No se puede abrir socket del Jugador 2\n"); exit (-1); }else{ printf("\n-->Jugador 2 Conectado\n"); }
Lee_Socket(Usuario2, Cadena, 6);
printf ("\nSoy Jugador 1, he recibido : %s\n", Cadena); printf("\nComienza el juego.");
dibujar(tablero);
do{ do{ printf("\nJugador 1, ingrese la posicion de la ficha (o): "); scanf("%d", &jugada); fila = --jugada/3; // calcula fila columna = jugada%3; // calcula columna }while(jugada<0 || jugada>9 || tablero[fila][columna]>'9'); tablero[fila][columna] = 'o'; sprintf(Cadena, "%d", jugada); //Conversion Escribe_Socket (Usuario2, Cadena, 1); ganador=verificar(tablero); dibujar(tablero); if(ganador==1){ printf("\nGANASTE !!!\n"); break; }
printf("\nEsperando al Jugador 2...\n"); Lee_Socket (Usuario2, Cadena, 1); printf ("Ficha recibida : %d\n", atoi(Cadena)+1); jugada=atoi(Cadena)+1; fila = --jugada/3; // calcula fila columna = jugada%3; // calcula columna tablero[fila][columna] = 'x'; dibujar(tablero); ganador=verificar(tablero); if(ganador==1){ printf("\nGano Jugador2\n"); break; } }while(ganador!=1); } }
mi cliente es jugador2.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <Socket_Cliente.h> #include <Socket.h> #include <tablero.h>
main (){ //Descriptor del socket y buffer para datos int Socket_Usuario2; char Cadena[100], nombre_servidor[20]; int i = 0; int jugada = 0; int ganador = 0; int o=0; int x=0; int fila = 0; int columna = 0; char tablero[3][3] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'} };
printf("\nBIENVENIDO!"); printf("\n-----------"); printf("\nPara conectarse ingrese el nombre del servidor:"); scanf("%s",&nombre_servidor); /* * Se abre la conexion con el servidor, pasando el nombre del ordenador * y el servicio solicitado. * "localhost" corresponde al nombre del mismo ordenador en el que * estamos corriendo. Esta dado de alta en /etc/hosts * "kazaa" es un servicio dado de alta en /etc/services */ Socket_Usuario2 = Abre_Conexion_Inet (nombre_servidor, "kazaa"); if (Socket_Usuario2 == -1){ printf ("No puedo establecer conexion con el servidor\n"); exit (-1); }else{ printf("Jugador Conectado"); }
strcpy(Cadena,"Listo"); Escribe_Socket (Socket_Usuario2, Cadena, 6); //Fin \0
dibujar(tablero); do{ printf("\nEsperando al Jugador 1...\n"); //Se lee la informacion enviada por el Jugador 1, que se supone es una cadena de 1 caracteres. Lee_Socket (Socket_Usuario2, Cadena, 1); printf ("Ficha recibida : %d\n", atoi(Cadena)+1); jugada=atoi(Cadena)+1; fila = --jugada/3; // calcula fila columna = jugada%3; // calcula columna tablero[fila][columna] = 'o'; dibujar(tablero); ganador=verificar(tablero); if(ganador==1){ printf("\nGano Jugador1\n"); break; }
do{ printf("\nJugador 2, ingrese la posicion de la ficha (X): "); scanf("%d", &jugada); fila = --jugada/3; // calcula fila printf("fila %d",fila); columna = jugada%3; // calcula columna printf("columna: %d",columna); }while(jugada<0 || jugada>9 || tablero[fila][columna]>'9'); tablero[fila][columna] = 'x'; sprintf(Cadena, "%d", jugada); //Conversion Escribe_Socket (Socket_Usuario2, Cadena, 1); dibujar(tablero); ganador=verificar(tablero); if(ganador==1){ printf("\nGANASTE!!!\n"); break; } }while(ganador!=1); close(Socket_Usuario2); }
y la logica para encontrar ganadoes es tablero.c
#include <stdio.h> #include <stdlib.h> #include <tablero.h>
/* Funcion que dibuja el tablero */
void dibujar (char tablero[3][3]){ //system("clear"); printf("\n\n"); printf(" %c | %c | %c\n", tablero[0][0], tablero[0][1], tablero[0][2]); printf("---+---+---\n"); printf(" %c | %c | %c\n", tablero[1][0], tablero[1][1], tablero[1][2]); printf("---+---+---\n"); printf(" %c | %c | %c\n", tablero[2][0], tablero[2][1], tablero[2][2]); }
/* Funcion para chequear si hay ganador */
int verificar (char tablero[3][3]){ int linea, ganador = 0; /* Verifica si hay ganador en las diagonales */ if((tablero[0][0] == tablero[1][1] && tablero[0][0] == tablero[2][2]) || (tablero[0][2] == tablero[1][1] && tablero[0][2] == tablero[2][0])) ganador = 1; else /* Verifica si hay ganador en las lineas */ for(linea = 0; linea <= 2; linea ++) if((tablero[linea][0] == tablero[linea][1] && tablero[linea][0] == tablero[linea][2])|| (tablero[0][linea] == tablero[1][linea] && tablero[0][linea] == tablero[2][linea])) ganador = 1; return ganador; } |
|