#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <map>
using namespace std;

int GetIntVal(string strConvert) {
  int intReturn;
  intReturn = atoi(strConvert.c_str());
  return(intReturn);
}

main() 
{
	string ZwSp;
	int ExpTabelle[20][20]={ /*Stufe 1*/{300,600,900,1350,1800,2700,3600,5400,7200,10800,14400,21600,28800,43200,57600,86400,115200,172800,230400,345600},/*Stufe 2*/{300,600,900,1350,1800,2700,3600,5400,7200,10800,14400,21600,28800,43200,57600,86400,115200,172800,230400,345600},/*Stufe 3*/{300,600,900,1350,1800,2700,3600,5400,7200,10800,14400,21600,28800,43200,57600,86400,115200,172800,230400,345600},/*Stufe 4*/{300,600,800,1200,1600,2400,3200,4800,6400,9600,12800,19200,25600,38400,51200,76800,102400,153600,204800,307200},/*Stufe 5*/{300,500,750,1000,1500,2250,3000,4500,6000,9000,12000,18000,24000,36000,48000,72000,96000,144000,192000,288000},/*Stufe 6*/{300,450,600,900,1200,1800,2700,3600,5400,7200,10800,14400,21600,28800,43200,57600,86400,115200,172800,230400},/*Stufe 7*/{263,350,525,700,1050,1400,2100,3150,4200,6300,8400,12600,16800,25200,33600,50400,67200,100800,134400,201600},/*Stufe 8*/{200,300,400,600,800,1200,1600,2400,3600,4800,7200,9600,14400,19200,28800,38400,57600,76800,115200,153600},/*Stufe 9*/{0,225,338,450,675,900,1350,1800,2700,4050,5400,8100,10800,16200,21600,32400,49200,64800,98400,129600},/*Stufe 10*/{0,0,250,375,500,750,1000,1500,2000,3000,4500,6000,9000,12000,18000,24000,36000,48000,72000,96000},/*Stufe 11*/{0,0,0,275,413,550,825,1100,1650,2200,3300,4950,6600,9900,13200,19800,26400,39600,52800,79200},/*Stufe 12*/{0,0,0,0,300,450,600,900,1200,1800,2400,3600,5400,7200,10800,14400,21600,28800,43200,57600},/*Stufe 13*/{0,0,0,0,0,325,488,650,975,1300,1950,2600,3900,5850,7800,11700,15600,23400,31200,46800},/*Stufe 14*/{0,0,0,0,0,0,350,525,700,1050,1400,2100,2800,4200,6300,8400,12600,16800,25200,33600},/*Stufe 15*/{0,0,0,0,0,0,0,375,563,750,1125,1500,2250,3000,4500,6750,9000,13500,18000,27000},/*Stufe 16*/{0,0,0,0,0,0,0,0,400,600,800,1200,1600,2400,3200,4800,7200,9600,14400,19200},/*Stufe 17*/{0,0,0,0,0,0,0,0,0,425,638,850,1275,1700,2550,3400,5100,7650,10200,15300},/*Stufe 18*/{0,0,0,0,0,0,0,0,0,0,450,675,900,1350,1800,2700,3600,5400,8100,10800},/*Stufe 19*/{0,0,0,0,0,0,0,0,0,0,0,475,713,950,1425,1900,2850,3800,5700,8550},/*Stufe 20*/{0,0,0,0,0,0,0,0,0,0,0,0,500,750,1000,1500,2000,3000,4000,6000} };
	struct complex
	{
		int Spieler;
		int Monster;
		int Aktoren;
	};

	complex Anzahl;
	cout << "Bitte lesen sie vor der Benutzung dieses Progrämmchens die LIESMICH.TXT, da sie ansonsten nichts hinkriegen." << endl;
	cout << "Geben sie bitte die Anzahl der Spieler an.";
	cin >> Anzahl.Spieler;
	cout << endl << "Geben sie bitte die Stufe jedes Spielers an." << endl;
	int Spielerlvl[Anzahl.Spieler];
	for (int a=0; a<Anzahl.Spieler; a++)
	{
		cin >> Spielerlvl[a];
	}
	int Komma = 0;
	int k = 0;
	cout << "Anzahl aller unterschiedlicher bewältigten Kreaturen: ";
	cin >>  Anzahl.Monster;
	cout << endl;
	Neue_Eingabe:
	cout << "Geben sie die Anzahl der Monster mit dem dazugehörigen Herausforderungsgrad an:" << endl;
	int i = 0;
	string Eingabe; //soll String sein
	int Monster[Anzahl.Monster][2]; //Par2: Anzahl - HG, Par1: für jedes Monster
	cout << "Marke vor WhileSchleife"; //Testkomment
	for(i=0; i < Anzahl.Monster; i++) { 	  												//Neue Schleife für neue Eingabe
		cout << "[#" << i+1 << "],[HG]: " << endl;
		cin >> Eingabe; //Eingabe von: 1,1 bis 99..99,20
		cout << "Marke nach einlesen";
		if (Eingabe[1]==*",")
			Komma=1;
		else if (Eingabe[2]==*",")
			Komma=2;
		else Komma=3;
		cout << "Marke nach if zeug";

		if (Komma == 0) {
			cerr << "Komma fehlt!"; 	//Wenn Komma fehlt, diese eingabe wiederholen
			goto Neue_Eingabe;
		}	
			cout << "Marke1.0";
			switch (Komma) {						//Zerlegung der Eingabe in Anzahl und HG
				case 1: Monster[i][0] = int(Eingabe[0]);
					ZwSp="";
					for (int l=2; Eingabe[l]!=*"";l++) {
						ZwSp += Eingabe[l];
					}
					Monster[i][1]=GetIntVal(ZwSp);
					cout << "Marke Switch1"; //Testkomment
					break;
				case 2: Monster[i][0] = int(Eingabe[0]+Eingabe[1]);
					ZwSp="";
					for (int l=3; Eingabe[l]!=*"";l++) {
						ZwSp += Eingabe[l];
					}
					Monster[i][1]=GetIntVal(ZwSp);
					cout << "Marke Switch2"; //Testkomment
					break;
				case 3: Monster[i][0] = int(Eingabe[0]+Eingabe[1]+Eingabe[2]);
					ZwSp="";
					for (int l=4; Eingabe[l]!=*"";l++) {
						ZwSp += Eingabe[l];
					}
					Monster[i][1]=GetIntVal(ZwSp);
					cout << "Marke Switch3"; //Testkomment
					break;
			}//Ende Zerlegung
	cout << "Marke2"; //Testkomment
	}//Ende while-Schleife
	int Summe = 0;
	int n = 0;
	cout << "Marke1"; //Testkomment	
	for (int m=0; m<Anzahl.Spieler; m++) {
		for (n=0; n<Anzahl.Monster; i++) {
			Summe = 0;
			Summe += (Monster[n][0]*ExpTabelle[(Spielerlvl[n]-1)][Monster[n][1]]);
		}
		Summe /= Anzahl.Spieler;
		cout << "Spieler mit LVL " << Spielerlvl[n] << " erhalten " << Summe << " Erfahrungspunkte." << endl;
	}//Ende for-Schleife der ExpBerechnung
return 0;
}

