| Usuario |
Traduccion de C a Pascal |
Desconocido
|
| Enviado - 2/12/2004 |
| ? |
Alguien podria traducir el siguiente programa en C a Pascal, por favor.
Es urgente.
#include
#include
#include
#include
#include // 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
for (j=0; 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
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\n", numero, palo);
}
/* Muestra en pantalla una baraja */
void mostrarBaraja (Baraja baraja)
{
int i;
for (i=0; 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)\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\n",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
}
/* 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\n", puntos_jugador);
printf("- Ordenador: %.1f puntos\n", puntos_ordenador);
} while (jugador_sigue || ordenador_sigue);
// Resultado de la partida
if ( gana_jugador(puntos_jugador,puntos_ordenador) )
mensaje("\nEnhorabuena, ha ganado la partida !!!\n");
else
mensaje("\nOtra vez ser?...\n");
}
/* 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;
}
|
| ? |
|
|
|