Guest User

Untitled

a guest
May 28th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.11 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <time.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <windows.h>
  7.  
  8.  
  9. //--Tietotyyppien määrittettely
  10.  
  11. typedef char Maa[7];
  12. typedef char Arvo[3];
  13.  
  14. typedef struct {
  15. Maa maa;
  16. Arvo arvo;
  17. }Tkortti;
  18.  
  19. //Määritellään kortin arvoille taulukot
  20. Arvo arvot[13]={"A", "2", "3", "4", "5", "6", "7","8","9","T","J","Q","K"};
  21. Maa maat[4]={"Hertta","Risti","Ruutu","Pata"};
  22.  
  23. //******* FUNKTIOT ********
  24. void tayta_pakka(Tkortti *);
  25. void sekoita_pakka(Tkortti *);
  26. int summaus(Tkortti *, int p, int summa);
  27. int lisaa(void);
  28. int pelaajaf(Tkortti *pakka, int *pelaaja_tot, int *jakajan_ensimmainen, int *voittaja, int panos);
  29. Tkortti jakajaf(Tkortti *pakka, int *jakajan_tot, int *voittaja);
  30. int vertaus(int pelaaja, int jakaja, int *voittaja);
  31. void voitonmaksu(int panos, int *rahat, int voittaja);
  32. void clrscr();
  33.  
  34. //*******************PÄÄOHJELMA**********************//
  35. ///**************************************************///
  36.  
  37.  
  38.  
  39. int main (void)
  40. {
  41. srand(time(NULL));
  42. Tkortti pakka[52]; //Korttipakalle varataan taulukko, joka myöhemmin täytetään ja sekoitetaan jne
  43.  
  44.  
  45. Tkortti jakaja;
  46.  
  47. int jakajan_summa;
  48. int pelaajan_summa;
  49. int jakajan_kortti=50;
  50. int rahat=500;
  51. int panos;
  52. int voittaja;//-1 talo voittaa, 0 tasapeli, 1 pelaaja voittaa
  53. char lisaa;
  54. do{
  55. clrscr();
  56. do{
  57. jakajan_summa=0;
  58. pelaajan_summa=0;
  59. clrscr();
  60. printf("KASSA: %d", rahat);
  61. printf("\nAnna panos (max %d):\n", rahat);
  62. scanf("%d", &panos);}while(panos>rahat);
  63.  
  64. tayta_pakka(pakka);
  65. sekoita_pakka(pakka);
  66.  
  67. if (pelaajaf(pakka, &pelaajan_summa, &jakajan_summa, &voittaja, panos) && pelaajan_summa<21){
  68. jakajaf(pakka, &jakajan_summa, &voittaja);
  69. }
  70. printf("Jakajan summa: %d\n", jakajan_summa);
  71. printf("\nPelaajan summa: %d\n", pelaajan_summa);
  72.  
  73.  
  74. //Mennäänkö vertausfunktioon?
  75. if (jakajan_summa<22 && pelaajan_summa<21){
  76. vertaus(pelaajan_summa, jakajan_summa, &voittaja);}
  77. voitonmaksu(panos, &rahat, voittaja);
  78. //printf("\n voittajan arvo: %d", voittaja);
  79.  
  80. if (voittaja<0){
  81. printf("* Jakaja voittaa *");}
  82. else if (voittaja>0){
  83. printf("* Pelaajan voittaa *");}
  84. if (voittaja==0){
  85. printf("* Tasapeli *");}
  86.  
  87. printf("\nKASSA:%d\n", rahat);
  88. printf("Paina k jos haluat uuden jaon. Paina mitä tahansa muuta lopettaksesi. . .");
  89. lisaa=getche();
  90. }while(lisaa=='k');
  91. printf("\n Lopetit pelin");
  92. system("PAUSE");
  93.  
  94. }
  95.  
  96.  
  97.  
  98.  
  99. //***********************************************
  100. //VOITON MAKSU
  101. void voitonmaksu(int panos, int *rahat, int voittaja){
  102.  
  103. if (voittaja<0){ //Jakaja voittaa, rahoista vähennetään panos
  104. *rahat=*rahat-panos;
  105. }
  106. else if (voittaja>0){
  107. *rahat=*rahat+panos;
  108. }
  109. }
  110.  
  111. //VERTAUS FUNKTIO
  112. /*Vertaus funktio vertaa kummalla on suurempi summa
  113. pelaaja häviää=-1, tasapeli=0, pelaaja voittaa=1
  114. */
  115. int vertaus(int pelaaja, int jakaja, int *voittaja)
  116. {
  117. if (pelaaja>jakaja || jakaja>21){
  118. /*printf("\npelaaja voittaa!");
  119. printf("\nVoitat 2x panoksesi.");*/
  120. *voittaja=1;
  121. }
  122. else if(pelaaja<jakaja || pelaaja>21){
  123. /*printf("\nJakaja voittaa!");
  124. printf("\nHäviät panoksesi.");*/
  125. *voittaja=-1;
  126. }
  127. else if(pelaaja==jakaja){
  128. /*printf("\nTasapeli!");
  129. printf("\nPanoksesi palautetaan");*/
  130. *voittaja=0;
  131. }
  132. }
  133.  
  134. //--------------------------------------------------------------------
  135. //JAKAJAN KÄSI
  136.  
  137. Tkortti jakajaf(Tkortti *pakka, int *jakajan_tot, int *voittaja){
  138.  
  139. int summa=*jakajan_tot, kortti=51, i=1;
  140. // printf("TÄMÄ ON FUNKTIOON TULEVA JAKAJAN TOT: %d\n", summa);
  141. printf("\n%d. Jakajan kortti on %s %s\n",i, pakka[51].arvo, pakka[51].maa);
  142. // printf("Jakajan summa alussa: %d\n", summa);
  143. summa=summaus(pakka, kortti, summa);
  144. // printf("Jakajan summa: %d\n", summa);
  145. while ( summa<17 ){ // Jakajan täytyy ottaa korttia lisää,
  146. // kunnes saa 17 tai enemmän, jolloin jakajan täytyy jäädä.
  147. i++;
  148. kortti=kortti-1;
  149. printf("%d. Jakajan kortti on",i, kortti);
  150. printf(" %s %s\n", pakka[kortti].arvo, pakka[kortti].maa);
  151. summa=summaus(pakka, kortti, summa);
  152.  
  153. if(summa>21){
  154. printf("\n* Jakajan käsi meni yli, sinä voitat! *");
  155. *voittaja=1;
  156. }
  157.  
  158. }
  159. //printf("Jakajan summa: %d\n", summa);
  160. *jakajan_tot=summa;
  161.  
  162. }
  163.  
  164. //??????????????????????????????????????????????????
  165. //PELAAJA FUNKTIO
  166.  
  167. int pelaajaf(Tkortti *pakka, int *pelaaja_tot, int *jakajan_ensimmainen, int *voittaja, int panos){
  168.  
  169.  
  170. int assa, i=1, x=0, p=0;
  171. int pelaajan_summa=0;
  172. int aux=0;
  173. int jakajan_summa=0;
  174.  
  175. do
  176. {
  177.  
  178. x++;
  179. clrscr();
  180. printf("PANOS: %d", panos);
  181. printf("\n\nJAKAJA:");
  182. printf("\n\tJakajan ensimmäinen kortti on %s %s\n", pakka[51].arvo, pakka[51].maa);
  183. aux=summaus(pakka, 51, jakajan_summa);
  184. printf("\tJakajan summa: %d\n\n", aux);
  185.  
  186.  
  187. printf("PELAAJA:");
  188. printf("\nKorttisi:\n");
  189. p=x;
  190.  
  191. pelaajan_summa=summaus(pakka, x, pelaajan_summa);
  192.  
  193. while(p>0){
  194. printf("%d .kortti %s %s\n", p, pakka[p].arvo, pakka[p].maa);
  195. p--;
  196. }
  197.  
  198. if (pelaajan_summa==21){
  199. printf("\nSUMMA: %d\n", pelaajan_summa);
  200. printf("BLACKJACK!\nVoitit 2xpanoksesi!");
  201. *pelaaja_tot=pelaajan_summa;
  202. *voittaja=1;
  203. return 1;
  204. }
  205. else if(pelaajan_summa> 21){
  206. printf("\nSUMMA: %d\n", pelaajan_summa);
  207. printf("\n HÄVISIT!\nTalo voittaa.\n");
  208. *pelaaja_tot=pelaajan_summa;
  209. *voittaja=-1;
  210. return -1;
  211. }
  212. else
  213. printf("\nSUMMA: %d\n", pelaajan_summa);
  214. printf("\nHaluatko lisää? k/e\n");
  215. *pelaaja_tot=pelaajan_summa;
  216. }
  217. while(lisaa());
  218. }
  219. ///-------------------
  220. //LISÄÄ
  221. int lisaa()
  222. {
  223. char valinta;
  224. valinta=getche();
  225. while
  226. (valinta == 'k' || valinta == 'K')
  227. return 1;
  228. if(valinta == 'e' || valinta == 'E')
  229. return 0;
  230. else
  231. {
  232. printf("\tValitse joko k (lisää) tai e (ei lisää)\n");
  233. lisaa();
  234. }
  235. }
  236.  
  237.  
  238. //***************************************************//
  239. //SUMMAUSFUNKTO
  240. /*
  241. Summausfunktio saa pakan,
  242. kortin järjestysnron pakkataulukossa ja aiemman summan.
  243. Summausfunktio muuntaa kortin merkkiarvon numeroksi ja summaa sen edelliseen sumaan.
  244. Tämän jälkeen funktio palauttaa uuden summan.
  245. */
  246.  
  247. int summaus(Tkortti *pakka, int p, int summa)
  248. {
  249. int luku;
  250. int assa;
  251. char merkki;
  252.  
  253. // printf("\nMerkki: %-2s \t", pakka[p].arvo);
  254. merkki=*pakka[p].arvo;
  255.  
  256.  
  257.  
  258.  
  259. if(merkki == 'K')
  260. luku=10;
  261. else if(merkki == 'Q')
  262. luku=10;
  263. else if(merkki == 'J')
  264. luku=10;
  265. else if(merkki == 'T')
  266. luku=10;
  267. else if(merkki >= 50 && merkki <= 57)
  268. luku=merkki-48;
  269. else if(merkki == 'A')
  270. {luku=1; assa=11;}
  271.  
  272. summa=luku+summa;
  273. return summa;
  274.  
  275. }
  276.  
  277.  
  278. //TÄYTÄ PAKKA
  279. //Täyttää pakan korteilla järjestykseen maittain
  280. void tayta_pakka(Tkortti *pakka){
  281. int i;
  282. for (i=0;i<=51;i++)
  283. {
  284. strcpy (pakka[i].arvo,arvot[i%13]);
  285. strcpy (pakka[i].maa,maat[i/13]);
  286. }
  287. }
  288. //SEKOITA PAKKA
  289. //Sekoittaa pakan
  290. void sekoita_pakka(Tkortti *pakka){
  291. int i,x; //Kaksi muuttujaa
  292. Tkortti apukortti; //Apukortti
  293.  
  294. for (i=0;i<=51;i++)
  295. {
  296. x=rand()%52; //Arvotaan kortti
  297. apukortti=pakka[i]; //kopioidaan apukorttiin alkuperäisestä pakasta arvottu kortti
  298. pakka[i]=pakka[x]; //alkuperäiseen pakkaan laitetaan 0-51 järjestyksessä satunnainen kortti
  299. pakka[x]=apukortti; //arvotunkortin tilalle kortti joka oli tallessa
  300. }
  301. }
  302. //TULOSTA PAKKA
  303. //Tulostaa pakan siinä järjestyksessä kuin se on
  304. void tulosta_pakka(Tkortti *pakka){
  305. int i;
  306. for (i=0;i<=51;i++){
  307. printf(" %d", i); //Kortin järjestysluku
  308. printf(" "); //
  309. printf(pakka[i].maa); //Tulostaa kortin maa
  310. printf(" ");
  311. printf(pakka[i].arvo); //Tulostaa kortin arvon
  312. printf("\n");
  313. }
  314. }
  315. //RUUDUN TYHJENNYS
  316. void clrscr()
  317. {
  318. COORD coordScreen = { 0, 0 };
  319. DWORD cCharsWritten;
  320. CONSOLE_SCREEN_BUFFER_INFO csbi;
  321. DWORD dwConSize;
  322. HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
  323. GetConsoleScreenBufferInfo(hConsole, &csbi);
  324. dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
  325. FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
  326. GetConsoleScreenBufferInfo(hConsole, &csbi);
  327. FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
  328. SetConsoleCursorPosition(hConsole, coordScreen);
  329. }
Add Comment
Please, Sign In to add comment