Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <time.h>
- #include <stdlib.h>
- #include <string.h>
- #include <windows.h>
- //--Tietotyyppien määrittettely
- typedef char Maa[7];
- typedef char Arvo[3];
- typedef struct {
- Maa maa;
- Arvo arvo;
- }Tkortti;
- //Määritellään kortin arvoille taulukot
- Arvo arvot[13]={"A", "2", "3", "4", "5", "6", "7","8","9","T","J","Q","K"};
- Maa maat[4]={"Hertta","Risti","Ruutu","Pata"};
- //******* FUNKTIOT ********
- void tayta_pakka(Tkortti *);
- void sekoita_pakka(Tkortti *);
- int summaus(Tkortti *, int p, int summa);
- int lisaa(void);
- int pelaajaf(Tkortti *pakka, int *pelaaja_tot, int *jakajan_ensimmainen, int *voittaja, int panos);
- Tkortti jakajaf(Tkortti *pakka, int *jakajan_tot, int *voittaja);
- int vertaus(int pelaaja, int jakaja, int *voittaja);
- void voitonmaksu(int panos, int *rahat, int voittaja);
- void clrscr();
- //*******************PÄÄOHJELMA**********************//
- ///**************************************************///
- int main (void)
- {
- srand(time(NULL));
- Tkortti pakka[52]; //Korttipakalle varataan taulukko, joka myöhemmin täytetään ja sekoitetaan jne
- Tkortti jakaja;
- int jakajan_summa;
- int pelaajan_summa;
- int jakajan_kortti=50;
- int rahat=500;
- int panos;
- int voittaja;//-1 talo voittaa, 0 tasapeli, 1 pelaaja voittaa
- char lisaa;
- do{
- clrscr();
- do{
- jakajan_summa=0;
- pelaajan_summa=0;
- clrscr();
- printf("KASSA: %d", rahat);
- printf("\nAnna panos (max %d):\n", rahat);
- scanf("%d", &panos);}while(panos>rahat);
- tayta_pakka(pakka);
- sekoita_pakka(pakka);
- if (pelaajaf(pakka, &pelaajan_summa, &jakajan_summa, &voittaja, panos) && pelaajan_summa<21){
- jakajaf(pakka, &jakajan_summa, &voittaja);
- }
- printf("Jakajan summa: %d\n", jakajan_summa);
- printf("\nPelaajan summa: %d\n", pelaajan_summa);
- //Mennäänkö vertausfunktioon?
- if (jakajan_summa<22 && pelaajan_summa<21){
- vertaus(pelaajan_summa, jakajan_summa, &voittaja);}
- voitonmaksu(panos, &rahat, voittaja);
- //printf("\n voittajan arvo: %d", voittaja);
- if (voittaja<0){
- printf("* Jakaja voittaa *");}
- else if (voittaja>0){
- printf("* Pelaajan voittaa *");}
- if (voittaja==0){
- printf("* Tasapeli *");}
- printf("\nKASSA:%d\n", rahat);
- printf("Paina k jos haluat uuden jaon. Paina mitä tahansa muuta lopettaksesi. . .");
- lisaa=getche();
- }while(lisaa=='k');
- printf("\n Lopetit pelin");
- system("PAUSE");
- }
- //***********************************************
- //VOITON MAKSU
- void voitonmaksu(int panos, int *rahat, int voittaja){
- if (voittaja<0){ //Jakaja voittaa, rahoista vähennetään panos
- *rahat=*rahat-panos;
- }
- else if (voittaja>0){
- *rahat=*rahat+panos;
- }
- }
- //VERTAUS FUNKTIO
- /*Vertaus funktio vertaa kummalla on suurempi summa
- pelaaja häviää=-1, tasapeli=0, pelaaja voittaa=1
- */
- int vertaus(int pelaaja, int jakaja, int *voittaja)
- {
- if (pelaaja>jakaja || jakaja>21){
- /*printf("\npelaaja voittaa!");
- printf("\nVoitat 2x panoksesi.");*/
- *voittaja=1;
- }
- else if(pelaaja<jakaja || pelaaja>21){
- /*printf("\nJakaja voittaa!");
- printf("\nHäviät panoksesi.");*/
- *voittaja=-1;
- }
- else if(pelaaja==jakaja){
- /*printf("\nTasapeli!");
- printf("\nPanoksesi palautetaan");*/
- *voittaja=0;
- }
- }
- //--------------------------------------------------------------------
- //JAKAJAN KÄSI
- Tkortti jakajaf(Tkortti *pakka, int *jakajan_tot, int *voittaja){
- int summa=*jakajan_tot, kortti=51, i=1;
- // printf("TÄMÄ ON FUNKTIOON TULEVA JAKAJAN TOT: %d\n", summa);
- printf("\n%d. Jakajan kortti on %s %s\n",i, pakka[51].arvo, pakka[51].maa);
- // printf("Jakajan summa alussa: %d\n", summa);
- summa=summaus(pakka, kortti, summa);
- // printf("Jakajan summa: %d\n", summa);
- while ( summa<17 ){ // Jakajan täytyy ottaa korttia lisää,
- // kunnes saa 17 tai enemmän, jolloin jakajan täytyy jäädä.
- i++;
- kortti=kortti-1;
- printf("%d. Jakajan kortti on",i, kortti);
- printf(" %s %s\n", pakka[kortti].arvo, pakka[kortti].maa);
- summa=summaus(pakka, kortti, summa);
- if(summa>21){
- printf("\n* Jakajan käsi meni yli, sinä voitat! *");
- *voittaja=1;
- }
- }
- //printf("Jakajan summa: %d\n", summa);
- *jakajan_tot=summa;
- }
- //??????????????????????????????????????????????????
- //PELAAJA FUNKTIO
- int pelaajaf(Tkortti *pakka, int *pelaaja_tot, int *jakajan_ensimmainen, int *voittaja, int panos){
- int assa, i=1, x=0, p=0;
- int pelaajan_summa=0;
- int aux=0;
- int jakajan_summa=0;
- do
- {
- x++;
- clrscr();
- printf("PANOS: %d", panos);
- printf("\n\nJAKAJA:");
- printf("\n\tJakajan ensimmäinen kortti on %s %s\n", pakka[51].arvo, pakka[51].maa);
- aux=summaus(pakka, 51, jakajan_summa);
- printf("\tJakajan summa: %d\n\n", aux);
- printf("PELAAJA:");
- printf("\nKorttisi:\n");
- p=x;
- pelaajan_summa=summaus(pakka, x, pelaajan_summa);
- while(p>0){
- printf("%d .kortti %s %s\n", p, pakka[p].arvo, pakka[p].maa);
- p--;
- }
- if (pelaajan_summa==21){
- printf("\nSUMMA: %d\n", pelaajan_summa);
- printf("BLACKJACK!\nVoitit 2xpanoksesi!");
- *pelaaja_tot=pelaajan_summa;
- *voittaja=1;
- return 1;
- }
- else if(pelaajan_summa> 21){
- printf("\nSUMMA: %d\n", pelaajan_summa);
- printf("\n HÄVISIT!\nTalo voittaa.\n");
- *pelaaja_tot=pelaajan_summa;
- *voittaja=-1;
- return -1;
- }
- else
- printf("\nSUMMA: %d\n", pelaajan_summa);
- printf("\nHaluatko lisää? k/e\n");
- *pelaaja_tot=pelaajan_summa;
- }
- while(lisaa());
- }
- ///-------------------
- //LISÄÄ
- int lisaa()
- {
- char valinta;
- valinta=getche();
- while
- (valinta == 'k' || valinta == 'K')
- return 1;
- if(valinta == 'e' || valinta == 'E')
- return 0;
- else
- {
- printf("\tValitse joko k (lisää) tai e (ei lisää)\n");
- lisaa();
- }
- }
- //***************************************************//
- //SUMMAUSFUNKTO
- /*
- Summausfunktio saa pakan,
- kortin järjestysnron pakkataulukossa ja aiemman summan.
- Summausfunktio muuntaa kortin merkkiarvon numeroksi ja summaa sen edelliseen sumaan.
- Tämän jälkeen funktio palauttaa uuden summan.
- */
- int summaus(Tkortti *pakka, int p, int summa)
- {
- int luku;
- int assa;
- char merkki;
- // printf("\nMerkki: %-2s \t", pakka[p].arvo);
- merkki=*pakka[p].arvo;
- if(merkki == 'K')
- luku=10;
- else if(merkki == 'Q')
- luku=10;
- else if(merkki == 'J')
- luku=10;
- else if(merkki == 'T')
- luku=10;
- else if(merkki >= 50 && merkki <= 57)
- luku=merkki-48;
- else if(merkki == 'A')
- {luku=1; assa=11;}
- summa=luku+summa;
- return summa;
- }
- //TÄYTÄ PAKKA
- //Täyttää pakan korteilla järjestykseen maittain
- void tayta_pakka(Tkortti *pakka){
- int i;
- for (i=0;i<=51;i++)
- {
- strcpy (pakka[i].arvo,arvot[i%13]);
- strcpy (pakka[i].maa,maat[i/13]);
- }
- }
- //SEKOITA PAKKA
- //Sekoittaa pakan
- void sekoita_pakka(Tkortti *pakka){
- int i,x; //Kaksi muuttujaa
- Tkortti apukortti; //Apukortti
- for (i=0;i<=51;i++)
- {
- x=rand()%52; //Arvotaan kortti
- apukortti=pakka[i]; //kopioidaan apukorttiin alkuperäisestä pakasta arvottu kortti
- pakka[i]=pakka[x]; //alkuperäiseen pakkaan laitetaan 0-51 järjestyksessä satunnainen kortti
- pakka[x]=apukortti; //arvotunkortin tilalle kortti joka oli tallessa
- }
- }
- //TULOSTA PAKKA
- //Tulostaa pakan siinä järjestyksessä kuin se on
- void tulosta_pakka(Tkortti *pakka){
- int i;
- for (i=0;i<=51;i++){
- printf(" %d", i); //Kortin järjestysluku
- printf(" "); //
- printf(pakka[i].maa); //Tulostaa kortin maa
- printf(" ");
- printf(pakka[i].arvo); //Tulostaa kortin arvon
- printf("\n");
- }
- }
- //RUUDUN TYHJENNYS
- void clrscr()
- {
- COORD coordScreen = { 0, 0 };
- DWORD cCharsWritten;
- CONSOLE_SCREEN_BUFFER_INFO csbi;
- DWORD dwConSize;
- HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
- GetConsoleScreenBufferInfo(hConsole, &csbi);
- dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
- FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
- GetConsoleScreenBufferInfo(hConsole, &csbi);
- FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
- SetConsoleCursorPosition(hConsole, coordScreen);
- }
Add Comment
Please, Sign In to add comment