Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <random>
- #include <time.h>
- #include <string.h>
- using namespace std;
- class spieler{
- private:
- std::vector<int> wuerfel;
- std::vector<int> zur_Seite;
- int Punkte;
- public:
- spieler();
- ~spieler();
- std::vector<int> get_wuerfel();
- std::vector<int> get_zur_Seite();
- int get_Punkte();
- void set_wuerfel(std::vector<int>);
- void set_zur_Seite(std::vector<int>);
- void set_Punkte(int);
- std::vector<int> wurf(int n);
- std::vector<int> Punkterechner(std::vector<int>);
- void printwurf(std::vector<int>);
- int spielzug();
- };
- class spiel{
- private:
- std::vector<spieler> Spieler;
- public:
- spiel(int n);
- ~spiel();
- std::vector<spieler> get_spieler_list();
- spieler get_spieler(int);
- void set_spieler_Punkte(int, int);
- void zehntausend();
- };
- spieler::spieler(){ //const
- wuerfel = {};
- zur_Seite = {};
- Punkte = 0;
- }
- spieler::~spieler(){ //dest
- }
- std::vector<int> spieler::get_zur_Seite(){
- return zur_Seite;
- }
- std::vector<int> spieler::get_wuerfel(){
- return wuerfel;
- }
- int spieler::get_Punkte(){
- return Punkte;
- }
- void spieler::set_wuerfel(std::vector<int> in){
- wuerfel = in;
- }
- void spieler::set_zur_Seite(std::vector<int> in){
- zur_Seite = in;
- }
- void spieler::set_Punkte(int in){
- Punkte += in;
- }
- std::vector<int> spieler::wurf(int n){
- std::vector<int> ausgabe = {};
- for(int i=0; i<n ; i++){
- ausgabe.push_back(rand() % 6 +1);
- }
- return ausgabe;
- }
- void spieler::printwurf(std::vector<int> wurf){
- cout << "[";
- for(int i = 0; i < wurf.size(); i++){
- if(i < (wurf.size()-1)){
- cout << wurf[i] << ",";
- }
- else{
- cout << wurf[i];
- }
- }
- cout << "]";
- }
- std::vector<int> spieler::Punkterechner(std::vector<int> zur_Seite){
- std::vector<int> wa = {0,0,0,0,0,0,0}; //wa=wuerfelanzahl
- std::vector<int> output = {0,0}; //output[0] = punkte, output[1] = anzahl gewerteter Würfel
- 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
- wa[zur_Seite[i]]++;
- }
- if((wa[1]==1) && (wa[2]==1) && (wa[3]==1) && (wa[4]==1) && (wa[5]==1) && (wa[6]==1)){ //straße
- return {3000,6};
- }
- if(zur_Seite.size()==6){ //Drei Paare
- for(int i=1; i<=4; i++){
- for(int j=(i+1); j<=5; j++){
- for(int k=(j+1); k<=6; k++){
- if((wa[i]==2) && (wa[j]==2) && (wa[k]==2)){
- return {500,6};
- }
- }
- }
- }
- }
- for(int i=1; i<wa.size(); i++){
- if(wa[i] == 6){ //Sechserpasch
- if(i == 1){
- return {8000,6};
- }
- else{
- return {(800*i),6};
- }
- }
- if(wa[i] == 5){ //Fünferpasch
- if(i==1){
- output[0]+= 4000;
- output[1]+= 5;
- }
- else{
- output[0]+= (400*i);
- output[1]+= 5;
- }
- wa[i] = 0; //damit der selbe würfel nicht nochmal genutzt wird
- }
- if(wa[i] == 4){ //Viererpasch
- if(i==1){
- output[0]+= 2000;
- output[1]+= 4;
- }
- else{
- output[0]+= (200*i);
- output[1]+= 4;
- }
- wa[i] = 0;
- }
- if(wa[i] == 3){ //Dreierpasch
- if(i==1){
- output[0]+= 1000;
- output[1]+= 3;
- }
- else{
- output[0]+= (100*i);
- output[1]+= 3;
- }
- wa[i] = 0;
- }
- }
- if(wa[1]==1){
- output[0]+= 100;
- output[1]+= 1;
- }
- if(wa[1]==2){
- output[0]+= 200;
- output[1]+= 2;
- }
- if(wa[5]==1){
- output[0]+= 50;
- output[1]+= 1;
- }
- if(wa[5]==2){
- output[0]+= 100;
- output[1]+= 2;
- }
- return output;
- }
- int spieler::spielzug(){
- bool zug_beendet = false;
- int zug_punkte = 0;
- string input="0";
- std::vector<int> help;
- std::vector<int> zurSeite;
- int n = 6;
- while (zug_beendet == false){
- set_wuerfel(wurf(n));
- zurSeite = {};
- input = "0";
- if((n == 1) && ((Punkterechner(get_wuerfel())[0] + zug_punkte) < 350)){
- cout << "Ihre Wuerfel sind: ";
- printwurf(get_wuerfel());
- cout << endl <<"Dieser Zug kann nicht gewertet werden!";
- return 0;
- }
- while(input != "n"){
- cout << "Ihre Wuerfel sind: ";
- printwurf(get_wuerfel());
- cout << endl << "Welchen Wuerfel moechten sie zur Seite legen? ";
- cin >> input;
- if(input == "n"){
- break;
- }
- try {
- if((std::stoi(input) > 0) && (std::stoi(input) < (get_wuerfel().size()+1))){
- cout << "Sie haben " << get_wuerfel()[std::stoi(input)-1] << " zur Seite gelegt!" << endl;
- help = get_wuerfel();
- zurSeite.push_back(help[std::stoi(input)-1]);
- help.erase(help.begin() + (std::stoi(input)-1));
- set_wuerfel(help);
- }
- } catch (const std::invalid_argument) {
- cout << "Bitte eine Zahl oder n zum abbrechen eingeben!";
- }
- }
- cout << "Es wurden ";
- printwurf(zurSeite);
- cout << " zur Seite gelegt!" << endl;
- if((zurSeite.size() != Punkterechner(zurSeite)[1]) || (zurSeite.size() == 0)){
- 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;
- zug_beendet = true;
- break;
- zurSeite = {};
- }
- else{
- zug_punkte += Punkterechner(zurSeite)[0];
- cout << "Dieser wurf ist " << Punkterechner(zurSeite)[0] << " Punkte wert, ihre Punktzahl fuer diesen Spielzug ist " << zug_punkte << "." << endl;
- help = {1,1,1};
- if((zug_punkte >= 350) && (zurSeite != help)){
- input = "z";
- while(input != "n"){
- cout << "Moechten sie ihren Zug beenden? (y/n): ";
- cin >> input;
- if(input == "y"){
- return zug_punkte;
- }
- }
- }
- n -= zurSeite.size();
- if(zurSeite == help){
- cout << "Sonderregel!" << endl;
- }
- cout << "Es wird neu gewuerfelt..." << endl;
- if((n == 0) && (Punkterechner(zurSeite)[0] > 0)){
- n = 6;
- }
- }
- }
- return 0;
- }
- spiel::spiel(int n){ //const einer Liste der Spieler
- for(int i = 0; i < n; i++){
- Spieler.push_back(spieler());
- }
- }
- spiel::~spiel(){ //dest
- }
- spieler spiel::get_spieler(int n){
- return Spieler[n];
- }
- std::vector<spieler> spiel::get_spieler_list(){
- return Spieler;
- }
- void spiel::set_spieler_Punkte(int n, int pkt){
- Spieler[n].set_Punkte(pkt);
- }
- void spiel::zehntausend(){
- bool wincon = false;
- std::vector<spieler> spieler_list = get_spieler_list();
- while(wincon == false){
- for(int i = 0; i < spieler_list.size(); i++){
- cout << "Spieler " << i << " ist am Zug: " << endl;
- set_spieler_Punkte(i ,spieler_list[i].spielzug());
- cout << "Spieler " << i << " hat zur Zeit " << get_spieler(i).get_Punkte() << " Punkte" << endl << endl;
- if(get_spieler(i).get_Punkte() >= 10000){
- cout << "Spieler " << i << " hat gewonnen!" << endl;
- wincon = true;
- break;
- }
- }
- }
- cout << "Endstand: " << endl;
- for(int i = 0; i < spieler_list.size(); i++){
- cout << "Spieler " << i << " mit " << get_spieler(i).get_Punkte() << " Punkten!" << endl;
- }
- }
- int main(){
- string input;
- int input_2;
- srand(time(NULL));
- cout << "Willkommen bei 10000!" << endl << "Wie viele Spieler sollen teilnehmen? ";
- cin >> input;
- try {
- input_2 = std::stoi(input);
- cout << "Beim zur Seite legen nutzen sie die zahlen 1-6, oder n zum abbrechen" << endl;
- spiel test(input_2);
- test.zehntausend();
- } catch (const std::invalid_argument) {
- cout << "Naechstes mal eine Zahl eingeben :)" << endl;
- exit;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement