Advertisement
Anda69

Untitled

Mar 7th, 2020
213
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <random>
  4. #include <time.h>
  5. #include <string.h>
  6.  
  7. using namespace std;
  8.  
  9. class spieler{
  10. private:
  11.     std::vector<int> wuerfel;
  12.     std::vector<int> zur_Seite;
  13.     int Punkte;
  14. public:
  15.     spieler();
  16.     ~spieler();
  17.     std::vector<int> get_wuerfel();
  18.     std::vector<int> get_zur_Seite();
  19.     int get_Punkte();
  20.     void set_wuerfel(std::vector<int>);
  21.     void set_zur_Seite(std::vector<int>);
  22.     void set_Punkte(int);
  23.  
  24.     std::vector<int> wurf(int n);
  25.     std::vector<int> Punkterechner(std::vector<int>);
  26.     void printwurf(std::vector<int>);
  27.     int spielzug();
  28. };
  29.  
  30. class spiel{
  31. private:
  32.     std::vector<spieler> Spieler;
  33. public:
  34.     spiel(int n);
  35.     ~spiel();
  36.     std::vector<spieler> get_spieler_list();
  37.     spieler get_spieler(int);
  38.     void set_spieler_Punkte(int, int);
  39.  
  40.     void zehntausend();
  41. };
  42.  
  43. spieler::spieler(){                     //const
  44.     wuerfel = {};
  45.     zur_Seite = {};
  46.     Punkte = 0;
  47. }
  48. spieler::~spieler(){                    //dest
  49.  
  50. }
  51. std::vector<int> spieler::get_zur_Seite(){
  52.     return zur_Seite;
  53. }
  54. std::vector<int> spieler::get_wuerfel(){
  55.     return wuerfel;
  56. }
  57. int spieler::get_Punkte(){
  58.     return Punkte;
  59. }
  60. void spieler::set_wuerfel(std::vector<int> in){
  61.     wuerfel = in;
  62. }
  63. void spieler::set_zur_Seite(std::vector<int> in){
  64.     zur_Seite = in;
  65. }
  66. void spieler::set_Punkte(int in){
  67.     Punkte += in;
  68. }
  69.  
  70. std::vector<int> spieler::wurf(int n){
  71.     std::vector<int> ausgabe = {};
  72.     for(int i=0; i<n ; i++){
  73.         ausgabe.push_back(rand() % 6 +1);
  74.     }
  75.     return ausgabe;
  76. }
  77.  
  78. void spieler::printwurf(std::vector<int> wurf){
  79.     cout << "[";
  80.     for(int i = 0; i < wurf.size(); i++){
  81.         if(i < (wurf.size()-1)){
  82.             cout << wurf[i] << ",";
  83.         }
  84.         else{
  85.             cout << wurf[i];
  86.         }
  87.  
  88.     }
  89.     cout << "]";
  90. }
  91.  
  92. std::vector<int> spieler::Punkterechner(std::vector<int> zur_Seite){
  93.     std::vector<int> wa = {0,0,0,0,0,0,0};                  //wa=wuerfelanzahl
  94.     std::vector<int> output = {0,0};                        //output[0] = punkte, output[1] = anzahl gewerteter Würfel
  95.     for(int i=0; i<zur_Seite.size(); i++){                  //füllt den WA vector, wenn man zb eine 1 würfelt dann ist wa[1] = 1 etc
  96.         wa[zur_Seite[i]]++;
  97.     }
  98.     if((wa[1]==1) && (wa[2]==1) && (wa[3]==1) && (wa[4]==1) && (wa[5]==1) && (wa[6]==1)){      //straße
  99.         return {3000,6};
  100.     }
  101.     if(zur_Seite.size()==6){                                       //Drei Paare
  102.         for(int i=1; i<=4; i++){
  103.             for(int j=(i+1); j<=5; j++){
  104.                 for(int k=(j+1); k<=6; k++){
  105.                     if((wa[i]==2) && (wa[j]==2) && (wa[k]==2)){
  106.                         return {500,6};
  107.                     }
  108.                 }
  109.             }
  110.         }
  111.  
  112.     }
  113.     for(int i=1; i<wa.size(); i++){
  114.         if(wa[i] == 6){                         //Sechserpasch
  115.             if(i == 1){
  116.                 return {8000,6};
  117.             }
  118.             else{
  119.                 return {(800*i),6};
  120.             }
  121.         }
  122.         if(wa[i] == 5){                        //Fünferpasch
  123.             if(i==1){
  124.                 output[0]+= 4000;
  125.                 output[1]+= 5;
  126.             }
  127.             else{
  128.                 output[0]+= (400*i);
  129.                 output[1]+= 5;
  130.             }
  131.             wa[i] = 0;                         //damit der selbe würfel nicht nochmal genutzt wird
  132.         }
  133.         if(wa[i] == 4){                         //Viererpasch
  134.             if(i==1){
  135.                 output[0]+= 2000;
  136.                 output[1]+= 4;
  137.             }
  138.             else{
  139.                 output[0]+= (200*i);
  140.                 output[1]+= 4;
  141.             }
  142.             wa[i] = 0;
  143.         }
  144.         if(wa[i] == 3){                         //Dreierpasch
  145.             if(i==1){
  146.                 output[0]+= 1000;
  147.                 output[1]+= 3;
  148.             }
  149.             else{
  150.                 output[0]+= (100*i);
  151.                 output[1]+= 3;
  152.             }
  153.             wa[i] = 0;
  154.         }
  155.     }
  156.     if(wa[1]==1){
  157.         output[0]+= 100;
  158.         output[1]+= 1;
  159.     }
  160.     if(wa[1]==2){
  161.         output[0]+= 200;
  162.         output[1]+= 2;
  163.     }
  164.     if(wa[5]==1){
  165.         output[0]+= 50;
  166.         output[1]+= 1;
  167.     }
  168.     if(wa[5]==2){
  169.         output[0]+= 100;
  170.         output[1]+= 2;
  171.     }
  172.     return output;
  173. }
  174.  
  175. int spieler::spielzug(){
  176.     bool zug_beendet = false;
  177.     int zug_punkte = 0;
  178.     string input="0";
  179.     std::vector<int> help;
  180.     std::vector<int> zurSeite;
  181.     int n = 6;
  182.  
  183.     while (zug_beendet == false){
  184.         set_wuerfel(wurf(n));
  185.         zurSeite = {};
  186.         input = "0";
  187.         if((n == 1) && ((Punkterechner(get_wuerfel())[0] + zug_punkte) < 350)){
  188.             cout  << "Ihre Wuerfel sind: ";
  189.             printwurf(get_wuerfel());
  190.             cout << endl <<"Dieser Zug kann nicht gewertet werden!";
  191.             return 0;
  192.         }
  193.         while(input != "n"){
  194.             cout  << "Ihre Wuerfel sind: ";
  195.             printwurf(get_wuerfel());
  196.  
  197.             cout << endl << "Welchen Wuerfel moechten sie zur Seite legen? ";
  198.             cin >> input;
  199.             if(input == "n"){
  200.                 break;
  201.             }
  202.             try {
  203.                 if((std::stoi(input) > 0) && (std::stoi(input) < (get_wuerfel().size()+1))){
  204.                     cout << "Sie haben " << get_wuerfel()[std::stoi(input)-1] << " zur Seite gelegt!" << endl;
  205.                     help = get_wuerfel();
  206.                     zurSeite.push_back(help[std::stoi(input)-1]);
  207.                     help.erase(help.begin() + (std::stoi(input)-1));
  208.                     set_wuerfel(help);
  209.                 }
  210.             } catch (const std::invalid_argument) {
  211.                 cout << "Bitte eine Zahl oder n zum abbrechen eingeben!";
  212.             }
  213.         }
  214.         cout << "Es wurden ";
  215.         printwurf(zurSeite);
  216.         cout << " zur Seite gelegt!" << endl;
  217.         if((zurSeite.size() != Punkterechner(zurSeite)[1]) || (zurSeite.size() == 0)){
  218.             cout << "Mindestens einer der zur Seite gelegten Wuerfel ist nicht wertbar, oder es wurden keine Wuerfel zur Seite gelegt, der Zug ist somit ungueltig." << endl;
  219.             zug_beendet = true;
  220.             break;
  221.             zurSeite = {};
  222.         }
  223.         else{
  224.             zug_punkte += Punkterechner(zurSeite)[0];
  225.             cout << "Dieser wurf ist " << Punkterechner(zurSeite)[0] << " Punkte wert, ihre Punktzahl fuer diesen Spielzug ist " << zug_punkte << "." << endl;
  226.             help = {1,1,1};
  227.             if((zug_punkte >= 350) && (zurSeite != help)){
  228.                 input = "z";
  229.                 while(input != "n"){
  230.                     cout << "Moechten sie ihren Zug beenden? (y/n): ";
  231.                     cin >> input;
  232.                     if(input == "y"){
  233.                         return zug_punkte;
  234.                     }
  235.                 }
  236.  
  237.             }
  238.             n -= zurSeite.size();
  239.             if(zurSeite == help){
  240.                 cout << "Sonderregel!" << endl;
  241.             }
  242.             cout << "Es wird neu gewuerfelt..." << endl;
  243.             if((n == 0) && (Punkterechner(zurSeite)[0] > 0)){
  244.                 n = 6;
  245.             }
  246.         }
  247.     }
  248.     return 0;
  249. }
  250.  
  251. spiel::spiel(int n){                        //const einer Liste der Spieler
  252.     for(int i = 0; i < n; i++){
  253.         Spieler.push_back(spieler());
  254.     }
  255. }
  256. spiel::~spiel(){                            //dest
  257.  
  258. }
  259. spieler spiel::get_spieler(int n){
  260.     return Spieler[n];
  261. }
  262. std::vector<spieler> spiel::get_spieler_list(){
  263.     return Spieler;
  264. }
  265. void spiel::set_spieler_Punkte(int n, int pkt){
  266.     Spieler[n].set_Punkte(pkt);
  267. }
  268.  
  269. void spiel::zehntausend(){
  270.     bool wincon = false;
  271.  
  272.     std::vector<spieler> spieler_list = get_spieler_list();
  273.     while(wincon == false){
  274.         for(int i = 0; i < spieler_list.size(); i++){
  275.             cout << "Spieler " << i << " ist am Zug: " << endl;
  276.             set_spieler_Punkte(i ,spieler_list[i].spielzug());
  277.             cout << "Spieler " << i << " hat zur Zeit " << get_spieler(i).get_Punkte() << " Punkte" << endl << endl;
  278.             if(get_spieler(i).get_Punkte() >= 10000){
  279.                 cout << "Spieler " << i << " hat gewonnen!" << endl;
  280.                 wincon = true;
  281.                 break;
  282.             }
  283.         }
  284.     }
  285.     cout << "Endstand: " << endl;
  286.     for(int i = 0; i < spieler_list.size(); i++){
  287.         cout << "Spieler " << i << " mit " << get_spieler(i).get_Punkte() << " Punkten!" << endl;
  288.     }
  289. }
  290.  
  291. int main(){
  292.     string input;
  293.     int input_2;
  294.     srand(time(NULL));
  295.     cout << "Willkommen bei 10000!" << endl << "Wie viele Spieler sollen teilnehmen? ";
  296.     cin >> input;
  297.     try {
  298.         input_2 = std::stoi(input);
  299.         cout << "Beim zur Seite legen nutzen sie die zahlen 1-6, oder n zum abbrechen" << endl;
  300.         spiel test(input_2);
  301.         test.zehntausend();
  302.     } catch (const std::invalid_argument) {
  303.         cout << "Naechstes mal eine Zahl eingeben :)" << endl;
  304.         exit;
  305.     }
  306.  
  307. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement