Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-09-2012
m1kevil m1kevil is offline
Registrado
NULL
 
Registrado: ago 2012
Posts: 7
Poder: 0
m1kevil Va por buen camino
No sabes como te agradezco la ayuda Escafandra! Me estaba pelando las pestañas! Funciona de maravilla!!!

Código:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>

int tirarDados (void);
int transEntero (char);
int cantJugadores (void);
int elegirPuntuacion (void);
char ingresarNombres (int);
int Dados, Jugadores, puntuacionMax;


int main () {
    
    char Nombres[Jugadores][40];
    
    srand (time(NULL));
    
    printf("!Bienvenidos al juego: EL PRESO!\n\n");
    
    Jugadores = cantJugadores();
    puntuacionMax = elegirPuntuacion();
    Nombres[Jugadores][40] = ingresarNombres(Jugadores);
    
    tirarDados();
    
    
system("pause");
return EXIT_SUCCESS;

    }
    
    
// Funcion para tirar los dados //  
int tirarDados (void) 
{    
     Dados = rand() % 11+2;
     printf("Arrojas los dados. Has sacado %d! \n", Dados);
    
    return Dados; 
}  

// Funcion para pasar de char a entero //
int transEntero(char s)
{
return s - '0';
} 

// Funcion para validar la cantidad de jugadores al principio del juego//
int cantJugadores ()
{
    do
    {
    printf("Ingrese la cantidad de jugadores (2 a 5): ");
    Jugadores = transEntero(getche());
    printf("\n");
    } while (Jugadores < 2 || Jugadores > 5);
    
    printf("Los participantes del juego seran %d.\n\n", Jugadores);
    return Jugadores;     
}

// Funcion para elegir la maxima puntuacion al ppio del juego //
int elegirPuntuacion ()
{
    char buffer [256];
    do
    {
    printf("Determine la cantidad de presos que se permiten dejar escapar (50 a 200): ");
    fgets (buffer, 256, stdin);
    puntuacionMax = atoi (buffer);
    } while(puntuacionMax < 50 || puntuacionMax > 200);
  
    printf("No podran escaparse mas de %d presos. Si esto ocurre, el jugador pierde. A Jugar!!! \n\n", puntuacionMax);
    return puntuacionMax;
}

// Funcion para definir nombres de los jugadores //
char ingresarNombres (int Jugadores)
{
  int i;
  char Nombres[Jugadores][40];
  char Buffer[1024];  // Buffer para la entrada por teclado.
  for(i = 0; i < Jugadores; i++)
  {
    printf("Ingrese el nombre del jugador %d: ", i+1);
    strncpy(Nombres[i], gets(Buffer), 40);  // aseguramos que no entran mas de 40 caracteres
  }
  for(i = 0; i < Jugadores; i++)
  {
    printf("El jugador %d se llama: %s\n", i+1, Nombres[i]);
  }
  return Nombres[Jugadores][40];
}
Ahí está como va quedando todo el código. Tuve un problema al declarar la variable char Nombres[Jugadores][40] globalmente... me tira un error el compilador diciendo: "variable-size type declared outside of any function" , lo cual es logico, pero justamente debería pasar eso.. :S Asique tuve que declararla en el main y en la funcion.
Por favor avisame si tienes alguna solución para ese pequeño problema. Desde ya muchas gracias por tu tiempo, es justo lo que necesitaba.

Es un gran avance para mi.. ahora tengo que planear mejor en lapiz y papel la lógica del juego.
Responder Con Cita
  #2  
Antiguo 01-09-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por m1kevil Ver Mensaje
Tuve un problema al declarar la variable char Nombres[Jugadores][40] globalmente... me tira un error el compilador diciendo: "variable-size type declared outside of any function" , lo cual es logico, pero justamente debería pasar eso.. :S Asique tuve que declararla en el main y en la funcion.
Ya te expliqué que no puedes declarar arrays estáticos dando el tamaño en una variable, debe ser una constante. Un array no puede tomar un valor así como así. En C un array es un puntero al primer elemento. Si tienes un array declarado como estático, no puede tomar otro valor. Lo podrá tomar un puntero char** (puntero a puntero) al ser de dos dimensiones. Pero creo que esto, de momento no lo vas a entender.

Para los valores constantes en toda la aplicación es mejor definirlos al principio, así los puedes cambiar fácilmente si es necesario.

Mira esta adaptación de tu programa, en la que he modificado también la anterior función ingresarNombres para hacerla mas segura contra el desbordamiento de buffer:

Código:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>

#define MIN_JUGADORES  2
#define MAX_JUGADORES  5
#define MIN_PUNTUACION 50
#define MAX_PUNTUACION 200
#define MAX_NOMBRE     40

char Nombres[MAX_JUGADORES][MAX_NOMBRE + 1];

int  tirarDados (void);
int  transEntero (char);
int  cantJugadores (void);
int  elegirPuntuacion (void);
void ingresarNombres (int);
int  Dados, Jugadores, puntuacionMax;

int main(int argc, char* argv[])
{
  srand (time(NULL));

  printf("!Bienvenidos al juego: EL PRESO!\n\n");

  Jugadores = cantJugadores();
  puntuacionMax = elegirPuntuacion();
  ingresarNombres(Jugadores);
  tirarDados();
  system("pause");
  return EXIT_SUCCESS;
}

// Funcion para tirar los dados //  
int tirarDados (void)
{    
  Dados = rand() % 11+2;
  printf("Arrojas los dados. Has sacado %d! \n", Dados);
  return Dados;
}

// Funcion para pasar de char a entero //
int transEntero(char s)
{
  return s - '0';
}

// Funcion para validar la cantidad de jugadores al principio del juego//
int cantJugadores ()
{
  do{
    printf("Ingrese la cantidad de jugadores (%d a %d): ", MIN_JUGADORES, MAX_JUGADORES);
    Jugadores = transEntero(getche());
    printf("\n");
  }while (Jugadores < MIN_JUGADORES || Jugadores > MAX_JUGADORES);

  printf("Los participantes del juego seran %d.\n\n", Jugadores);
  return Jugadores;
}

// Funcion para elegir la maxima puntuacion al ppio del juego //
int elegirPuntuacion ()
{
  char buffer [256];
  do{
    printf("Determine la cantidad de presos que se permiten dejar escapar (50 a 200): ");
    fgets (buffer, 256, stdin);
    puntuacionMax = atoi(buffer);
  } while(puntuacionMax < MIN_PUNTUACION || puntuacionMax > MAX_PUNTUACION);

  printf("No podran escaparse mas de %d presos. Si esto ocurre, el jugador pierde. A Jugar!!! \n\n", puntuacionMax);
  return puntuacionMax;
}

// Funcion para definir nombres de los jugadores //
void ingresarNombres (int Jugadores)
{
  int i, n;
  for(i = 0; i < Jugadores; i++){
    printf("Ingrese el nombre del jugador %d: ", i+1);
    n = strlen(fgets(Nombres[i], MAX_NOMBRE, stdin))-1;
    if(Nombres[i][n] == '\n') Nombres[i][n] = 0;
  }
  for(i = 0; i < Jugadores; i++){
    printf("El jugador %d se llama: %s\n", i+1, Nombres[i]);
  }
}
Cita:
Empezado por m1kevil Ver Mensaje
Es un gran avance para mi.. ahora tengo que planear mejor en lapiz y papel la lógica del juego.
Eso es fundamental.


Saludos.

Última edición por escafandra fecha: 01-09-2012 a las 22:40:43.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Un pedacito de México AzidRain La Taberna 3 22-01-2012 13:34:32
AYUDA por favor!!! Melcv Varios 2 28-06-2006 21:19:35
Codigo de barras + QuickReport ... Help por favor!!!! jdelphi Impresión 3 29-01-2005 07:58:00
Traducir un codigo de VB a Delphi ¡¡¡¡ Por favor !!!! Betsa23 Internet 2 30-11-2004 16:29:35
Ayuda por favor jtellof Conexión con bases de datos 4 08-09-2003 21:56:24


La franja horaria es GMT +2. Ahora son las 20:40:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi