Mayo 1, 2008
Juego de Poker hecho por mi! Denle una probada!
Posted by debianusr under C++, Codigo Fuente, Consola, Informatica, Linux, PC, Programacion, windows | Etiquetas: C++, codigo de poker sencillo, codigo fuente de poker, juegos, poker |Bueno, siguiendo con mis estudios de C++ llegue a un ejercicio (Todavia en el capitulo de los apuntadores^^) donde te dicen que hagas un juego de poker, claro, que es dificil, pero bueno, lo resolvi y lo pongo aqui por si alguien quiere echarle una mirada o mejorarlo. Tengan en cuenta que el codigo es bastante “newbie” (Aunque no tiene errores) y que por eso no tiene funcion para apuestas. Buennno el codigo es este:
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
void despliega( const char *[] , const char *[] , int const *, int const * );
using namespace std;
int cambial ( const int * const , const int * const, int *, int *, int);
int revisar( const int *, const int *, const int *, const int *, int *);
void barajar( int [][ 13 ] );
void repartir( const int [][ 13 ], int * , int *, int const * const, int);
int main()
{
int cambiarJ[5] = { 0 };
int cambiarJM[5] = { 0 };
int cambio = 0;
int desicion = 0;
int numeroJ = 0;
int numeroP = 0;
int numeroE = 0;
int cambiar = 0;
int ganador = 0;
int paloC[5] = { 0 };
int manoC[5] = { 0 };
int paloJ[5] = { 0 };
int manoJ[5] = { 0 };
int manoCambio[5] = { 0 };
int paloCambio[5] = { 0 };
int cartas[13] = { 0 , 1, 2, 3, 4, 5 , 6, 7, 8, 9 , 10, 11, 12};
const char *palo[ 4 ] = { “Corazones”, “Diamantes”, “Treboles “, “Espadas ” };
const char *cara[ 13 ] =
{ “As”, “Dos”, “Tres”, “Cuatro”,
“Cinco”, “Seis”, “Siete”, “Ocho”,
“Nueve”, “Diez”, “Joto”, “Quina”, “Rey” };
int baraja[ 4 ][ 13 ] = { 0 };
int swiche = 0;
for ( int juegos = 0; juegos < 20; juegos++, swiche = 0) {
system(”cls”);
srand( time( 0 ) );
for (int contador = 0, contador2 = 0; contador < 4; contador++)
for (contador2 = 0; contador2 < 13; contador2++)
baraja[contador][contador2] = 0;
barajar( baraja );
repartir( baraja, paloJ , manoJ, cartas, 0);
repartir( baraja, paloC , manoC, cartas, 5 );
repartir( baraja, paloCambio, manoCambio, cartas, 10);
repartir( baraja, cambiarJ, cambiarJM, cartas, 15 );
cout << “Su mano es: \n”;
despliega( cara, palo, manoJ, paloJ );
cout << endl << endl;
cout << “Desea cambiar alguna carta (1) (2): “;
cin >> desicion;
cout << endl;
switch ( desicion ) {
case 1:
cout << “Que cartas desea cambiar (9 para terminar): “;
for ( int contador = 0; contador < 5 && cambiar != 9 ; contador++) {
cin >> cambiar;
if ( cambiar > 5 )
continue;
else {
manoJ[ cambiar - 1 ] = cambiarJM[ cambiar - 1 ];
paloJ[ cambiar - 1 ] = cambiarJ[ cambiar - 1 ];
}
}
system(”cls”);
cout << “Su nueva mano es:\n”;
despliega( cara, palo, manoJ, paloJ );
printf(”\n\n”);
break;
case 2:
break;
}
ganador = revisar( paloJ, manoJ, paloC, manoC, &cambiar );
switch ( ganador ) {
case 0:
cambial( manoCambio, paloCambio, manoC, paloC, cambiar );
swiche = 1;
break;
case 1:
cout << “La mano de la pc es:\n”;
numeroP++;
despliega( cara, palo, manoC, paloC );
cout << “La pc gano!\n”;
break;
case 3:
numeroE++;
despliega( cara, palo, manoC, paloC);
cout << endl << endl;
cout << “Hubo un empate!\n”;
break;
}
if (swiche == 1) {
cout << “La mano de la pc es:\n”;
despliega( cara, palo, manoC, paloC );
ganador = revisar( paloJ, manoJ, paloC, manoC, &cambiar);
cout << endl << endl;
switch ( ganador ) {
case 0:
numeroJ++;
cout << “El jugador gano!\n” << endl;
break;
case 1:
numeroP++;
cout << “La pc gano\n” << endl;
break;
case 3:
numeroE++;
cout << “Empate!\n” << endl;
break;
}
}
system(”pause”);
}
system(”cls”);
cout << setw( 10 ) << “La pc gano ” << numeroP << ” veces” << endl;
cout << setw( 10 ) << “El jugador gano ” << numeroJ << ” veces” << endl;
cout << setw ( 10 ) << “Se empataron ” << numeroE << ” veces” << endl;
system(”PAUSE”);
return 0;
}
void barajar( int wBaraja[][ 13 ] )
{
int fila;
int columna;
for ( int carta = 1; carta <= 52; carta++ ) {
do {
fila = rand() % 4;
columna = rand() % 13;
} while( wBaraja[ fila ][ columna ] != 0 );
wBaraja[ fila ][ columna ] = carta;
}
}
void repartir( const int wBaraja[][ 13 ], int *palo, int *mano, int const * const cartas, int carta)
{
int contador = 0;
for ( int limite = carta + 5 ; carta < limite; carta++ , contador++)
for ( int fila = 0; fila <= 3; fila++ )
for ( int columna = 0; columna <= 12; columna++ )
if ( wBaraja[ fila ][ columna ] == carta ) {
*( palo + contador ) = fila;
*( mano + contador ) = cartas[columna];
}
}
int revisar( const int *paloJ, const int *manoJ, const int *paloC, const int *manoC, int *carta) {
int jugador = 1; /*Se usa para establecer que mano tiene el jugador (par, trio, poker, mierdalechuda)*/
int pc = 1; /*Igual que jugador, establece que mano tiene la pc*/
int repeticion = 0; /*Se usa para contar el numero de veces que se repite una carta*/
int masJ = 0; /*La carta mas alta del jugador*/
int masPC = 0; /*Carta mas alta de la pc*/
int cartaRJ = 0; /*Estblece cual es la carta que se repite*/
int cartaRC = 0; /*Igual que la anterior pero para la PC*/
int escaleraJ = 0; /*Se usa para saber si hay escalera*/
int escaleraPC = 0; /*Igual que la anterior*/
/*Fase de analisis*/
/*Jugador*/
/*Analiza las cartas del jugador, saca la mas alta y el numero de repeticiones de cada una*/
for (int contador = 0; contador < 5; contador++, repeticion = 0) {
for (int contador2 = 0; contador2 < 5; contador2++) {
if ( manoJ[contador] == manoJ[contador2] )
repeticion++;
}
if ( manoJ[contador] > masJ )
masJ = manoJ[contador];
if ( repeticion > jugador ) {
jugador = repeticion;
cartaRJ = manoJ[contador];
}
}
/*Analiza las cartas del jugador en busca de escalera*/
for (int contador = 0; contador < 4; contador++)
if (paloJ[contador] == paloJ[contador + 1])
escaleraJ++;
/*PC*/
/*Analiza las cartas de la pc, saca la mas alta y el numero de repeticiones de cada una*/
for (int contador = 0; contador < 5; contador++, repeticion = 0) {
for (int contador2 = 0; contador2 < 5; contador2++) {
if ( manoC[contador] == manoC[contador2] )
repeticion++;
}
if ( manoC[contador] > masPC )
masPC = manoC[contador];
if ( repeticion > pc ) {
pc = repeticion;
cartaRC = manoC[contador];
}
}
*carta = cartaRC;
/*Analiza las cartas del jugador en busca de escalera*/
for (int contador = 0; contador < 4; contador++)
if (paloC[contador] == paloC[contador + 1])
escaleraPC++;
/*Fin de fase de analisis*/
/*Comienzo de desiciones*/
if ( escaleraJ == 5 )
return 0;
if ( escaleraPC == 5 )
return 1;
if ( jugador > pc )
return 0;
if ( pc > jugador )
return 1;
if ( pc == jugador ) {
if ( cartaRC > cartaRJ )
return 1;
if ( cartaRJ > cartaRC )
return 0;
if ( cartaRJ == cartaRC )
return 3;
}
}
int cambial ( const int * const manoC, const int * const paloC, int *mano, int *palo, int carta) {
for (int contador = 0; contador < 5; contador++)
if (mano[contador] != carta) {
mano[contador] = manoC[contador];
palo[contador] = paloC[contador];
}
}
void despliega( const char *cara[], const char *palo[], int const *mano, int const *palom ) {
int contador = 0;
for ( contador = 0; contador < 20; contador++ )
printf(”/”);
printf(”\n”);
for ( contador = 0; contador < 5 ; contador++ )
printf(”%s de %s\n”, cara[mano[contador]], palo[palom[contador]] );
for ( contador = 0; contador < 20; contador++)
printf(”/”);
printf(”\n”);
}