Ideetje: Poker

Status
Niet open voor verdere reacties.

555Martijn

Gebruiker
Lid geworden
15 jun 2008
Berichten
163
Hiho :eek:.

Ik had het idee om (in C++ ofcourse) een soort van tekst styled Poker Game the maken. Het lijkt mij mogelijk met bijvoorbeeld een rand() functie, die tussen de 1 en 10 en A(as) K(oning) B(oer), V(rouw) geeft, en dan uiteraard ook ruiten, schoppen, harten, en klaver.

Dan krijg jij 2 kaarten, en je tegenstander ook (word dus gewoon Heads-Up).
En dan de flop, river, etc.

Zou dit kunnen of sla ik onzin uit? ;)



:thumb:
 
Laatst bewerkt:
Ik heb een keer het kaartspel pesten gemaakt in C++, dus dit kan ook.
 
Dat zou zeker kunnen. Ikzelf heb eens blackjack-textbased gemaakt (lekker simpel :) )

Belangrijk bij dit soort 'grote' projecten is dat je de software goed ontwerpt voordat je begint met code kloppen. Denk aan klassediagrammen, flowcharts etc
 
Ik heb een keer het kaartspel pesten gemaakt in C++, dus dit kan ook.

Cool :D

Dat zou zeker kunnen. Ikzelf heb eens blackjack-textbased gemaakt (lekker simpel :) )

Belangrijk bij dit soort 'grote' projecten is dat je de software goed ontwerpt voordat je begint met code kloppen. Denk aan klassediagrammen, flowcharts etc

Heb geen flauw idee hoe blackjack werkt, en poker vind ik zelf nogal leuk spel :p. Als iemand een kaart spel weet wat mischien wat simpeler zou zijn kan ik dat natuurlijk eerst proberen.

En bedoel je met klassediagrammen de attributen van de kaarten? dus de waarden van een Aas Koning?
En hoe kan ik beginnen met zo een flowchart? dat lijkt mij het moeilijke deel, maar ik dacht eerst tege beginnen met een random~ functie, om kaarten te laten zien.
 
Gewoon een paar ideen:

Een klasse kaart, met een waarde, kleur, soort
Een klasse 'kaartspel', met daarin 52 'kaarten'
- methode schudden
- methode geef random kaart
Een klasse speler (computer/human)
- kan 2 'kaarten' hebben (texas style)
Een klasse 'spel'
- heeft 1 'kaartspel'
- heeft 2 of meer 'spelers'
 
Gewoon een paar ideen:

Een klasse kaart, met een waarde, kleur, soort
Een klasse 'kaartspel', met daarin 52 'kaarten'
- methode schudden
- methode geef random kaart
Een klasse speler (computer/human)
- kan 2 'kaarten' hebben (texas style)
Een klasse 'spel'
- heeft 1 'kaartspel'
- heeft 2 of meer 'spelers'

Ok, thanks dat gaat van pas komen :D.
Ik probeer nu eerst een random 52 kaarten te geven (nog zonder waarden, schoppen, ruiten~ enzo) maar dat wil nog niet echt lukken, dit is een stuk moeilijker dan ik gedacht had :/

Hij geeft maar 1 waarden, de heletijd het getal 42... namelijk 52 keer :p. Stond er iets op google over srand dus dat geprobeert, lukt ook nog niet helaas.

Btw, krijg eigenlijk alleen maar getal 42 :p.

Code:
#include <iostream>
#include <ctime>
#include <cstdlib> 

using namespace std;
      
      
      int kaarten = rand() % 52 +1; // random tussen 52

int main()      {
                 
    srand( time( NULL ) ); // random seed
    
    for(int index=0; index<52; index++) { 
    cout << kaarten << endl;
                                        }
    system("pause");
    
    return 0;
}

iemand een idee?











<zucht> :p.
heb op internet nog iets gevonden hoe ik de kaarten kan printen maar compiled ook al niet.

Code:
#include <iostream>
#include <ctime>
#include <cstdlib> 

using namespace std;
      
      
      int kaarten[52] = rand() % 52 +1; // random tussen 52
      int x;

int main() {
    
    // maak kaarten aan
    for(x=0; x<52; x++)
    {
             kaarten[52] = x;
             }
    
    cout << x <<;
    system("pause");         
                       
    return 0;
}
 
Laatst bewerkt:
Code:
int kaarten = rand() % 52 +1; // random tussen 52
Hier geef je de variabele "kaarten" een waarde tussen de 1 en de 52.

Code:
for(int index=0; index<52; index++) { 
cout << kaarten << endl;
}
Hier druk je de waarde van "kaarten" 52 keer af. Dus is het logisch dat je 52 keer hetzelfde bedrag krijgt.

Zo krijg je wel verschillende getallen:
Code:
for(int index=0; index<52; index++) { 
int kaarten = rand() % 52 +1; // random tussen 52
cout << kaarten << endl;
}

Code:
int kaarten[52] = rand() % 52 +1; // random tussen 52
Ik weet niet wat je hier probeert te doen, maar je probeert een array van 52 elementen één waarde te geven. Dat kan niet.

Code:
cout << x <<;
Je kan niet eindigen met "<<". Dit moet
Code:
cout << x;
zijn, of
Code:
cout << x << endl;

Overigens heb ik, in mijn spel, eerst een random waarde tussen de 1 en de 4 getrokken (harten, schoppen, ruiten of klaveren) en vervolgens een waarde tussen de 1 en de 13 (aas t/m 10, boer, vrouw, heer).
 
Laatst bewerkt:
Hier druk je de waarde van "kaarten" 52 keer af. Dus is het logisch dat je 52 keer hetzelfde bedrag krijgt.

Nu je het zeg klinkt het zo logisch, maar zelf zou ik er dus echt nooit op komen :p.

Overigens heb ik, in mijn spel, eerst een random waarde tussen de 1 en de 4 getrokken (harten, schoppen, ruiten of klaveren) en vervolgens een waarde tussen de 1 en de 13 (aas t/m 10, boer, vrouw, heer).

Dat is een heel goed idee! Hardstikke bedankt!! :thumb:
Echt top van je :)





Edit: Kleine update, ik heb nu op het moment dit.

Code:
#include <iostream>
#include <ctime>
#include <cstdlib> 

using namespace std;
      
      int main()      {
                 
    srand( time( NULL ) ); // random seed
    
    for(int index=0; index<1; index++) { 
    int suit = rand() % 1 +1; // random tussen 4
    cout << suit << endl;
                                        }
    cout << "1 = Schoppen" << endl;
    cout << "2 = Harten" << endl;
    cout << "3 = Ruiten" << endl;
    cout << "4 = Klaver" << endl;
    
    cout << "\n\n\n" << endl;
        
    for(int index=0; index<1; index++) { 
    int kaart = rand() % 13 +1; // random tussen 13
    
    cout << kaart << endl;
                                          }
    
    cout << "1 tm 9 = normale kaart waarden" << endl;
    cout << "10 = Boer" << endl;
    cout << "11 = Vrouw" << endl;
    cout << "12 = Heer" << endl;
    cout << "13 = Aas" << endl;
    
    cout << "\n\n\n" << endl;    
    system("pause");
    
    return 0;
}

en dat doet het :).
Maar, het lijkt wel (10x achter elkaar) dat ik alleen maar schoppen (suit = 1) krijg, klopt dit? Andere (kaart) is wel random.

En kan ik nu het besten de kaart waarden bewaren en dan nog een keer random kaart, en dan oproepen? dat je 2 kaarten heb en hij die onthoudt? want als ik nu de waarden "kaart" opnieuw oproep komt uiteraard weer nieuwe random. Als ik zou doen wat ik nu in gedachten had is het natuurlijk mogelijk dat je 2 harten aasen heb :p
 
Laatst bewerkt:
Code:
int suit = rand() % 1 +1; // random tussen 4

Typefoutje. rand() % 1 levert altijd 0 op (elk getal is deelbaar door 1). Dus levert dit altijd 0+1 = 1 op.


Om bij te houden welke kaarten er al getrokken zijn heb ik gebruik gemaakt van 4 arrays van 13 integers (al werkt een tweedimensionale array van 4 bij 13 ook). Initieel zette ik alle integers op 0 en als een kaart getrokken was zette ik die kaart op 1 (en als de kaart gespeeld was op 2 zodat ik, als de kaarten op waren, alle gespeelde kaarten weer op 0 kon zetten en weer kon gebruiken (zo deden wij dat altijd als we "in het echt" pesten speelden en de kaarten op waren)).
Ik weet niet welke versie van poker je wilt maken, maar het kan zijn dat je genoeg hebt aan twee waarden (getrokken en niet getrokken). In dat geval zou ik booleans gebruiken i.p.v. integers.
 
in plaats van aparte integer-arrays te maken voor je deck, zou je ookvan de kaarten een klasse kunnen maken en die klasse een members kunnen meegeven of deze al dan niet getrokken is.
Mijn blackjackspel werkte op die manier. Een array van 52 pointers naar kaart-klasses
 
Geen nut om een nieuw topic te maken wat is nog zelfde onderwerp.
Ik kwam deze code tege in me folder, en wil hem dolgraag afmaken!

Ik print nu het volgende uit:

2r5da8m.jpg


(heb hier dus een 10 of hearts)

Ik wil hieronder dus zeggen, jij heb:
cout << "You got " << card << " of " << suit << ".
Maar de genereren van de kaarten word de waarden ervan niet opgeslagen, dus ik kan deze ook niet later oproepen. Suggesties?

Ook zou ik speciale tekens willen printen dat het er als volgt uitziet:

"You got 10 of hearts ♥"
"You got ace of clubs ♣"

Hoe print ik zulke speciale tekens in C++?
 
Laatst bewerkt:

Waarom bump je? Er worden hier 2-3 posts per dag gedaan, ik was die van jou echt wel tegengekomen. Of je moet bedoelen: "schiet eens op", in dat geval zal ik stoppen met hulp verlenen.:eek:

Maar de genereren van de kaarten word de waarden ervan niet opgeslagen, dus ik kan deze ook niet later oproepen. Suggesties?

Niet te zeggen zonder code te zien

Ook zou ik speciale tekens willen printen dat het er als volgt uitziet:

"You got 10 of hearts ♥"
"You got ace of clubs ♣"

Hoe print ik zulke speciale tekens in C++?

Zoiets:
Code:
#define HEART   ((char)0x03)
#define DIAMOND ((char)0x04)
#define CLUB    ((char)0x05)
#define SPADE   ((char)0x06)

[....]

cout << HEART;

Let er wel op dat deze 'lage' ASCII waarden door verschillende devices verschillend geïnterpreteerd worden. Op linux zal deze code bijvoorbeeld hele andere dingen betekenen...
 
Of je moet bedoelen: "schiet eens op", in dat geval zal ik stoppen met hulp verlenen.:eek:

Nope, totaal niet :p. Sorry als het verkeerd overkwam. Ik waardeer jullie/jouw hulp erg :thumb:.

#define HEART ((char)0x03)

Werkt prima, top!

----------
Hier is de huidige code:
Code:
#include <iostream>
#include <ctime>
#include <cstdlib> 

#define HEART   ((char)0x03)
#define DIAMOND ((char)0x04)
#define CLUB    ((char)0x05)
#define SPADE   ((char)0x06)

using namespace std;

int main()      {
                 
    srand( time( NULL ) ); // random seed
    
    for(int index=0; index<1; index++) { 
    int card = rand() % 13 +1; // random 13
    
    cout << card << endl;
                                       }
    
    cout << "1 tm 9 = Normal card value" << endl;
    cout << "10 = Jack" << endl;
    cout << "11 = Queen " << endl;
    cout << "12 = King" << endl;
    cout << "13 = Ace" << endl;
    
    cout << "\n\n" << endl;
    for(int index=0; index<1; index++) { 
    int suit = rand() % 4 +1; // random 4
    
    cout << suit << endl;
                                        }
    cout << "1 = Spades " << SPADE << endl;
    cout << "2 = Hearts " << HEART << endl;
    cout << "3 = Diamonds " << DIAMOND << endl;
    cout << "4 = Clubs " << CLUB << endl;
    
    cout << "\n" << endl;
    system("pause");
    
    return 0;
}


Dit is wat ik wil doen (schrijf het ff allemaal uit, meer voor mezelf :p):

maak 2 kaarten aan, dit worden de speelkaarten, print deze in ASCII style in een rechthoek met de waarden van de kaart er in. Vraag gebruiker of ze willen "checken" "betten" of "folden". 2 kaarten voor computer gestuurden player maken, met IF statement kijken wat speler doet, en kaarten vergelijken.

dan de flop 3 kaarten op tafel, player1 mag bepalen wat er moet gebeuren. Computer kan dan weer antwoorden, call, raise, fold.

turn, zelfde.

river.

kijken wie de beste kaarten mogelijk heeft, van 7 kaarten de beste 5. win, draw of lose.


----
Gaat nog lastig worden met de computer bestuurden speler. En mogen natuurlijk maar 4 asen etc in spel zitten dus niet dat iedereen asen heeft :/. Gaat ook lastig worden :confused:. Ook moet er geld ingezet kunnen worden maar dat is niet zo moeilijk.

Wel moet de beurten omgewisseld worden dan niet deheletijd p1 bepaald wat er moet gebeuren :eek:. Ook nog geen idee hoe dat moet gebeuren.

hmmm.... :rolleyes.
Heb het wel onderschat, maar wil het nog niet opgeven.
Nu moet ik de waarden van de kaarten opslaan voor, en blijven bewaren.
En een manier bedenken om te kijken of de kaarten al zijn geweest, want als ik een "int kaart2" aanmaak, kan die zelfde resultaat geven als "kaart".
 
Dit soort 'grote' projecten moet je eerst ontwerpen, en dan coderen. Ik zat eens te denken en hier is hoe ik het min of meer zou gaan doen:

Stel je maakt een class/struct "kaart". De kaart zou:
- een waarde hebben (int)
- een naam (string)
- een kleur (string) (optioneel)
- een type (string) (belangrijk voor flush)
- andere dingen ?

Vervolgens een klasse "deck" bestaande uit
- een vector van 52 kaarten
- een methode "shuffle deck"
- een methode "geef een kaart"
- een methode "reset"

Dan een klasse "speler"
- naam (string)
- hand ( 2 "kaarten")
- status (folded/ in race)
- geld
- andere dingen?

Dan een klasse "spel"
- 1 "deck"
- n "spelers"
- plek voor 5 "kaarten" (flop turn river)
- andere dingen?

Vul de gaten zelf maar aan en dan denk ik dat je een redelijk mooie opbouw van je programma hebt.

Ziehier een tut over classes om je iets op weg te helpen
 
Poker

in de STL zit n functie voor t shudden van arrays van objecten
dat wordt std::shuffle( Kaart , Kaart + 52 ) of zo iets
ik zou n FIFO container gebruiken voor t kaartspel
ipv n vector of je moet uit n vector ook kunnen verwijderen

cxio diversas el tio rezultas cxio samvaloras
 

nee ik heb asigmatisme .
maar dus wel n beperkt gezichtsvermogen .

cxio diversas el tio rezultas cxio samvaloras .

.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan