Advertisement
Guest User

Untitled

a guest
Mar 8th, 2021
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 11.72 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define N_KARTEN 52
  6.  
  7. struct zaehler{
  8.   int deck_count;
  9.   int erster_zug;
  10.   int COM1_win_dez;
  11.   int COM2_win_dez;
  12.   int COM1_los_dez;
  13.   int COM2_los_dez;
  14.   int stand;
  15.   int sw_end;
  16.   int sw_nr;
  17.   int werte_add_1;
  18.   int werte_add_2;
  19. } counter={0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0};
  20.  
  21. typedef struct{
  22.   char name[10];
  23.   int farbe;
  24.   int wert;
  25. } karte;
  26.  
  27. char f2s[][10]={"Karo","Herz","Piek","Kreuz"};
  28.  
  29. void anmeldung(int *wdh, int *rsk1, int *rsk2, int *spl_anz);
  30. void swap(karte *a, karte *b);
  31. void print_karten(karte blatt[]);
  32. void spiel(karte blatt[], struct zaehler *Zaehler, int wdh, int anz, int rsk1, int rsk2);
  33.   void erste_karten(karte blatt[], struct zaehler *Zaehler);
  34.   void sw_erster_zug(karte blatt[], struct zaehler *Zaehler);
  35.     void akt_COM1_erster(karte blatt[], struct zaehler *Zaehler);
  36.     void akt_COM2_erster(karte blatt[], struct zaehler *Zaehler);
  37.     void akt_COM1(karte blatt[], struct zaehler *Zaehler);
  38.     void akt_COM2(karte blatt[], struct zaehler *Zaehler);
  39.     void COM1_w(struct zaehler *Zaehler);
  40.     void COM2_w(struct zaehler *Zaehler);
  41.     void deck_count_check_erste_karten(karte blatt[], struct zaehler *Zaehler);
  42.     void deck_count_check_akt(karte blatt[], struct zaehler *Zaehler);
  43.     void deck_mischen(karte blatt[], struct zaehler *Zaehler);
  44.       void mischen(karte blatt[]);
  45. void auswertung(int wdh, int rsk1, int rsk2, struct zaehler *Zaehler);
  46.  
  47. int main(){
  48.   int spl_wdh;
  49.   int spl_anz;
  50.   int spl_rsk1;
  51.   int spl_rsk2;
  52.   anmeldung(&spl_wdh, &spl_rsk1, &spl_rsk2, &spl_anz);
  53.   karte blatt[N_KARTEN]={
  54.     {"zwei",0,2},{"drei",0,3},{"vier",0,4},{"fuenf",0,5},{"sechs",0,6},{"sieben",0,7},{"acht",0,8},
  55.     {"neun",0,9},{"zehn",0,10},{"bube",0,10},{"dame",0,10},{"koenig",0,10},{"ass",0,11},
  56.     {"zwei",1,2},{"drei",1,3},{"vier",1,4},{"fuenf",1,5},{"sechs",1,6},{"sieben",1,7},{"acht",1,8},
  57.     {"neun",1,9},{"zehn",1,10},{"bube",1,10},{"dame",1,10},{"koenig",1,10},{"ass",1,11},
  58.     {"zwei",2,2},{"drei",2,3},{"vier",2,4},{"fuenf",2,5},{"sechs",2,6},{"sieben",2,7},{"acht",2,8},
  59.     {"neun",2,9},{"zehn",2,10},{"bube",2,10},{"dame",2,10},{"koenig",2,10},{"ass",2,11},
  60.     {"zwei",3,2},{"drei",3,3},{"vier",3,4},{"fuenf",3,5},{"sechs",3,6},{"sieben",3,7},{"acht",3,8},
  61.     {"neun",3,9},{"zehn",3,10},{"bube",3,10},{"dame",3,10},{"koenig",3,10},{"ass",3,11}};
  62.   print_karten(blatt);
  63.   srand(time(NULL));
  64.   mischen(blatt);
  65.   printf("===================================\n");
  66.   printf("Weiter mit <return>\n");
  67.   getchar();
  68.   print_karten(blatt);
  69.   spiel(blatt, &counter, spl_wdh, spl_rsk1, spl_rsk2, spl_anz);
  70.   auswertung(spl_wdh, spl_rsk1, spl_rsk2, &counter);
  71. }
  72.  
  73. void anmeldung(int *wdh, int *rsk1, int *rsk2, int *anz) {
  74.   printf("Willkommen bei 17 und 4. Dies ist der Demomodus wo ein COM gegen einen anderen COM spielt.\n");
  75.   printf("Es gibt 2 Aktionen die Sie wählen können:\n");
  76.   printf("Wie viele Spiele wollen Sie spielen: ");
  77.   scanf("%d", wdh);
  78.   printf("Die COM's können in verschiedenen Risikobereitschaften ihre Züge wählen: 1: ganz ängstlich\n");
  79.   printf("                                                                            2: etwas ängstlich\n");
  80.   printf("                                                                            3: normal\n");
  81.   printf("                                                                            4: etwas mutiger\n");
  82.   printf("                                                                            5: sehr mutig\n");
  83.   printf("Risikobereitschaft COM1: ");
  84.   scanf("%d", rsk1);
  85.   printf("Risikobereitschaft COM2: ");
  86.   scanf("%d", rsk2);
  87.   printf("Sollen alle Spielzüge gezeigt werden: 1 - Ja\n");
  88.   printf("                                      2 - Nein\n");
  89.   scanf("%d", anz);
  90. }
  91.  
  92. void print_karten(karte blatt[]){
  93.     int i;
  94.     for(i=0;i<N_KARTEN;i++){
  95.       printf("%-10s %-10s Wert: %2d\n",f2s[blatt[i].farbe],blatt[i].name,blatt[i].wert);
  96.     }
  97. }
  98.  
  99. void swap(karte *a, karte *b){
  100.   karte tmp;
  101.   tmp=*a;
  102.   *a=*b;
  103.   *b=tmp;
  104. }
  105.  
  106.  
  107. void mischen(karte blatt[]){
  108.   int i;
  109.   int a,b;
  110.   for(i=0;i<N_KARTEN*4;i++){
  111.     a=rand()%N_KARTEN;
  112.     b=rand()%N_KARTEN;
  113.     swap(&blatt[a],&blatt[b]);
  114.   }
  115. }
  116.  
  117. void spiel(karte blatt[], struct zaehler *Zaehler, int wdh, int anz, int rsk1, int rsk2){
  118.   for(int i=0; i<wdh;i++){
  119.     erste_karten(blatt, &counter);
  120.     sw_erster_zug(blatt, &counter);
  121.   }
  122. }
  123.  
  124. void erste_karten(karte blatt[], struct zaehler *Zaehler){
  125.   deck_count_check_erste_karten(blatt, &counter);
  126.   printf("---------------------------------------------------------------------------------------\n");
  127.   printf("%-10s %-10s Wert: %2d",f2s[blatt[(*Zaehler).deck_count].farbe],blatt[(*Zaehler).deck_count].name,blatt[(*Zaehler).deck_count].wert);
  128.   (*Zaehler).werte_add_1=blatt[(*Zaehler).deck_count].wert;
  129.   counter.deck_count++;
  130.   printf("                          %-10s %-10s Wert: %2d\n",f2s[blatt[(*Zaehler).deck_count].farbe],blatt[(*Zaehler).deck_count].name,blatt[(*Zaehler).deck_count].wert);
  131.   counter.werte_add_2=blatt[(*Zaehler).deck_count].wert;
  132.   counter.deck_count++;
  133.   printf("%-10s %-10s Wert: %2d",f2s[blatt[(*Zaehler).deck_count].farbe],blatt[(*Zaehler).deck_count].name,blatt[(*Zaehler).deck_count].wert);
  134.   if(((*Zaehler).werte_add_1==11) && blatt[(*Zaehler).deck_count].wert==11){
  135.     counter.werte_add_1=21;
  136.   }
  137.   else{
  138.   counter.werte_add_1=counter.werte_add_1+blatt[(*Zaehler).deck_count].wert;
  139.   }
  140.   counter.deck_count++;
  141.   printf("                          %-10s %-10s Wert: %2d\n",f2s[blatt[(*Zaehler).deck_count].farbe],blatt[(*Zaehler).deck_count].name,blatt[(*Zaehler).deck_count].wert);
  142.   if(((*Zaehler).werte_add_2==11) && (blatt[(*Zaehler).deck_count].wert==11)){
  143.     counter.werte_add_2=21;
  144.   }
  145.   else{
  146.   counter.werte_add_2=counter.werte_add_2+blatt[(*Zaehler).deck_count].wert;
  147.   }
  148.   counter.deck_count++;
  149.   printf("%30d", counter.werte_add_1);
  150.   printf("                          %30d\n", counter.werte_add_2);
  151.   printf("---------------------------------------------------------------------------------------\n");
  152. }
  153.  
  154. void sw_erster_zug(karte blatt[], struct zaehler *Zaehler){
  155.     switch((*Zaehler).erster_zug){
  156.         case 1:
  157.           akt_COM1_erster(blatt, &counter);
  158.           break;
  159.         case 2:
  160.           akt_COM2_erster(blatt, &counter);
  161.           break;
  162.     }
  163. }
  164.  
  165. void akt_COM1_erster(karte blatt[], struct zaehler *Zaehler){
  166.   while((*Zaehler).sw_end==0){
  167.     switch((*Zaehler).sw_nr){
  168.       case 1:
  169.         akt_COM1(blatt, &counter);
  170.         break;
  171.       case 2:
  172.         akt_COM2(blatt, &counter);
  173.         break;
  174.       case 3:
  175.         COM1_w(&counter);
  176.         break;
  177.       case 4:
  178.         COM2_w(&counter);
  179.         break;
  180.     }
  181.   }
  182.   counter.werte_add_1=0;
  183.   counter.werte_add_2=0;
  184.   counter.sw_nr=1;
  185.   counter.sw_end=0;
  186.   counter.stand=0;
  187.   counter.erster_zug=2;
  188. }
  189.  
  190. void akt_COM2_erster(karte blatt[], struct zaehler *Zaehler){
  191.   while((*Zaehler).sw_end==0){
  192.     switch((*Zaehler).sw_nr){
  193.       case 1:
  194.         akt_COM2(blatt, &counter);
  195.         break;
  196.       case 2:
  197.         akt_COM1(blatt, &counter);
  198.         break;
  199.       case 3:
  200.         COM1_w(&counter);
  201.         break;
  202.       case 4:
  203.         COM2_w(&counter);
  204.         break;
  205.     }
  206.   }
  207.   counter.werte_add_1=0;
  208.   counter.werte_add_2=0;
  209.   counter.sw_nr=1;
  210.   counter.sw_end=0;
  211.   counter.stand=0;
  212.   counter.erster_zug=1;
  213. }
  214.  
  215. void akt_COM1(karte blatt[], struct zaehler *Zaehler){
  216.   deck_count_check_akt(blatt, &counter);
  217.   if(((((*Zaehler).werte_add_1<21) || ((*Zaehler).werte_add_1==21)) && (((*Zaehler).stand==2) || ((*Zaehler).stand==0))) || ((((*Zaehler).werte_add_1)<((*Zaehler).werte_add_2)) && ((*Zaehler).stand==2))){
  218.     if((((*Zaehler).werte_add_1<10) || ((*Zaehler).werte_add_1<=(*Zaehler).werte_add_2))){
  219.       printf("%-10s %-10s Wert: %2d\n",f2s[blatt[(*Zaehler).deck_count].farbe],blatt[(*Zaehler).deck_count].name,blatt[(*Zaehler).deck_count].wert);
  220.       counter.werte_add_1=counter.werte_add_1+blatt[(*Zaehler).deck_count].wert;
  221.       counter.deck_count++;
  222.       printf("%30d\n", counter.werte_add_1);
  223.     }
  224.     else{
  225.       counter.stand=1;
  226.     }
  227.     counter.sw_nr=2;
  228.     if((counter.werte_add_1)==21){
  229.       counter.sw_nr=3;
  230.     }
  231.     if(counter.werte_add_1>21){
  232.       counter.sw_nr=4;
  233.     }
  234.   }
  235.   else{
  236.     if(((*Zaehler).stand==1) && (((*Zaehler).werte_add_1)<((*Zaehler).werte_add_2))){
  237.       counter.sw_nr=4;
  238.     }
  239.     if(((*Zaehler).stand==1) && (((*Zaehler).werte_add_1)>=((*Zaehler).werte_add_2))){
  240.       if((*Zaehler).erster_zug==1){
  241.         counter.sw_nr=2;
  242.       }
  243.       else{
  244.         counter.sw_nr=1;
  245.       }
  246.     }
  247.   }
  248. }
  249.  
  250. void akt_COM2(karte blatt[], struct zaehler *Zaehler){
  251.   deck_count_check_akt(blatt, &counter);
  252.   if(((((*Zaehler).werte_add_2<21) || ((*Zaehler).werte_add_2==21)) && (((*Zaehler).stand==1) || ((*Zaehler).stand==0))) || ((((*Zaehler).werte_add_2)<((*Zaehler).werte_add_1)) && ((*Zaehler).stand==1))){
  253.     if((((*Zaehler).werte_add_2<10) || ((*Zaehler).werte_add_2<=(*Zaehler).werte_add_1))){
  254.       printf("                                                        %-10s %-10s Wert: %2d\n",f2s[blatt[(*Zaehler).deck_count].farbe],blatt[(*Zaehler).deck_count].name,blatt[(*Zaehler).deck_count].wert);
  255.       counter.werte_add_2=counter.werte_add_2+blatt[(*Zaehler).deck_count].wert;
  256.       counter.deck_count++;
  257.       printf("                                                        %30d\n", counter.werte_add_2);
  258.     }
  259.     else{
  260.       counter.stand=2;
  261.     }
  262.     counter.sw_nr=1;
  263.     if(counter.werte_add_2==21){
  264.       counter.sw_nr=4;
  265.     }
  266.     if(counter.werte_add_2>21){
  267.       counter.sw_nr=3;
  268.     }
  269.   }
  270.   else{
  271.     if(((*Zaehler).stand==2) && ((counter.werte_add_2)<((*Zaehler).werte_add_1))){
  272.       counter.sw_nr=3;
  273.     }
  274.     if(((*Zaehler).stand==2) && (((*Zaehler).werte_add_2)>=((*Zaehler).werte_add_1))){
  275.       if((*Zaehler).erster_zug==1){
  276.         counter.sw_nr=1;
  277.       }
  278.       else{
  279.         counter.sw_nr=2;
  280.       }
  281.     }
  282.   }
  283. }
  284.  
  285. void COM1_w(struct zaehler *Zaehler){
  286.   counter.COM1_win_dez++;
  287.   counter.COM2_los_dez++;
  288.   printf("COM1 hat gewonnen  *******************************************************************\n");
  289.   counter.sw_end=1;
  290. }
  291.  
  292. void COM2_w(struct zaehler *Zaehler){
  293.   counter.COM2_win_dez++;
  294.   counter.COM1_los_dez++;
  295.   printf("*******************************************************************  COM2 hat gewonnen\n");
  296.   counter.sw_end=1;
  297. }
  298.  
  299. void deck_count_check_erste_karten(karte blatt[], struct zaehler *Zaehler){
  300.   if((*Zaehler).deck_count>47){
  301.     deck_mischen(blatt, &counter);
  302.     counter.deck_count=0;
  303.   }
  304. }
  305.  
  306. void deck_count_check_akt(karte blatt[], struct zaehler *Zaehler){
  307.   if ((*Zaehler).deck_count==51){
  308.     deck_mischen(blatt, &counter);
  309.     counter.deck_count=0;
  310.   }
  311. }
  312.  
  313. void deck_mischen(karte blatt[], struct zaehler *Zaehler){
  314.   mischen(blatt);
  315.   printf("===================================\n");
  316.   print_karten(blatt);
  317.   printf("===================================\n");
  318. }
  319.  
  320. void auswertung(int wdh, int rsk1, int rsk2, struct zaehler *Zaehler){
  321.  
  322.   printf("______________________________________________________________________________________________\n");
  323.   printf("Spiele: %d     || Gewonnen (dez) || Verloren (dez) ||\n", wdh);
  324.   printf("______________________________________________________________________________________________\n");
  325.   printf("COM1 (Risiko: %d) ||      %4d      ||      %4d      ||\n", rsk1, (*Zaehler).COM1_win_dez, (*Zaehler).COM1_los_dez);
  326.   printf("______________________________________________________________________________________________\n");
  327.   printf("COM2 (Risiko: %d) ||      %4d      ||      %4d      ||\n", rsk2, (*Zaehler).COM2_win_dez, (*Zaehler).COM2_los_dez);
  328.   printf("______________________________________________________________________________________________\n");
  329. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement