VIER GEWINNT



  • ich habe mal das spiel soweit fertig aber es funktioniert net kann mir jemand helfen wieso????
    muss da noch ne schleife mit do while setzten aber wo vor den spielern......

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    
    int main (void)
    {
            int matrix[7][7];
            int i=0,j=0;
    
            int X;
             //Spalte(Standart=14)
             //Spieler 1 Zeichen
    
            printf("                               ****************\n");
            printf("                               **Vier Gewinnt**\n");
        printf("                               ****************\n\n\n");
        printf("                  (Vier Steine in einer Reihe und du hast gewonnen)\n\n");
    
            printf("1234567\n");
            printf("_______\n");
            for(i=0;i<7;i++){
                    for(j=0;j<7;j++){
                            matrix[i][j]='.';
                            printf("%c",matrix[i][j]);
                    }
                    printf("\n");
            }
    }
    //-----------Spieler 1-----------------------------------------------------
    int spe (void)
    {
    int zug;
    char sp1z='X';
    
            printf("\n\n\n\n");
            printf("Spieler 1, wo wollen sie ihren Stein platzieren?(1,2,3,4,5,6,7)\n");
            scanf("%d",&zug);
            gotoxy(zug,14);
            printf("%c",sp1z);
    }
    
    //-----------Spieler 2----------------------------------------------------
    int spz (void)
    {
    int zug;
    char sp1z='X';
    int sp=14,i;
    
            printf("\n\n"); 
            printf("Spieler 2, wo wollen sie ihren Stein platzieren?(1,2,3,4,5,6,7)\n");
            scanf("%d",&zug);
            gotoxy(zug,sp);
            for(i=0;i<7;i++){
                    if((i==0)||(i==sp1z)){
                            sp--;                     
    
            }
            else{ 
            printf("0"); 
            }
    }
    
    return 0;
    }
    
    //-----------------------------------------------------------------------------------
    

  • Mod

    st schrieb:

    ich habe mal das spiel soweit fertig aber es funktioniert net kann mir jemand helfen wieso????
    muss da noch ne schleife mit do while setzten aber wo vor den spielern......

    welchen teil moechtest du denn wiederholt haben?



  • also mein problem ist das wenn der zweite spieler einen stein legen soll und man mit enter bestätigt es das spiel abbricht....wie kann ich das verhindern...
    danke fürs helfen



  • danke fürs helfen

    bei dem source weiss man ja gar nicht, wo man mit der hilfe ueberhaupt anfangen soll...

    also mein problem ist das [...] das spiel abbricht....

    man macht halt 'ne schleife in der die benutzereingaben stattfinden und die so lange laeuft bis einer gewonnen hat.
    leider ist aus deinem source nicht erkenntlich in welchem kontext die eingaben ueberhaupt passieren.



  • Vielleicht solltest du erstmal deine Funktionen und Variablen vernünftig benennen, damit man da später (wenn das Programm umfangreicher geworden ist) besser durchsteigt... (außerdem will euer Prof da vielleicht auch mal etwas nachvollziehen können 😉 )

    Wo rufst du denn spe und/oder spz auf?

    Außerdem solltest du vielleicht erstmal einen theoretischen Entwurf deines Programms erstellen. (Muss ja kein Structogramm sein, aber wenigstens mal ein paar Überlegungen machen und die mit Papier und Bleistift (!) festhalten...
    Dann brauchst du später nur noch dein theoretisches Konzept praktisch übertragen.

    (Einfach drauf los programmieren geht des öfteren schief...)

    OT: Kann es sein, das ich die aktuelle Bildungspolitik nicht verstehe, oder warum müssen Menschen immer sachen machen, von denen sie vorher (anscheinend) keinen blassen schimmer haben?!? (Hab ich schon öfters in letzter Zeit erlebt...)

    ndT Lupo

    Nur aus Niederlagen erwächst Weisheit.
    ^Marcus Peter^



  • Lupo4u2 schrieb:

    Vielleicht solltest du erstmal deine Funktionen und Variablen vernünftig benennen, damit man da später (wenn das Programm umfangreicher geworden ist) besser durchsteigt... (außerdem will euer Prof da vielleicht auch mal etwas nachvollziehen können 😉 )

    Sehr wichtig!! Spätestens wenn dein prog mal mehr als 100 zeilen hast wirds automtatisch unübersichtlich 😉

    Lupo4u2 schrieb:

    OT: Kann es sein, das ich die aktuelle Bildungspolitik nicht verstehe, oder warum müssen Menschen immer sachen machen, von denen sie vorher (anscheinend) keinen blassen schimmer haben?!? (Hab ich schon öfters in letzter Zeit erlebt...)

    Das ist normal inzwischen! Muss nicht unbedingt an den Schülern liegen!
    Ich hab damals aufm BKI auch en Spiel programmiert wo ich mich ein wenig übernommen hab! Da hilft nur eins RANKLOTZEN!
    Wir sollten 60 Arbeitstunden reinstecken! Ich hab 450 gebraucht!!
    Also probieren! Wenn du ein konkretes Problem hast gibts hier im Forum super leute die dir sofort helfen!!
    Wenn du aktive Hilfe brauchst kannst dich ja mal bei mir melden vll kann ich dir helfen (Ich prog dir nicht dein Prog!).
    Gruß KY



  • Habe hier nochmal versucht vier gewinnt zu schreiben. könnt ihr mir helfen.

    Die steine sollen jetzt noch liegen bleiben und es sollen 2 spieler sein. wie bekomme ich das hin danke fürs beantworten

    #include <stdio.h>
    #include <conio.h>

    // ----globale Variablen ------------------------------------

    int feld[12][12];
    int zeile,spalte;
    int mauszeile=2, mausspalte=2;
    int mausz=2, mauss=3;

    // -----Ausgabe des Feldes -----------------------------------

    void ausgabe (void)
    {

    clrscr();
    printf(" ****************\n");
    printf(" **Vier Gewinnt**\n");
    printf(" ****************\n\n\n");
    printf(" (Vier Steine in einer Reihe und du hast gewonnen)\n\n");

    for(zeile=0;zeile<12;zeile++)
    {
    for(spalte=0;spalte<12;spalte++)
    if(mauszeile==zeile && mausspalte==spalte) // && bedeutet logisches UND, d.h. beide Bedingung müssen erfüllt sein. || steht für das logische Oder, d.h. led. eine Bedingung muss erfüllt sein

    printf("%c",'X'); // Ausgabe Symbol für die Maus an Mausposition

    else

    printf("%c",feld[zeile][spalte]);
    printf("\n");

    }
    }
    // -----Feld anlegen ------------------------------------------

    void feldanlegen(void)
    {

    for(zeile=0;zeile<12;zeile++)
    for(spalte=0;spalte<12;spalte++)
    feld[zeile][spalte]='.';
    feld[0][2]='0';
    feld[0][3]='1';
    feld[0][4]='2';
    feld[0][5]='3';
    feld[0][6]='4';
    feld[0][7]='5';
    feld[0][8]='6';
    feld[0][9]='7';
    feld[0][10]='8';
    feld[0][11]='9';

    feld[1][1]=22;
    feld[1][2]=22;
    feld[1][3]=22;
    feld[1][4]=22;
    feld[1][5]=22;
    feld[1][6]=22;
    feld[1][7]=22;
    feld[1][8]=22;
    feld[1][9]=22;
    feld[1][10]=22;
    feld[1][11]=22;

    feld[2][1]=179;
    feld[3][1]=179;
    feld[4][1]=179;
    feld[5][1]=179;
    feld[6][1]=179;
    feld[7][1]=179;
    feld[8][1]=179;
    feld[9][1]=179;
    feld[10][1]=179;
    feld[11][1]=179;

    feld[2][0]='0';
    feld[3][0]='1';
    feld[4][0]='2';
    feld[5][0]='3';
    feld[6][0]='4';
    feld[7][0]='5';
    feld[8][0]='6';
    feld[9][0]='7';
    feld[10][0]='8';
    feld[11][0]='9';

    }

    // ----- Maus läuft rechts -----------------------------------

    void rechts(void)
    {
    if(mausspalte<11 && feld[mauszeile][mausspalte+1])
    mausspalte++;
    }

    // ----- Maus läuft links -----------------------------------

    void links(void)
    {
    if(mausspalte>2 && feld[mauszeile][mausspalte-1])
    mausspalte--;
    }

    // ------Hauptprogramm ----------------------------------------

    void main(void)
    {

    int zeichen=0;

    feldanlegen();

    //printf("%d",getch()); Cursortasten können mit diesem Befehl abgefragt werden

    do
    {
    if(zeichen==77)
    rechts();
    if(zeichen==75)
    links();
    ausgabe();
    }while( (zeichen=getch())!='x'); // != bedeutet nicht gleich

    }



  • Hey,
    habe jetzt echt keine Lust deinen "Code" anzugucken der nichtmal vernünftig mit Code-Tags gepostet wurde. Zu deinem Problem nur ein kleiner Tipp wie man es machen könnte:

    struct Steinchen
    {
        int Status; /* 
                       0 = Leer, 
                       1 = Spieler1, 
                       2 = Spieler2 
                    */
        Steinchen()
        {
            Status = 0;
        }
    };
    
    Steinchen Feld[12][12];
    
    // [...]
    
    if ( Feld[0][0].Status == 0 )
     Zeige( '.' );                            // Leer
    else if ( Feld[0][0].Status == 1 )
     Zeige( 'O' );                            // Spieler1 hat hier ein Stein
    else
     Zeige( 'X' );                            // Spieler2 hat hier ein Stein
    

    Das ist natürlich nicht die optimalste Lösung, aber ich wollte es auch nicht Übertreiben...

    Ansonsten kann ich dir nur eins sagen: Nimm dir ein Blatt Papier und ein Stift und mal dir doch mal ein Spielfeld auf und spiele so. Dann bring deine Erkenntnisse und überlegungen die du dir augeschrieben hast in die Praxis.

    Gruß



  • Da würde ich keine Struktur nehmen.

    Einfach ein 2D-Array und dieses am Anfang mit ' ' initialisieren.
    Wenn Spieler ihre Steine setzen kann man entsprechende Felder mit Zeichen belegen.

    Für zwei Spieler ist das ganze imo relativ einfach.
    15 Euro und ich schreib Dir das komplette Programm 🤡



  • Ich habs mir mal selbst programmiert, weil ich dafür mit dem Alpha-Beta KI-Algotithmus üben will.

    Ich habe das Spielfeld immer komplett umgegraben, weil ich alle möglichen Gewinnsituationen für die Bewertung brauche.

    Der Stil ist wahrscheinlich nicht so toll - aber hey, bin ja noch Anfänger 😉

    Hier für zwei Spieler komplett in C für WIN32:
    Am besten einfach mal compilen.

    /* 		
    			VIER GEWINNT (c) 2007 by Simonek
    			Vier Gewinnt! Für zwei Spieler komplett in C geschrieben.
    */
    
    // INCLUDE-DATEIEN
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    #include <ctype.h>
    
    // DEFINIERUNGEN
    #define JA 1
    #define NEIN 0
    #define SPIELER1 1
    #define SPIELER2 0
    #define ZEICHEN1 '#'		// Zeichen der Spielsteine für Spieler 1 (kann hier geändert werden)
    #define ZEICHEN2 '/'		// Zeichen der Spielsteine für Spieler 2 (kann hier geändert werden)
    #define SPEED	100 			// Legt die Geschwindigkeit der Animation fest
    
    // GLOBALE VATIABLEN
    char name1[20];					// Name von Spieler 1
    char name2[20];					// Name von Spieler 2
    int f[8][8]; 						// Das Spielfeld
    int a[3][27];						// Animationsfelder über dem Spielfeld
    
    //FUNKTIONS-PROTOTYPEN
    																			// *** SPIELRELEVANTE FUNKTIONEN
    void init(int namen);											// Initialisiert die Spieldaten vor dem Spiel
    void zeige_spielfeld(void);						// Zeigt das Spielfeld an
    	void animation(int nach, int hohe, int wer);
    void ziehen(int wer);									// Spieler zieht
    int winchk(int wer);									// Überprüft, ob jemand gewonnen hat
    	void highlight(int ax,int ay, int bx, int by, 
    								int cx, int cy, int dx, int dy);
    	void win(int wer);									// Gibt Gewinnmeldung aus
    
    																		// *** ALLGEMEINE FUNKTIONEN
    int jn_frage(void);											// Übersetzt jJnN in 1 oder 0
    int int_eingabe(int min, int max);			// Erzwingt Eingabe im Wertebereich
    void sleep(long dauer);									// Stoppt Programm für einen gewissen Zeitraum
    
    int main(void)											// PROGRAMMSTART: HERE WE GO...
    {
    	int spielende = NEIN;
    	int neuesspiel = NEIN;
    	int namen = NEIN;
    
    	srand(time(NULL));
    	system("cls");
    	puts("\n\nWillkommen bei 4Gewinnt!\n");
    	puts("\nDieses Spiel wurde komplett in C geschrieben.");
    	puts("\nCopyright (c) 2007 by Simonek");
    	puts("\n\nMit beliebiger Taste starten...");
    	getch();
    
    	while ( 1 )
    	{
    		init(namen);
    		namen = JA;
    		zeige_spielfeld();
    		while ( spielende == NEIN )		// Spielablauf:
    		{
    			ziehen(SPIELER1);					// Spieler 1 zieht...
    			zeige_spielfeld();				// Zeige den Zug an...
    			spielende = winchk(SPIELER1);	// Überprüft, ob Spieler 1 gewinnt...
    			if ( spielende == JA )					// Wenn ja, dann Schleife abbrechen...
    				break;
    			ziehen(SPIELER2);					// Ansonsten: Spieler 2 zieht...
    			zeige_spielfeld();				// Zeige den Zug an...
    			spielende = winchk(SPIELER2);	// Überprüft, ob Spieler 2 gewinnt und springt ggf. aus der Schleife
    		}	
    		printf("\nM%cchten Sie ein neues Spiel starten (J)a/(N)ein?\n", 148);
    		printf("\n==> ");
    		neuesspiel = jn_frage();
    		if ( neuesspiel == NEIN )
    			break;
    		else
    			spielende = NEIN;
    	}
    
    	return EXIT_SUCCESS;
    }
    
    void init(int namen)											// INITIALISIERT DIE SPIELDATEN
    {
    	char leerzeichen[2] = " ";
    	char tmp_name[20];
    	int count, count1, count2;
    	int laenge;
    	int starten = 0;
    	int los = 1001;
    
    	if ( namen == NEIN )
    	{
    		system("cls");												// Namen eingeben
    		puts("Spieler 1: Geben Sie bitte Ihren Namen ein.");
    		printf("\n\n==> ");
    		fgets(name1, 20, stdin);
    		system("cls");
    		puts("Spieler 2: Geben Sie bitte Ihren Namen ein.");
    		printf("\n\n==> ");
    		fgets(name2, 20, stdin);
    
    		laenge = strlen(name1);								// Namen anpassen
    		name1[laenge-1] = ' ';
    		laenge = strlen(name2);
    		name2[laenge-1] = ' ';
    	}
    	else
    		;
    
    	system("cls");	
    	printf("Wer soll starten?\n");
    	printf("\n1. %s\n", name1);
    	printf("2. %s\n", name2);
    	printf("3. Zuf%cllig\n", 132);
    	starten = int_eingabe(1, 3);
    
    	if ( starten == 1 )
    		printf("\n\n%sstartet...", name1);
    	else if ( starten == 2 )
    	{
    		strcpy(tmp_name, name1);
    		strcpy(name1, name2);
    		strcpy(name2, tmp_name);
    		printf("\n\n%sstartet...", name1);
    	}
    	else
    	{
    		printf("\nTaste dr%ccken um auszulosen, wer starten darf...\n", 129);			// Auslosung wer startet
    		getch();
    		while ( los > 1000 )
    		{
    			los = rand();
    		}
    		system("cls");
    		for(count1=0;count1<15;count1++)				// Simuliere optische Auslosung
    		{
    			printf("--> %s\n", name1);
    			printf("    %s\n", name2);
    			sleep(120);
    			system("cls");
    			printf("    %s\n", name1);
    			printf("--> %s\n", name2);
    			sleep(120);
    			system("cls");
    		}
    		if ( los > 499 )
    		{
    			printf("    %s\n", name1);
    			printf("--> %s\n", name2);
    			printf("\n\n%s startet...", name2);
    			strcpy(tmp_name, name1);
    			strcpy(name1, name2);
    			strcpy(name2, tmp_name);
    		}
    		else
    		{
    			printf("--> %s\n", name1);
    			printf("    %s\n", name2);
    			printf("\n\n%s startet...", name1);
    		}
    	}
    
    	sleep(2500);
    
    	system("cls");												// Leer den Bildschirm, kann ggf. verbessert werden
    	printf("\n\nInitialisierung");
    	for(count1=0;count1<8;count1++)				// Initialisiert die Spielfelder mit einem Leerzeichen
    	{
    		for(count2=0;count2<8;count2++)
    		{
    			f[count1][count2] = ' ';
    		}
    	}
    	for(count1=0;count1<3;count1++)				// Initialisiert die Spielfelder mit einem Leerzeichen
    	{
    		for(count2=0;count2<27;count2++)
    		{
    			a[count1][count2] = ' ';
    		}
    	}
    	for(count1=0;count1<60;count1++)			// Simuliert Ladevorgang...
    	{
    		sleep(10);
    		printf(".");
    	}
    }
    
    void ziehen(int wer)								// SPIELZUG DER SPIELER
    {
    	int ch;
    	int count;
    	int wohin = 0;
    	int hohe = 0;
    	int gesetzt = NEIN;
    
    	if ( wer == SPIELER1 )								// Initialisiert die Zeichen
    	{
    		ch = ZEICHEN1;
    		printf("\n\n\n%sist am Zug: ", name1);
    	}
    	else
    	{
    		ch = ZEICHEN2;
    		printf("\n\n\n%sist am Zug: ", name2);
    	}
    
    	printf("Welche Reihe (1-7)?\n\n");
    	while ( gesetzt == NEIN )
    	{
    		wohin = int_eingabe(1, 7);							// Spieler wählt Reihe aus...
    
    		for(count=1;count<8;count++)								// Ermittelt die Höhe
    		{
    			if ( count == 7 )
    			{
    				puts("Die Reihe ist voll! Bitte wiederholen Sie den Zug.");
    				break;
    			}
    			if ( f[wohin][count] == ' ' )       
    			{				
    				hohe = count; 
    				gesetzt = JA;
    				break;
    			}
    		} 			
    	}								
    	animation(wohin, hohe, wer);						// Aktualisiert Zeichen für Spielzug
    }
    
    int winchk(int wer)
    {
    	int ch;
    	int count1, count2;
    	int ax=0,bx=0,cx=0,dx=0;
    	int ay=0,by=0,cy=0,dy=0;
    	int run = 5;
    
    	if ( wer == SPIELER1 )							// Zu überprüfendes Zeichen...
    		ch = ZEICHEN1;
    	else
    		ch = ZEICHEN2;
    
    	for(count1=1;count1<8;count1++)			// ***** Überprüft waagrechte Linien: -
    	{
    		ax=1; bx=2; cx=3; dx=4;
    		for(count2=1;count2<5;count2++)
    		{
    			if ( (ch == f[ax][count1]) && (ch ==  f[bx][count1]) && (ch ==  f[cx][count1]) && (ch ==  f[dx][count1]) )
    			{
    				highlight(ax,count1,bx,count1,cx,count1,dx,count1);
    				win(wer);
    				return JA;
    			}
    			ax++; bx++; cx++; dx++;
    		}
    	}
    
    	for(count1=1;count1<8;count1++)			// ***** Überprüft senkrechte Linien: |
    	{
    		ay=1; by=2;	cy=3; dy=4;
    		for(count2=1;count2<5;count2++)
    		{
    			if ( (ch == f[count1][ay]) && (ch ==  f[count1][by]) && (ch ==  f[count1][cy]) && (ch ==  f[count1][dy]) )
    			{
    				highlight(count1,ay,count1,by,count1,cy,count1,dy);
    				win(wer);
    				return JA;
    			}
    			ay++; by++; cy++; dy++;
    		}
    	}
    
    	for(count1=1;count1<5;count1++) 		// Überprüft diagonale Linien: / (untere Hälfte)
    	{
    		ay=0; by=1; cy=2; dy=3; 
    		ax=count1-1; bx=count1+0; cx=count1+1; dx=count1+2;
    		for(count2=1;count2<run;count2++)
    		{
    			if  ( (ch == f[count2+ax][count2+ay]) && (ch ==  f[count2+bx][count2+by]) && (ch ==  f[count2+cx][count2+cy]) && (ch ==  f[count2+dx][count2+dy]) )
    			{
    				highlight((count2+ax),(count2+ay),(count2+bx),(count2+by),(count2+cx),(count2+cy),(count2+dx),(count2+dy));
    				win(wer);
    				return JA;
    			}
    		}
    		run--;
    	}
    
    	run = 5;
    	for(count1=1;count1<5;count1++) 		// Überprüft diagonale Linien: / (obere Hälfte)
    	{
    		ay=count1-1; by=count1+0; cy=count1+1; dy=count1+2;
    		ax=0; bx=1; cx=2; dx=3; 
    		for(count2=1;count2<run;count2++)
    		{
    			if  ( (ch == f[count2+ax][count2+ay]) && (ch ==  f[count2+bx][count2+by]) && (ch ==  f[count2+cx][count2+cy]) && (ch ==  f[count2+dx][count2+dy]) )
    			{
    				highlight((count2+ax),(count2+ay),(count2+bx),(count2+by),(count2+cx),(count2+cy),(count2+dx),(count2+dy));
    				win(wer);
    				return JA;
    			}
    		}
    		run--;
    	}
    
    	run = 5;
    	for(count1=4;count1>0;count1--) 		// Überprüft diagonale Linien: \ (untere Häfte)
    	{
    		ay=0; by=1; cy=2; dy=3; 
    		ax=count1+3; bx=count1+2; cx=count1+1; dx=count1+0;
    		for(count2=1;count2<run;count2++)
    		{
    			if  ( (ch == f[ax][count2+ay]) && (ch ==  f[bx][count2+by]) && (ch ==  f[cx][count2+cy]) && (ch ==  f[dx][count2+dy]) )
    			{
    				highlight((ax),(count2+ay),(+bx),(count2+by),(cx),(count2+cy),(dx),(count2+dy));
    				win(wer);
    				return JA;
    			}
    			ax--; bx--; cx--; dx--;
    		}
    
    		run--;
    	}
    
    	run = 5;
    	for(count1=1;count1<5;count1++) 		// Überprüft diagonale Linien: \ (obere Häfte)
    	{
    		ay=count1-1; by=count1+0; cy=count1+1; dy=count1+2;
    		ax=7; bx=6; cx=5; dx=4; 
    		for(count2=1;count2<run;count2++)
    		{
    			if  ( (ch == f[ax][count2+ay]) && (ch ==  f[bx][count2+by]) && (ch ==  f[cx][count2+cy]) && (ch ==  f[dx][count2+dy]) )
    			{
    				highlight((ax),(count2+ay),(bx),(count2+by),(cx),(count2+cy),(dx),(count2+dy));
    				win(wer);
    				return JA;
    			}
    			ax--; bx--; cx--; dx--;
    		}
    		run--;
    	}
    
    	return NEIN;												// Gibt 'Nein' zurück, wenn niemand gewonnen hat
    }
    
    void highlight(int ax,int ay, int bx, int by, int cx, int cy, int dx, int dy)
    {
    	int ch;
    	int count;
    
    	ch = f[ax][ay];
    
    	for(count=0;count<17;count++)
    	{
    		f[ax][ay] = ' ';
    		f[bx][by] = ' ';
    		f[cx][cy] = ' ';
    		f[dx][dy] = ' ';
    		zeige_spielfeld();
    		sleep(100);
    		f[ax][ay] = ch;
    		f[bx][by] = ch;
    		f[cx][cy] = ch;
    		f[dx][dy] = ch;
    		zeige_spielfeld();
    		sleep(100);
    	}
    }
    void win(int wer)									// GIBT GEWINNMELDUNG AUS
    {
    	puts("\n\n");
    	if ( wer == SPIELER1 )
    	{
    		printf("%shat gewonnen!\n", name1);
    		getch();
    	}
    	else
    	{
    		printf("%shat gewonnen!\n", name2);
    		getch();
    	}
    }
    
    void zeige_spielfeld(void)				// ZEIGT DAS SPIELFELD AN			
    {
    	system("cls");
    	printf("\n\n=============================)\n");
    	printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", a[0][1], a[0][2], a[0][3], a[0][4], a[0][5], a[0][6], a[0][7], a[0][8], a[0][9], a[0][10], a[0][11], a[0][12], a[0][13], a[0][14], a[0][15], a[0][16], a[0][17], a[0][18], a[0][19], a[0][20], a[0][21], a[0][22], a[0][23], a[0][24], a[0][25], a[0][26] );
    	printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", a[1][1], a[1][2], a[1][3], a[1][4], a[1][5], a[1][6], a[1][7], a[1][8], a[1][9], a[1][10], a[1][11], a[1][12], a[1][13], a[1][14], a[1][15], a[1][16], a[1][17], a[1][18], a[1][19], a[1][20], a[1][21], a[1][22], a[1][23], a[1][24], a[1][25], a[1][26] );
    	printf("%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n", a[2][1], a[2][2], a[2][3], a[2][4], a[2][5], a[2][6], a[2][7], a[2][8], a[2][9], a[2][10], a[2][11], a[2][12], a[2][13], a[2][14], a[2][15], a[2][16], a[2][17], a[2][18], a[2][19], a[2][20], a[2][21], a[2][22], a[2][23], a[2][24], a[2][25], a[2][26] );
    	printf("   6 |%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|\n", f[1][6], f[1][6], f[2][6], f[2][6], f[3][6], f[3][6], f[4][6], f[4][6], f[5][6], f[5][6], f[6][6], f[6][6], f[7][6], f[7][6] );
    	printf("     |%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|\n", f[1][6], f[1][6], f[2][6], f[2][6], f[3][6], f[3][6], f[4][6], f[4][6], f[5][6], f[5][6], f[6][6], f[6][6], f[7][6], f[7][6] );
    	printf("   5 |%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|\n", f[1][5], f[1][5], f[2][5], f[2][5], f[3][5], f[3][5], f[4][5], f[4][5], f[5][5], f[5][5], f[6][5], f[6][5], f[7][5], f[7][5] );
    	printf("     |%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|\n", f[1][5], f[1][5], f[2][5], f[2][5], f[3][5], f[3][5], f[4][5], f[4][5], f[5][5], f[5][5], f[6][5], f[6][5], f[7][5], f[7][5] );
    	printf("   4 |%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|\n", f[1][4], f[1][4], f[2][4], f[2][4], f[3][4], f[3][4], f[4][4], f[4][4], f[5][4], f[5][4], f[6][4], f[6][4], f[7][4], f[7][4] );
    	printf("     |%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|\n", f[1][4], f[1][4], f[2][4], f[2][4], f[3][4], f[3][4], f[4][4], f[4][4], f[5][4], f[5][4], f[6][4], f[6][4], f[7][4], f[7][4] );
    	printf("   3 |%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|\n", f[1][3], f[1][3], f[2][3], f[2][3], f[3][3], f[3][3], f[4][3], f[4][3], f[5][3], f[5][3], f[6][3], f[6][3], f[7][3], f[7][3] );
    	printf("     |%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|\n", f[1][3], f[1][3], f[2][3], f[2][3], f[3][3], f[3][3], f[4][3], f[4][3], f[5][3], f[5][3], f[6][3], f[6][3], f[7][3], f[7][3] );
    	printf("   2 |%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|\n", f[1][2], f[1][2], f[2][2], f[2][2], f[3][2], f[3][2], f[4][2], f[4][2], f[5][2], f[5][2], f[6][2], f[6][2], f[7][2], f[7][2] );
    	printf("     |%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|\n", f[1][2], f[1][2], f[2][2], f[2][2], f[3][2], f[3][2], f[4][2], f[4][2], f[5][2], f[5][2], f[6][2], f[6][2], f[7][2], f[7][2] );
    	printf("   1 |%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|\n", f[1][1], f[1][1], f[2][1], f[2][1], f[3][1], f[3][1], f[4][1], f[4][1], f[5][1], f[5][1], f[6][1], f[6][1], f[7][1], f[7][1] );
    	printf("     |%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|%c%c|\n", f[1][1], f[1][1], f[2][1], f[2][1], f[3][1], f[3][1], f[4][1], f[4][1], f[5][1], f[5][1], f[6][1], f[6][1], f[7][1], f[7][1] );
    	printf("     ======================\n");
    	printf("      1  2  3  4  5  6  7 \n");
    }
    
    void animation(int nach, int hohe, int wer)
    {
    	int count, count1, count2;	// Diverse Counter
    	int ch;											// Zeichen der Spieler
    	int schritte;								// Schritte nach rechts auf der X-Achse
    	int position;								// Schritte nach unten auf der Y-Achse
    
    	position = hohe;
    
    	if ( wer == SPIELER1 )			// Zeichen setzen
    		ch = ZEICHEN1;
    	else
    		ch = ZEICHEN2;
    
    	switch ( nach )							// Schritte auf der X-Achse anpassen...
    	{
    		case 1: schritte = 7; break;
    		case 2: schritte = 10; break;
    		case 3: schritte = 13; break;
    		case 4: schritte = 16; break;
    		case 5: schritte = 19; break;
    		case 6: schritte = 22; break;
    		case 7: schritte = 25; break;
    		default: puts("Fehler");
    	} ;
    
    															// Der Kran erscheint links...
    	a[0][1] = '|';
    	a[1][1] = ch;
    	a[2][1] = ch;
    	zeige_spielfeld();
    	sleep(SPEED);
    	a[0][2] = '|';
    	a[1][2] = ch;
    	a[2][2] = ch;
    	zeige_spielfeld();
    	sleep(SPEED*2);
    
    	for(count=1;count<schritte;count++) // Findet X-Position und stoppt
    	{
    		a[0][count] = ' ';
    		a[1][count] = ' ';
    		a[2][count] = ' ';
    		a[0][count+2] = '|';
    		a[1][count+2] = ch;
    		a[2][count+2] = ch;
    		zeige_spielfeld();
    		sleep(SPEED-(count*3));
    	}
    																			// Stein vom Kran lösen...
    	a[0][count+0] = '|';
    	a[0][count+1] = '|';
    	a[1][count+0] = ' ';
    	a[1][count+1] = ' ';
    	a[2][count+0] = ' ';
    	a[2][count+1] = ' ';
    
    	f[nach][6] = ch;
    	zeige_spielfeld();
    	sleep(SPEED+50);
    
    	for(count1=(6);count1>position;count1--)		// Stein in Spalte fallen lassen
    	{
    			f[nach][count1] = ' ';
    			f[nach][count1-1] = ch;
    			zeige_spielfeld();
    			sleep(SPEED);
    	}
    
    	for( ; count>(-1);count--)				// Fährt "Heber" zurück
    	{
    		a[0][count+1] = ' ';
    		a[0][count-1] = '|';
    		zeige_spielfeld();
    		sleep(SPEED);
    	}
    	sleep(SPEED*2);
    
    	for(count1=0;count1<3;count1++)				// Initialisiert den oberen Bereich mit einem Leerzeichen
    	{
    		for(count2=0;count2<27;count2++)
    		{
    			a[count1][count2] = ' ';
    		}
    	}
    }
    void sleep(long dauer)						// HÄLT DAS SYSTEM FÜR GEWISSE ZEIT AN
    {
    	if ( dauer < 1 )
    		;
    	else
    	{
    		long tstart = clock();
    		long tend = 0;
    
    		while ( (tend - tstart) < dauer )
    			tend = clock();
    	}
    }
    
    int int_eingabe(int min, int max)	// ERZWINGT EINGABE IM ANGEGEBENEN BEREICH
    {
    	int cnt;
    	int var = (max+1);
    	int is_zahl = 0;
    	int austritt = NEIN;
    	int austritt2 = NEIN;
    	int tmp_int;
    	unsigned int lange = 0;
    	char tmp_string[10+1];
    
    while ( austritt2 == NEIN )						// Legt Wertebereich fest
    {
    		while ( austritt == NEIN )					
    		{	
    				printf("\nEingabe ==> ");
    				fgets(tmp_string, (10+1), stdin);				// LIEßT STING EIN
    
    				lange = strlen(tmp_string);					
    				for(cnt=0; cnt<(lange-1); cnt++)		// lange-1, weil wir '\0' nicht vergleichen wollen
    				{
    					tmp_int = tmp_string[cnt];
    					is_zahl = isdigit(tmp_int);
    					if ( is_zahl == 0 )								// Wenn keine Ziffer --> Schleife startet neu
    					{
    							austritt = 0;
    							break;
    					}
    					else
    						austritt = 1;										// Wenn nur Ziffern --> Beendet Schleife
    				}
    		  var = atoi(tmp_string);								// Umwandlung in ein Integer
    		  if ( var < min || var > max )
    		  {
    		  	austritt2 = NEIN;
    		  	austritt = NEIN;
    		  }
    		  else
    		  	austritt2 = JA;
    		}
    
    }
    return var;
    }
    
    int jn_frage(void)																// ÜBERSETZT J/N in 1/0
    {
    	char a = 'a';
    	char puf[20];
    
    	while ( strchr( "NnJj", a ) == NULL )
    		{
    					fgets(puf, 20, stdin);
    					a = *puf;
    		}
    
    		if (a == 'j' || a == 'J') {
    			return 1; 
    		}
    		else
    			return 0;
    }
    

Anmelden zum Antworten