Blog gratis
Reportar
Editar
¡Crea tu blog!
Compartir
¡Sorpréndeme!
Programación 1
¡Bienvenidos a nuestro Blog! Espero puedan disfrutarlo y aprender. Este será un contacto que podrá superar los límites de tiempo de las horas de clase: aprovéchenlo para construir algo nuevo.
22 de Octubre, 2015    Trabajos prácticos

Siete y medio

Siete y medio

El juego de cartas de las siete y media consiste en ir pidiendo cartas intentando sumar 7.5 puntos sin pasarse. Gana el jugador que más se acerca a 7.5. Se utiliza una baraja española. Sota, caballo y rey valen medio punto. Las demás cartas puntúan según su valor numérico (de 1 a 7).












#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
#include <conio.h>   // Función getch (no estándar: específica del compilador de Borland)
 
 
/* Baraja de cartas */
/* ---------------- */
 
#define PALOS    4
#define NUMEROS 10
#define CARTAS  (NUMEROS*PALOS)
 
typedef enum Palo {
    Oros,
    Copas,
    Espadas,
    Bastos
} Palo;
 
typedef struct Carta {
    Palo palo;
    int  numero;
} Carta;
 
typedef Carta Baraja[CARTAS];
 
/* Inicializar la baraja */
 
void inicializarBaraja (Baraja baraja)
{
    int i,j;
 
    for (i=0; i<PALOS; i++) {
        for (j=0; j<NUMEROS; j++) {
            baraja[NUMEROS*i+j].palo   = i;
            baraja[NUMEROS*i+j].numero = j;
        }
    }
}
 
/* Intercambiar dos cartas */
 
void intercambiar (Carta *c1, Carta *c2)
{
    Carta aux;
 
    aux = *c1;
    *c1 = *c2;
    *c2 = aux;
}
 
/* Barajar (mezclar de forma aleatoria las cartas de la baraja) */
 
void barajar (Baraja baraja)
{
  int cambios;
  int i,c1,c2;
 
  // Inicializar el generador de números aleatorios
 
  srand(time(NULL));
 
  // Número de intercambios de cartas (de 1 a 2000)
 
  cambios = 20 + (rand() % 1000);
 
  // Intercambiar cartas
 
  for (i=0; i<cambios; i++) {
 
      c1 = rand() % CARTAS;
      c2 = rand() % CARTAS;
 
      intercambiar( &(baraja[c1]), &(baraja[c2]) );
  }
 
}
 
/* Muestra en pantalla el valor de una carta */
 
void mostrarCarta (Carta carta)
{
    char palo[10];
    char numero[10];
 
    // Palo
 
    switch (carta.palo) {
 
      case Oros:
           strcpy (palo,"oros");
           break;
 
      case Copas:
           strcpy (palo,"copas");
           break;
 
      case Espadas:
           strcpy (palo,"espadas");
           break;
 
      case Bastos:
           strcpy (palo,"bastos");
           break;
    }
 
    // Número
 
    if (carta.numero<7) {
 
       sprintf (numero, "%d", carta.numero+1);
 
    } else if ( carta.numero == 7 ) {
 
        strcpy(numero,"Sota");
 
    } else if ( carta.numero == 8 ) {
 
        strcpy(numero,"Caballo");
 
    } else { // if ( carta.numero == 9 )
 
        strcpy(numero,"Rey");
    }
 
    // Salida
 
    printf("%s de %s ", numero, palo);
}
 
 
/* Muestra en pantalla una baraja */
 
void mostrarBaraja (Baraja baraja)
{
    int i;
 
    for (i=0; i<CARTAS; i++)
        mostrarCarta(baraja[i]);
}
 
/* Rutinas de E/S */
/* -------------- */
 
/* Pregunta al usuario del tipo SÍ/NO */ 
 
int preguntar (char *mensaje)
{
    char c;
 
    do {
        printf("%s (s/n) ",mensaje);
        c = getch();
 
    } while ((c!='s') && (c!='S') && (c!='n') && (c!='N'));
 
    if ((c=='s') || (c=='S'))
        return 1;
    else
        return 0;
}
 
/* Mensaje */
 
void mensaje (char *mensaje)
{
    printf("%s ",mensaje);
}
 
/* Juego de las siete y media */
/* -------------------------- */
 
/* Devuelve el valor de una carta en el juego */
 
float puntos (Carta carta)
{
    if (carta.numero<7)
        return carta.numero + 1;
    else
        return 0.5;
}
 
/* Decide si el ordenador sigue jugando */
 
int pide_otra_carta (float mis_puntos, float tus_puntos)
{
  return (tus_puntos<=7.5) && ( (mis_puntos<tus_puntos) || (mis_puntos<5) );
}
 
/* Nos dice si el jugador gana la partida */
 
int gana_jugador (float puntos_jugador, float puntos_ordenador)
{
    return (puntos_jugador<=7.5) && ((puntos_jugador>puntos_ordenador) || (puntos_ordenador>7.5));
}
 
/* Da una carta y devuelve su valor */
 
float dar_carta (Baraja baraja, int *carta_actual, char *jugador)
{
    float valor = puntos ( baraja[*carta_actual] );
 
    printf("Carta para %s: ", jugador);
    mostrarCarta(baraja[*carta_actual]);
    (*carta_actual)++;
 
    return valor;
}
 
/* Partida */
 
void juego (Baraja baraja)
{
    int   carta_actual;
    float puntos_jugador, puntos_ordenador;  // Puntos
    int   jugador_sigue, ordenador_sigue;    // ¿seguir jugando?
 
    carta_actual = 0;
    puntos_jugador = 0;
    puntos_ordenador = 0;
 
    jugador_sigue = 1;
    ordenador_sigue = 1;
 
    do {
 
        // Carta para el jugador
 
        if (jugador_sigue) {
 
            // NOTA: Se podría ofrecer una recomendación llamando a
            //       pide_otra_carta(puntos_jugador,puntos_ordenador);
 
 
            if (preguntar("¿Quiere una carta?")) {
 
                puntos_jugador += dar_carta(baraja, &carta_actual, "el jugador");
 
                if (puntos_jugador>7.5) {
                    mensaje("Te has pasado !!!");
                    jugador_sigue = 0;
                }
 
            } else {
                jugador_sigue = 0;
            }
 
        }
 
        // Carta para el ordenador
 
        if (ordenador_sigue) {
 
            // Estrategia del ordenador
            // NOTA: No vale mirar la baraja
 
            if ( pide_otra_carta(puntos_ordenador, puntos_jugador) ) {
 
                puntos_ordenador += dar_carta(baraja, &carta_actual, "el ordenador");

 
                if (puntos_ordenador>7.5) {
                    mensaje("El ordenador se ha pasado");
                    ordenador_sigue = 0;
                }
 
            } else {
 
                mensaje("El ordenador se planta");
                ordenador_sigue = 0;
            }
        }
 
        printf("- Jugador: %.1f puntos ", puntos_jugador);
        printf("- Ordenador: %.1f puntos ", puntos_ordenador);
 
    } while (jugador_sigue || ordenador_sigue);
 
    // Resultado de la partida
 
    if ( gana_jugador(puntos_jugador,puntos_ordenador) )
        mensaje(" Enhorabuena, ha ganado la partida !!! ");
    else
        mensaje(" Otra vez será... ");
 
 
 
}
 
 
/* Programa principal */
/* ------------------ */
 
 
int main (void)
{
    Baraja baraja;
 
    inicializarBaraja(baraja);
    //mostrarBaraja(baraja);
 
    do {
 
        barajar(baraja);
        //mostrarBaraja(baraja);
        juego(baraja);
 
    } while ( preguntar("¿Desea jugar otra partida?") );
    
    return 0;
}
















Palabras claves , ,
publicado por mariof2005 a las 23:28 · Sin comentarios  ·  Recomendar
 
Más sobre este tema ·  Participar
Comentarios (0) ·  Enviar comentario
Esta entrada no admite comentarios.
SOBRE MÍ
FOTO

Héctor Mario Freschinaldi

Mail: enviotp@gmail.com
En AS.: PROG1 2016(su nombre y apellido)

En un mundo donde los cambios se suceden vertiginosamente, incluso los tecnológicos, es menester asimilar las nuevas tecnologías para su aplicación inmediata y su proyección a futuro.

» Ver perfil

CALENDARIO
Ver mes anterior Noviembre 2017 Ver mes siguiente
DOLUMAMIJUVISA
1234
567891011
12131415161718
19202122232425
2627282930
TÓPICOS
» COMO SE EVALUA (2)
» COMUNICADOS (17)
» EVALUACIONES (3)
» Información Tecnológica (91)
» LENGUAJE C (23)
» PROGRAMA (2)
» TEORIA (10)
» Trabajos prácticos (8)
SECCIONES
» Inicio
ENLACES
» ¿Hay seguridad en lo que ponés en la WEB?
» ¡Te estoy espìando! (y colaborás conmigo)
» Los peligros de la WEB
» Otra de Facebook
» Historias del CHAT
» 1984/George Orwell
» Revistas de Informática, Tecnica y Nuevas Tecnolog
MÁS LEÍDOS
» 07 Elementos léxicos del lenguaje de programación C
» 1. Algoritmos.
» 10 aplicaciones útiles para llevar a todos lados 10 en un pendrive
» 03- Datos y tipos de datos
» EE UU recurre a una gran conspiración para minar la privacidad en Internet
» McAfee reveló un masivo pero silencioso ataque informático
» Por qué el jefe de seguridad tiene razón
» Seguridad en el aire
» Software gratis: los programas que no deben faltar en la PC
» TEORIA EN PDF
NUBE DE TAGS  [?]
AL MARGEN
¡Bienvenidos!
Este será un canal de comunicación entre nosotros.
Tendrá diferentes instancias dinamizadoras, y utilidades para trabajar los diferentes trabajos prácticos en diversas modalidades.
BUSCADOR
Blog   Web
SE COMENTA...
» Seguridad en el aire
2 Comentarios: uk vpn, uk vpn
FULLServices Network | Crear blog | Privacidad