/*
 Autor:         Vogelsang
 Datum:         28.11.2003
 Dateiname:     Monopoly.c

 Kurzbeschreibung: Probepraktikumspruefung vom 11.1.2000:
						 Monopoly-Wuerfel
						 Aufgabenblatt: prp_pa.doc

 Aenderungen:
  Name        Datum     Kurzbeschreibung
------------------------------------------------------------------------------
	VGL		28.11.03	Angepasst auf MSVC 6.0 statt clrscr() -> fflush(stdin); system("cls");
	VGL		2.12.04		Namensstringvergleich eingefügt
*/

#include <time.h>	/* Bibliotheken einbinden */
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>


short wurf(void);	/* Prototypenvereinbarung: wurf */

int main(void)  /* Hauptprogramm MSVC-Version */
{
unsigned char Anzahl_Spieler;
char Spieler [6] [12] = {0};
	/* Spieler [..] [10] = 0x0 (Stringende fuer %s), Spieler [..] [11] = Anzahl der Runden im Gefaengnis */
char i, j, dran, pasch = 0, in ='\0';
short ok, strok = 1, w1, w2;
long ticks;	/* Variable fuer Zufallsgenerator */
srand (time(&ticks) % 37);
fflush ( stdin ) ;
system ("cls") ;    /* Bildschirm loeschen */

printf (" Das Spiel wuerfelt nach Monopoly-Regeln.\n\n"
		  " Es gibt jeweils den naechsten Spieler an und wuerfelt.\n\n"
		  " Jeder Wurf wird mit einer beliebigen Taste quittiert.\n\n"
		  " Die Tasten #, f bzw. F haben Sonderfunktionen:\n\n"
		  " Nach einem Pasch(beide Wuerfel haben dieselbe Punktzahl)\n"
		  " darf derselbe Spieler noch einmal wuerfeln.\n\n"
		  " Wuerfelt derselbe Spieler 3 mal hintereinander Pasch,\n"
		  " so muss er im Gefaengnis 3 Runden aussetzen.\n\n"
		  " Das Programm ueberwacht die Dauer des Aussetzens.\n\n"
		  " Kauft sich der Spieler aus dem Gefaengnis frei, so wird das\n"
		  " bei einer Quittierung mit der Taste f bzw. F beruecksichtigt.\n\n"
		  " # beendet das Spiel.\n\n\n");
do
	{
 	printf(" Wie viele Spieler nehmen am Spiel teil? 1 < Anzahl_Spieler < 6: ");
	fflush(stdin);
	ok = scanf("%u",&Anzahl_Spieler);
	}
while (!ok || Anzahl_Spieler < 2  || Anzahl_Spieler > 6);

printf ("\n Geben Sie die Spieler in der richtigen Reihenfolge der Zuege an!");
for (i=0; i <= Anzahl_Spieler-1; i++)
	 {
	 printf("\n Wie heisst der %1u. Spieler? (maximal 10 Zeichen) \n",i+1);
	 fflush(stdin);
	 scanf("%10s", &Spieler[i]);
	 j=i;
	
	 while ( j > 0)   /* mit strcmp (..) in string.h auf gleiche Spielernamen ueberpruefen */
	 {
		strok = strcmp ( Spieler[--j], Spieler[i]) ;
		if ( strok == 0 )
		{
			printf ("\n Gleiche Spielernamen sind nicht erlaubt!\n") ;
			i--;
			break;
		}
	 }
	if (strok == 0) continue ;

	 printf("\n Der %1u. Spieler heisst: %s\n",i+1, Spieler[i]);

	 }

dran = rand()%Anzahl_Spieler;
printf ("\n %s beginnt!\n\n"
        " o.k.? (beliebige Taste / #=Programmende):",Spieler[dran]);
fflush(stdin);
scanf("%c",&in);

while (in != '#')
	{
	if (!Spieler [dran] [11]) /* enthaelt Anzahl der Absitzrunden */
	  {

	  for ( pasch =0; pasch < 3 && (in != '#'); pasch++ )
			{ /* Pasch-Auswertung */
			w1 = wurf();

			w2 = wurf();

/*			w2 = w1;  /* +++  Nur zu Testzwecken +++  */

			printf ("\nDie Summe der Punkte betraegt: %u\n", w1+w2+2);
			if (w1!=w2)	break;
			if (pasch == 2)
				{
				printf("3. Pasch!: %s muss fuer 3 Runden ins Gefaengnis\n"
						" Freikaufen ? (f,F,j,J / andere Taste):", Spieler[dran]);
				fflush(stdin);
				scanf("%c",&in);
				if (in != 'f' && in != 'F' && in != 'j' && in != 'J') Spieler [dran] [11] = pasch+1; /* Gefaengnis merken */
				break;
				}

			printf("%1u. Pasch!: %s ist noch einmal am Zug!\n\n"
				    "o.k.? (beliebige Taste / #=Programmende):", pasch+1, Spieler[dran]);
			fflush(stdin);
			scanf("%c",&in);
			if (in == '#') break;
			}

	  }
	if (in == '#') break;
	printf("\n naechster Zug? (beliebige Taste / #=Programmende):");
	fflush(stdin);
	scanf("%c",&in);
	if (in == '#') break;
		fflush ( stdin ) ;
		system ("cls") ;    /* Bildschirm loeschen */

		dran = ++dran % Anzahl_Spieler; /* naechster Spieler */
		if (Spieler[dran] [11] ) /* 1 Runde weniger absitzen */
			{
			Spieler[dran] [11]--;
			if ( Spieler [dran] [11] )
				printf("%s sitzt noch fuer %1u Runde(n) im Gefaengnis\n"
					,Spieler[dran], Spieler[dran][11]);
			else
			printf("%s kommt aus dem im Gefaengnis frei.\n"
					,Spieler[dran]);
			}

		else
	printf("\n%s ist am Zug!\n",Spieler[dran]);
	}
printf("\n\n\n           PROGRAMMENDE!\n\n");
return 0;
}


short wurf(void)
{
char play, wuerfel [6] [6] [12] =     /* Darstellung des Wuerfels */
	{ /* 1 Punkt*/
	{{" _________ \n"},  /* Statt der Hexadezimaldarstellung */
	 {"|         |\n"},  /* kann auch die aequivalente ASCII- */
	 {"|         |\n"},  /* Darstellung verwendet werden,Beispiel: */
	 {"|    O    |\n"},  /* '|', ' ', ' ', ' ', ' ', 'O', ' ', .....*/
	 {"|         |\n"},
	 {"|_________|\0"}},
	  /* 2 Punkte*/
	{{" _________ \n"},
	 {"|         |\n"},
	 {"| O       |\n"},
	 {"|         |\n"},
	 {"|       O |\n"},
	 {"|_________|\0"}},
	  /* 3 Punkte*/
	{{" _________ \n"},
	 {"|         |\n"},
	 {"| O       |\n"},
	 {"|    O    |\n"},
	 {"|       O |\n"},
	 {"|_________|\0"}},
	  /* 4 Punkte*/
	{{" _________ \n"},
	 {"|         |\n"},
	 {"| O     O |\n"},
	 {"|         |\n"},
	 {"| O     O |\n"},
	 {"|_________|\0"}},
	  /* 5 Punkte*/
	{{" _________ \n"},
	 {"|         |\n"},
	 {"| O     O |\n"},
	 {"|    O    |\n"},
	 {"| O     O |\n"},
	 {"|_________|\0"}},
	  /* 6 Punkte*/
	{{0x20,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x20,'\n',},
	 {0x7c,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7c,'\n'},
	 {0x7c,0x20,0x4f,0x20,0x20,0x4f,0x20,0x20,0x4f,0x20,0x7c,'\n'},
	 {0x7c,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x7c,'\n'},
	 {0x7c,0x20,0x4f,0x20,0x20,0x4f,0x20,0x20,0x4f,0x20,0x7c,'\n'},
	 {0x7c,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x5f,0x7c,'\0'}} };
play = rand ( )%6;  /* Zahlbereich von 0 ... 5: 3D-Stringfeld fuer Wuerfel [0] ... [6] */
printf ("%s\n", wuerfel[play]);
return play;
}

