Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Presentazioni e programma poker
Forum - C/C++ - Presentazioni e programma poker

Avatar
Biciobicio (Normal User)
Newbie


Messaggi: 3
Iscritto: 05/10/2006

Segnala al moderatore
Postato alle 0:33
Giovedì, 05/10/2006
Ciao a tutti,
mi sono appena iscritto. Ho cominciato a studiare il C questa estate da autodidatta anche se non ho alcuna esperienza di programmazione (faccio il camionista). Volevo chiedervi qualche consiglio relativamente agli esercizi perchè ovviamente non ho alcun punto di riferimento. Questo richiedeva di implementare un programma sul poker. Funziona perfettamente ma vorrei sapere se e come è migliorabile. Grazie
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void shuffle (int wDeck[][13]);
void deal (int wDeck[][13], const char *wFace[], const char *wSuit[],
           int *oneSuit, int *oneFace,
           int *twoSuit, int *twoFace);
void result (int *seed, int *pict, int *score);

int main()
{
const char *suit[4] = {"Hearts", "Diamonds", "Clubs", "Spades"};

const char *face[13] =
{"Ace", "Deuce", "Three", "Four",
"Five", "Six", "Seven", "Eight",
"Nine", "Ten", "Jack", "Queen", "King"};
int pOneSuit[4] = {0}, pOneFace[13] = {0};
int pTwoSuit[4] = {0}, pTwoFace[13] = {0};
int deck[4][13] = {0};
int onePoint = 0, twoPoint = 0;

srand (time(0));

shuffle (deck);
deal (deck, face, suit, pOneSuit, pOneFace, pTwoSuit, pTwoFace);

printf ("Player one has: ");
result (pOneSuit, pOneFace, &onePoint);
if (onePoint == 0)
printf ("Nothing");

printf ("\n");

printf ("Player two has: ");
result (pTwoSuit, pTwoFace, &twoPoint);
if (twoPoint == 0)
printf ("Nothing");

printf ("\n");

if (onePoint > twoPoint){
printf ("--------------\n");
printf ("Player one win\n");
printf ("--------------\n");
}
else if (twoPoint > onePoint){
printf ("--------------\n");
printf ("Player two win\n");
printf ("--------------\n");
}  
system ("pause");

return 0;
}
void shuffle (int wDeck[][13])
{
int row;
int column;
int card;

for (card = 1; card <= 52; card++){

do{
row = rand() % 4;
column = rand() % 13;
}while (wDeck[row][column] != 0);

wDeck[row][column] = card;
}
}
void deal (int wDeck[][13], const char *wFace[], const char *wSuit[],
int *oneSuit, int *oneFace,
int *twoSuit, int *twoFace)
{
int card;
int row;
int column;

printf ("%15s%22s", "Player One", "Player Two\n\n");

for (card = 1; card <= 10; card++){

for (row = 0; row <= 3; row++){

for (column = 0; column <= 12; column++){

if (wDeck[row][column] == card){
if ((card % 2) == 0){
  ++twoSuit[row];
  ++twoFace[column];
}
else{
  ++oneSuit[row];
  ++oneFace[column];
}
printf ("%8s of %-8s", wFace[column], wSuit[row]);

if ((card % 2) == 0)
  printf ("\n");
}
}
}
}
printf ("\n");
}
void result (int *seed, int *pict, int *score)
{
int pair (int *pict);
int twoPair (int *pict);
int threeOfKind (int *pict);
int poker (int *pict);
int straight (int *pict);
int color (int *seed);

*score += pair (pict);
*score += twoPair (pict);
*score += threeOfKind (pict);
*score += poker (pict);
*score += straight (pict);
*score += color (seed);

}
int pair (int *pict)
{
int card, fPair, count = 0;

for (card = 0; card <= 12; card++){
if (pict[card] == 2){
fPair = card;
++count;
if (pict[card] == 3)
return 0;
}
}

if (count == 1){
printf ("Pair");
return 1 + fPair;
}
else return 0;
}
int twoPair (int *pict)
{
int card, count = 0, fPair, sPair;

for (card = 0; card <= 12; card++){
if (pict[card] == 2 && count == 1){
sPair = card;
count++;
}
else if (pict[card] == 2 && count == 0){
count++;
fPair = card;
}
}

if (count == 2){
printf ("Two Pair");
return 20 + sPair;
}
else return 0;
}
int threeOfKind (int *pict)
{
int card, tris;

for (card = 0; card <= 12; card++){
if (pict[card] == 3){
tris = card;
printf ("Three of a kind");
return 40 + tris;
}
}
}
int poker (int *pict)
{
int card, pok;

for (card = 0; card <= 12; card++){
if (pict[card] == 4){
pok = card;
printf ("Poker!!!");
return 100 + pok;
}
}
return 0;
}
int straight (int *pict)
{
int card, count = 0, firstPict, lastPict;

for (card = 0; card <= 12; card++){
if (pict[card] == 1){
++count;
if (count == 1)
   firstPict = card;
if (count == 5)
   lastPict = card;
}
}

if ((lastPict - firstPict) == 4 && count == 5){
printf ("Straight");
return 60 + lastPict;
}
else return 0;
}
int color (int *seed)
{
int card;

for (card = 0; card <= 3; card++){
if (seed[card] == 5){
printf ("Color");
return 80 + card;
}
}
return 0;
}



PM Quote
Avatar
null (Normal User)
Newbie


Messaggi: 9
Iscritto: 14/09/2006

Segnala al moderatore
Postato alle 12:05
Venerdì, 06/10/2006
Prova con il Deitel & Deitel "Corso completo di programmazione, seconda edizione", pag. 278: magari trovi qualche spunto interessante;)

PM Quote
Avatar
Biciobicio (Normal User)
Newbie


Messaggi: 3
Iscritto: 05/10/2006

Segnala al moderatore
Postato alle 12:33
Venerdì, 06/10/2006
Testo quotato

Postato originariamente da null:

Prova con il Deitel & Deitel "Corso completo di programmazione, seconda edizione", pag. 278: magari trovi qualche spunto interessante;)


Ciao,
hai il mio stesso testo. Il programma funziona ma molto probabilmente potrei perfezionarlo. Per contare le occorrenze delle carte ho usato un vettore che poi viene passato alla funzione result che lo passa a sua volta a tutte le altre (pair, twopair, etc.). Tu come lo hai svolto:D?

Ultima modifica effettuata da Biciobicio il 06/10/2006 alle 12:36
PM Quote
Avatar
null (Normal User)
Newbie


Messaggi: 9
Iscritto: 14/09/2006

Segnala al moderatore
Postato alle 9:52
Sabato, 07/10/2006
Anch'io sono autodidatta, ma purtroppo per mancanza di tempo (lavoro parecchie ore al giorno e 'tengo' famiglia) ho raggiunto una buona preparazione teorica ma posso fare pochie esercizi.
Questo purtroppo non l'ho svolto ma a questo punto sono incuriosito.
Secondo me sarebbe interessante implementare anche la prosecuzione del gioco ed anche il bluff,introducendo ovviamente una posta in gioco.
Ti consiglio però di commentare sempre i tuoi programmi, specie quando vengono sottoposti alla valutazione di altri.
Ciao

PM Quote
Avatar
Fr3d3R!K (Ex-Member)
Expert


Messaggi: 589
Iscritto: 17/08/2006

Segnala al moderatore
Postato alle 14:24
Sabato, 07/10/2006
Testo quotato

Ti consiglio però di commentare sempre i tuoi programmi, specie quando vengono sottoposti alla valutazione di altri.


PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 20:54
Sabato, 07/10/2006
Se conoscete il Delphi potete dare un'occhiatina al Multiplayer Poker in questo sito e prendere qualche spunto interessante... :)


Il mio blog: https://piero.dev
PM Quote
Avatar
Biciobicio (Normal User)
Newbie


Messaggi: 3
Iscritto: 05/10/2006

Segnala al moderatore
Postato alle 19:47
Domenica, 08/10/2006
Testo quotato

Postato originariamente da null:
Questo purtroppo non l'ho svolto ma a questo punto sono incuriosito.
Secondo me sarebbe interessante implementare anche la prosecuzione del gioco ed anche il bluff,introducendo ovviamente una posta in gioco.
Ti consiglio però di commentare sempre i tuoi programmi, specie quando vengono sottoposti alla valutazione di altri.
Ciao


Ho terminato i due esercizi successivi che sono un continuo di questo. Ho inserito anche i commenti, ma nell'insieme il codice è un po' caotico. Se ti interessa lo posto ma è molto lungo.
Testo quotato

Postato originariamente da pierotofy:
Se conoscete il Delphi potete dare un'occhiatina al Multiplayer Poker in questo sito e prendere qualche spunto interessante... :)


Non lo conosco purtroppo.

PM Quote