home *** CD-ROM | disk | FTP | other *** search
- /*-------------------------------------------------------------------
- DER BESTRAFER wurde anläßlich einer unbedachten Äußerung unseres
- Jungredakteurs Gerald Arend ins Leben gerufen. Dem unnachahmlichen
- und mir zum Verwechseln ähnlichen Horst Brack (Catch up, RTL) zu
- Ehren bekam mein Programm diesen gefürchteten Namen.
- Nachdem vorgenannter Jungredakteur sein doch arg schwachbrüstiges
- Programm "Volon-Tier" (toolbox 07/08 91, Databox-Spezial EXPLODE+)
- als das "Nonplusultra" in Sachen EXPLODE-Algorithmus im deutsch-
- sprachigen Raum verkaufen wollte, war es Zeit, einen "BESTRAFER" zu
- programmieren.
- Das dann spontan ins Leben gerufene Turnier fand zwischen dem Nach-
- folgeprogramm "EXTERMINATOR" von Gerald Arend und meinem "BESTRAFER"
- statt. Beide Programme finden sich auf der Databox 09/10 zur letzten
- alten toolbox.
- Das Turnier endete nach 14 Spielen 13 zu 1 für den "EXTERMINATOR",
- wobei zur Ehrenrettung des "BESTRAFERS" gesagt werden muß, daß die
- Entscheidung ob Sieg oder Niederlage meist an einem einzigen Zug
- hing. Beide Programme bauen auf einem völlig unterschiedlichen,
- nicht-rekursiven allgemeinen Algorithmus auf.
- In die Entwicklung des "BESTRAFERS" wurden 20 Programmierstunden,
- circa 10 Liter Cola sowie mehrere Kannen Kaffee investiert.
- Ein Großteil der Entwicklungszeit mußte leider auf Debugging von
- Seiteneffekten bei logischen Operationen mit Quick-C verwendet werden.
-
- Zum Schluß dieses kleinen Vorwortes möchte ich mich noch einmal
- persönlich bei allen Lesern für Ihre Treue bedanken.
- Die Arbeit in der toolbox-Redaktion war geprägt von Spontaneität,
- Freude am Programmieren sowie einem Freiraum für Individualismus und
- Kreativität. Ich selbst werde an anderer Stelle versuchen, ähnliche
- Akzente zu setzen.
- Allen Lesern wünsche ich ein kritisches Auge, Mut zum eigenen Stil
- und viel Spaß am Programmieren, auch ohne eine toolbox im alten Sinne.
- Vielleicht "sieht" man sich ja auf die eine oder andere Art wieder.
- Auch die Frage, ob es je wieder eine toolbox alter Prägung geben wird,
- hängt einzig und alleine vom Rechenschieber und Ihnen als Leser ab.
-
- Ihr Ulrich Schmitz
-
- Eschwege, den 25.06.1991
- */
-
-
-
- #include<graph.h>
- #include<stdio.h>
- #include<conio.h>
- #include<stdlib.h>
- #include <sys\types.h>
- #include <sys\timeb.h>
-
- #define TRUE 1
- #define FALSE 0
- #define COMPUTER 12 /* Farbe Rot */
- #define MENSCH 9 /* Farbe Blau */
-
- /* Globale Variablen -----------------------------------*/
-
- int Feld[6][6], Spieler[6][6];
- int ZugA_F, Zug1_6;
- int Aktueller_Spieler;
- int rumsbums, Zug_Anzahl;
-
- /* Funktionen und Prozeduren -------------------------------------*/
-
- void pause(int zeit)
- {
- int i, ii, dummy;
- for ( i = 1; i <= zeit; i++ )
- {
- for (ii = 0; ii <= i; ii++)
- {
- ii = ii;
- i = i;
- }
- }
- }
-
- /*----------------------------------------------------------------*/
-
- void tastatur_eingabe()
- {
- int taste;
- char t[] = " \0";
- char ct;
- Zug_Anzahl++;
-
- _settextcolor(MENSCH);
- _settextposition(7,39);
- _outtext(" Ihr Zug : - ");
-
- do {
- _settextposition(7,50);
- _settextcolor(MENSCH);
- taste = getch();
- ct = (char) taste;
- t[0] = ct;
- _outtext(t);
- } while ( ct != 'A' &&
- ct != 'a' &&
- ct != 'B' &&
- ct != 'b' &&
- ct != 'C' &&
- ct != 'c' &&
- ct != 'D' &&
- ct != 'd' &&
- ct != 'E' &&
- ct != 'e' &&
- ct != 'F' &&
- ct != 'f');
-
- if (ct >= 'A' && ct <= 'F')
- ZugA_F = (int) (ct - 'A'); /* Wert 0 - 5 */
-
- else if (ct >= 'a' && ct <= 'f')
- ZugA_F = (int) (ct - 'a'); /* Wert 0 - 5 */
-
-
- do {
- _settextposition(7,52);
- taste = getch();
- ct = (char) taste;
- t[0] = ct;
- _outtext(t);
- } while ( ct != '1' &&
- ct != '2' &&
- ct != '3' &&
- ct != '4' &&
- ct != '5' &&
- ct != '6');
- Zug1_6 = (int) (ct - '1'); /* Wert 0 - 5 */
-
- }
-
- /*----------------------------------------------------------------*/
-
- initialisieren()
- {
- int i, ii;
-
- Zug_Anzahl = 0;
-
- for (ii = 0; ii <= 5; ii++)
- for (i=0; i <= 5; i++)
- {
- Feld[i][ii] = 0;
- Spieler[i][ii] = 0;
- }
- }
-
- /*----------------------------------------------------------------*/
-
- int zug_okay()
- {
- /**** Ist Feld noch frei oder von akt.Spieler besetzt ? ****/
- if ( Feld[ZugA_F][Zug1_6] == 0 ||
- Spieler[ZugA_F][Zug1_6] == Aktueller_Spieler )
- return TRUE;
- else return FALSE;
- }
-
- /*----------------------------------------------------------------*/
-
- void wer_beginnt()
- {
- char ct;
- _settextcolor(2);
- _settextposition(6, 39);
- _outtext(" Wer beginnt mit dem Spiel?");
- _settextposition(7, 39);
- _outtext(" estrafer / pieler :");
-
- _settextcolor(COMPUTER);
- _settextposition(7, 40);
- _outtext("B");
-
- _settextcolor(MENSCH);
- _settextposition(7, 52);
- _outtext("S");
- _settextposition(7, 61);
-
-
- ct = (char) getch();
- if ( ct == 'S' ||
- ct == 's' )
- Aktueller_Spieler = MENSCH;
- else
- Aktueller_Spieler = COMPUTER;
-
- _settextposition(6,39);
- _outtext(" ");
- _settextposition(7,39);
- _outtext(" ");
-
- }
-
- /*----------------------------------------------------------------*/
-
- int rnd() /* Erzeugt eine Zufallszahl von 0 bis 5 */
- {
- int zufall;
- struct timeb tstruct;
- ftime( &tstruct );
- zufall = (int) (tstruct.millitm / 170);
- return zufall;
- }
-
- /*----------------------------------------------------------------*/
-
- void spielfeld()
- {
- int i, ii;
- char feldwert[] = " \0";
-
- for(ii = 0; ii <= 5; ii++)
- {
- for(i = 0; i <= 5; i++)
- {
- _settextposition(7+i*2, 13+ii*4);
-
- if ( Spieler[ii][i] == COMPUTER )
- _settextcolor(COMPUTER);
-
- else if ( Spieler[ii][i] == MENSCH )
- _settextcolor(MENSCH);
-
- else _settextcolor(2); /* Feld bisher leer --> grün */
-
- feldwert[0] = (char) Feld[ii][i] + '0';
- _outtext(feldwert);
- }
- }
- }
-
- /*----------------------------------------------------------------*/
- int summenzug()
- {
- int i, x, y, summe, kleinste_summe, groesste_summe;
- int alle_summen[16], alle_x[16], alle_y[16];
- char s1[1], s2[1];
-
- int max_wert[6][6] = {
- { 1, 2, 2, 2, 2, 1 },
- { 2, 3, 3, 3, 3, 2 },
- { 2, 3, 3, 3, 3, 2 },
- { 2, 3, 3, 3, 3, 2 },
- { 2, 3, 3, 3, 3, 2 },
- { 1, 2, 2, 2, 2, 1 }};
-
-
- for ( i = 0; i <= 15; i++)
- {
- alle_summen[i] = 0;
- alle_x[i] = 0;
- alle_y[i] = 0;
- }
-
- kleinste_summe = 99;
- groesste_summe = -1;
- i = 0;
-
-
- for ( x = 1; x <= 4; x++)
- {
- for ( y = 1; y <= 4; y++)
- {
- if (Spieler[x][y] != MENSCH)
- {
- summe = 0;
- summe += Feld[x][y];
- summe += Feld[x+1][y];
- summe += Feld[x-1][y];
- summe += Feld[x][y-1];
- summe += Feld[x][y+1];
- alle_summen[i] = summe;
- alle_x[i] = x;
- alle_y[i] = y;
-
- i++;
- }
- else
- {
- alle_summen[i] = 999;
- i++;
- }
- }
- }
-
- if (Zug_Anzahl <= 42)
- {
- for ( i = 0; i <= 15; i++ )
- {
- if ( alle_summen[i] <= kleinste_summe && Feld[alle_x[i]][alle_y[i]] < max_wert[alle_x[i]][alle_y[i]] )
- {
- kleinste_summe = alle_summen[i];
- x = alle_x[i];
- y = alle_y[i];
- strcpy(s1,"▄");
- strcpy(s2,"▀");
- }
- }
- }
- else
- {
- strcpy(s1,"▌");
- strcpy(s2,"▐");
- for ( i = 0; i <= 15; i++ )
- {
- if ( alle_summen[i] >= groesste_summe )
- {
- groesste_summe = alle_summen[i];
- x = alle_x[i];
- y = alle_y[i];
- }
- }
- }
- ZugA_F = x;
- Zug1_6 = y;
-
- _settextcolor(COMPUTER);
- _settextposition(14,45);
- _outtext(s1);
- pause(350);
- _settextposition(14,45);
- _outtext(s2);
- pause(350);
- _settextposition(14,45);
- _outtext(" ");
- _settextposition(14,49);
- _outtext(s2);
- pause(350);
- _settextposition(14,49);
- _outtext(s1);
- pause(350);
- _settextposition(14,49);
- _outtext(" ");
- _settextposition(14,53);
- _outtext(s1);
- pause(350);
- _settextposition(14,53);
- _outtext(s2);
- pause(350);
- _settextposition(14,53);
- _outtext(" ");
- _settextposition(14,57);
- _outtext(s2);
- pause(350);
- _settextposition(14,57);
- _outtext(s1);
- pause(350);
- _settextposition(14,57);
- _outtext(" ");
-
- return 17;
- }
-
- /*----------------------------------------------------------------*/
-
- void computer_zugberechnung()
- {
- int i,ii,x, y, Zug;
- int max_wert[6][6] = {
- { 1, 2, 2, 2, 2, 1 },
- { 2, 3, 3, 3, 3, 2 },
- { 2, 3, 3, 3, 3, 2 },
- { 2, 3, 3, 3, 3, 2 },
- { 2, 3, 3, 3, 3, 2 },
- { 1, 2, 2, 2, 2, 1 }};
-
- static int endlos;
- Aktueller_Spieler = COMPUTER;
- Zug = FALSE;
-
- i = rnd();
- /*-- Computer beginnt, Zufallszug gegen Langeweile ---*/
-
- if (Zug_Anzahl == 0)
- {
- switch (i)
- {
- case 1:
- ZugA_F = 0;
- Zug1_6 = 0;
- Zug = 1;
- break;
-
- case 2:
- ZugA_F = 5;
- Zug1_6 = 0;
- Zug = 1;
- break;
-
- case 3:
- ZugA_F = 0;
- Zug1_6 = 5;
- Zug = 1;
- break;
-
- case 4:
- ZugA_F = 5;
- Zug1_6 = 5;
- Zug = 1;
- break;
-
- default:
- ZugA_F = 0;
- Zug1_6 = 0;
- Zug = 1 ;
- }
- }
- /*-- Ende Spielbeginn mit Zufallszug -*/
-
- /*-- Die Ecken besetzen, wenn beide Nachbarfelder nicht sprengbar sind -*/
-
-
- /* 1. Stufe ------------*/
- else if ( Feld[0][0] == 0 && Feld[0][1] <= 1 && Feld[1][0] <= 1 && Zug_Anzahl <= 50 )
- {
- ZugA_F = 0;
- Zug1_6 = 0;
- Zug = 2 ;
- }
- else if ( Feld[5][5] == 0 && Feld[5][4] <= 1 && Feld[4][5] <= 1 && Zug_Anzahl <= 50)
- {
- ZugA_F = 5;
- Zug1_6 = 5;
- Zug = 3 ;
- }
- else if ( Feld[0][5] == 0 && Feld[1][5] <= 1 && Feld[0][4] <= 1 && Zug_Anzahl <= 50)
- {
- ZugA_F = 0;
- Zug1_6 = 5;
- Zug = 4 ;
- }
- else if ( Feld[5][0] == 0 && Feld[4][0] <= 1 && Feld[5][1] <= 1 && Zug_Anzahl <= 50)
- {
- ZugA_F = 5;
- Zug1_6 = 0;
- Zug = 5 ;
- }
-
- /* Ecke besetzt und ein sprengfähiges Nachbarfeld?? */
-
- else if ( Spieler[0][0] == COMPUTER && ( (Feld[0][1] == 2 || Feld[1][0] == 2) && (Spieler[0][1] == MENSCH || Spieler[1][0] == MENSCH) ) )
- {
- ZugA_F = 0;
- Zug1_6 = 0;
- Zug = 6 ;
- }
- else if ( Spieler[5][5] == COMPUTER && ( (Feld[5][4] == 2 || Feld[4][5] == 2) && (Spieler[5][4] == MENSCH || Spieler[4][5] == MENSCH) ) )
- {
- ZugA_F = 5;
- Zug1_6 = 5;
- Zug = 7 ;
- }
- else if ( Spieler[0][5] == COMPUTER && ( (Feld[1][5] == 2 || Feld[0][4] == 2) && (Spieler[1][5] == MENSCH || Spieler[0][4] == MENSCH) ) )
- {
- ZugA_F = 0;
- Zug1_6 = 5;
- Zug = 8 ;
- }
- else if ( Spieler[5][0] == COMPUTER && ( (Feld[4][0] == 2 || Feld[5][1] == 2) && (Spieler[4][0] == MENSCH || Spieler[5][1] == MENSCH) ) )
- {
- ZugA_F = 5;
- Zug1_6 = 0;
- Zug = 9 ;
- }
-
-
- /*- Wenn ein Nachbarfeld bei Sprengung ebenfalls gesprengt wird, setzen -*/
- /* 2. Stufe ------------*/
-
- else if ( Zug == FALSE )
- {
- for (x = 1; x <= 4; x++)
- {
- for (y = 1; y <= 4; y++)
- {
- if ( Spieler[x][y] == COMPUTER )
- {
- if (
- ((Feld[x-1][y] == max_wert[x-1][y] && Spieler[x-1][y] == MENSCH) ||
- (Feld[x+1][y] == max_wert[x+1][y] && Spieler[x+1][y] == MENSCH) ||
- (Feld[x][y+1] == max_wert[x][y+1] && Spieler[x][y+1] == MENSCH) ||
- (Feld[x][y-1] == max_wert[x][y-1] && Spieler[x][y-1] == MENSCH)) &&
- (Feld[x][y] == max_wert[x][y])
- )
- {
- ZugA_F = x;
- Zug1_6 = y;
- Zug = 10 ;
- x = 5;
- y = 5;
- }
- }
- }
- }
- }
- /* Das gleiche für die Randfelder mit max_wert = 2 */
- if ( Zug == FALSE )
- {
- for (y = 1; y <= 4; y++)
- {
- x = 0;
- if ( Feld[x][y] == max_wert[x][y] && Spieler[x][y] == COMPUTER &&
- ((Feld[x+1][y] == max_wert[x+1][y] && Spieler[x+1][y] == MENSCH) ||
- (Feld[x][y+1] == max_wert[x][y+1] && Spieler[x][y+1] == MENSCH) ||
- (Feld[x][y-1] == max_wert[x][y-1] && Spieler[x][y-1] == MENSCH))
- )
- {
- ZugA_F = x;
- Zug1_6 = y;
- Zug = 11 ;
- x = 5;
- y = 5;
- }
- }
- }
-
- if ( Zug == FALSE )
- {
- for (y = 1; y <= 4; y++)
- {
- x = 5;
- if ( Feld[x][y] == max_wert[x][y] && Spieler[x][y] == COMPUTER &&
- ((Feld[x-1][y] == max_wert[x-1][y]) && (Spieler[x-1][y] == MENSCH) ||
- (Feld[x][y+1] == max_wert[x][y+1]) && (Spieler[x][y+1] == MENSCH) ||
- (Feld[x][y-1] == max_wert[x][y-1] && Spieler[x][y-1] == MENSCH))
- )
- {
- ZugA_F = x;
- Zug1_6 = y;
- Zug = 12 ;
- x = 5;
- y = 5;
- }
- }
- }
-
- if ( Zug == FALSE )
- {
- for (x = 1; x <= 4; x++)
- {
- y = 0;
- if ( Feld[x][y] == max_wert[x][y] && Spieler[x][y] == COMPUTER &&
- ((Feld[x][y+1] == max_wert[x][y+1] && Spieler[x][y+1] == MENSCH) ||
- (Feld[x-1][y] == max_wert[x-1][y] && Spieler[x-1][y] == MENSCH) ||
- (Feld[x+1][y] == max_wert[x+1][y] && Spieler[x+1][y] == MENSCH))
- )
- {
- ZugA_F = x;
- Zug1_6 = y;
- Zug = 13 ;
- x = 5;
- y = 5;
- }
- }
- }
-
- if ( Zug == FALSE )
- {
- for (x = 1; x <= 4; x++)
- {
- y = 5;
- if ( Feld[x][y] == max_wert[x][y] && Spieler[x][y] == COMPUTER &&
- ((Feld[x][y-1] == max_wert[x][y-1] && Spieler[x][y-1] == MENSCH) ||
- (Feld[x-1][y] == max_wert[x-1][y] && Spieler[x-1][y] == MENSCH) ||
- (Feld[x+1][y] == max_wert[x+1][y] && Spieler[x+1][y] == MENSCH))
- )
- {
- ZugA_F = x;
- Zug1_6 = y;
- Zug = 14 ;
- x = 5;
- y = 5;
- }
- }
- }
-
-
-
-
-
- /* 3. Stufe ------------ möglichst viele Felder sicher aufbauen */
- if ( Zug == FALSE )
- {
- for (x = 1; x <= 4; x++)
- {
- for (y = 1; y <= 4; y++)
- {
- if (( Spieler[x][y] == COMPUTER) &&
- ( Feld[x-1][y] < max_wert[x-1][y] ) && ( Feld[x-1][y] < max_wert[x][y] ) &&
- ( Feld[x+1][y] < max_wert[x+1][y] ) && ( Feld[x+1][y] < max_wert[x][y] ) &&
- ( Feld[x][y-1] < max_wert[x][y-1] ) && ( Feld[x][y-1] < max_wert[x][y] ) &&
- ( Feld[x][y+1] < max_wert[x][y+1] ) && ( Feld[x][y+1] < max_wert[x][y] ) &&
- ( Feld[x][y] < max_wert[x][y] ))
- {
- ZugA_F = x;
- Zug1_6 = y;
- Zug = 15 ;
- x = 5;
- y = 5;
- }
- }
- }
- }
-
- /* Wenn Spiel fortgeschritten ist (25 Doppelzüge), möglichst sprengen */
-
- if ( Zug == FALSE && Zug_Anzahl > 50 )
- {
- for (x = 1; x <= 4; x++)
- {
- for (y = 1; y <= 4; y++)
- {
- if (( Spieler[x][y] == COMPUTER) &&
- ( Feld[x-1][y] < max_wert[x-1][y] ) && ( Feld[x-1][y] < max_wert[x][y] ) &&
- ( Feld[x+1][y] < max_wert[x+1][y] ) && ( Feld[x+1][y] < max_wert[x][y] ) &&
- ( Feld[x][y-1] < max_wert[x][y-1] ) && ( Feld[x][y-1] < max_wert[x][y] ) &&
- ( Feld[x][y+1] < max_wert[x][y+1] ) && ( Feld[x][y+1] < max_wert[x][y] ) &&
- ( Feld[x][y] == max_wert[x][y] ))
- {
- ZugA_F = x;
- Zug1_6 = y;
- Zug = 15 ;
- x = 4;
- y = 4;
- }
- }
- }
- }
-
- /*- Keinen logisch-guten Zug gefunden -> Zufallszug ---*/
- /* 4. Stufe ------------*/
-
- if ( Zug == FALSE )
- {
- endlos++;
- Zug = summenzug();
- if ( endlos >= 6 )
- {
- _settextcolor(COMPUTER);
- _settextposition(14,45);
- _outtext("█");
- pause(350);
- _settextposition(14,45);
- _outtext(" ");
- _settextposition(14,49);
- _outtext("█");
- pause(350);
- _settextposition(14,49);
- _outtext(" ");
- _settextposition(14,53);
- _outtext("█");
- pause(350);
- _settextposition(14,53);
- _outtext(" ");
- _settextposition(14,57);
- _outtext("█");
- pause(350);
- _settextposition(14,57);
- _outtext(" ");
- for (i=1; i<=6; i++)
- {
- for (ii=1; ii<=6; ii++)
- {
- if (Feld[i][ii] == 0)
- {
- ZugA_F = i;
- Zug1_6 = ii;
- Zug = 17;
- ii=7;
- i=7;
- endlos = 0;
- }
- }
- }
- }
- }
- else
- {
- _settextcolor(COMPUTER);
- _settextposition(14,45);
- _outtext("▓");
- pause(350);
- _settextposition(14,45);
- _outtext(" ");
- _settextposition(14,49);
- _outtext("▓");
- pause(350);
- _settextposition(14,49);
- _outtext(" ");
- _settextposition(14,53);
- _outtext("▓");
- pause(350);
- _settextposition(14,53);
- _outtext(" ");
- _settextposition(14,57);
- _outtext("▓");
- pause(350);
- _settextposition(14,57);
- _outtext(" ");
- endlos = 0;
- }
- _settextposition(17,56);
- printf("%d", Zug_Anzahl/2 + 1);
-
- }
-
-
- /*----------------------------------------------------------------*/
-
- void computerzug()
- {
- int zulaessiger_zug;
-
- Aktueller_Spieler = COMPUTER;
-
- /*---------------------------------------*/
-
- _settextcolor(COMPUTER);
- _settextposition(7,39);
- _outtext(" Der Bestrafer denkt nach!");
-
- /*---------------------------------------*/
- do {
- computer_zugberechnung();
- zulaessiger_zug = zug_okay();
- } while ( zulaessiger_zug != TRUE );
-
- _settextposition(11,50);
- printf("%c-%d", ZugA_F + 'A', Zug1_6 + 1); /* Ausgabe des Comp. Zuges */
- Zug_Anzahl++;
- Spieler[ZugA_F][Zug1_6] = COMPUTER;
- Feld[ZugA_F][Zug1_6]++;
-
- }
-
- /*----------------------------------------------------------------*/
-
- void zug_eingeben()
- {
- int erlaubter_zug;
-
- Aktueller_Spieler = MENSCH;
-
- do {
- tastatur_eingabe();
- erlaubter_zug = zug_okay();
- } while ( erlaubter_zug != TRUE );
-
- _settextcolor(COMPUTER);
- _settextposition(7,50);
- _outtext(" - ");
-
- Feld[ZugA_F][Zug1_6]++;
- Spieler[ZugA_F][Zug1_6] = MENSCH;
-
- }
-
- /*----------------------------------------------------------------*/
-
- void feld_zeichnen()
- {
- int i, ii;
- char c[] = "1\0";
- _clearscreen( _GCLEARSCREEN);
- _settextcolor(3);
- _settextposition(5,10);
- _outtext(" A B C D E F");
-
- for (i=7, ii=0; i <= 18; i+=2, ii++)
- {
- _settextposition(i, 9);
- c[0] = (char) ii + '1';
- _outtext(c);
- }
-
- _settextcolor(7);
- _settextposition(1,1);
- _outtext(" D E R B E S T R A F E R, (c) 1991 Ulrich Schmitz & toolbox");
- _settextposition(2,1);
- _outtext(" Offizieller Zweiter des toolbox-Explode-Turniers vom 25.06.1991");
- _settextposition(6,10);
- _outtext(" ╔═══╤═══╤═══╤═══╤═══╤═══╗");
- _settextposition(7,10);
- _outtext(" ║ │ │ │ │ │ ║");
- _settextposition(8,10);
- _outtext(" ╟───┼───┼───┼───┼───┼───╢");
- _settextposition(9,10);
- _outtext(" ║ │ │ │ │ │ ║");
- _settextposition(10,10);
- _outtext(" ╟───┼───┼───┼───┼───┼───╢ ╒═══╕ ");
- _settextposition(11,10);
- _outtext(" ║ │ │ │ │ │ ║ │ │ ");
- _settextposition(12,10);
- _outtext(" ╟───┼───┼───┼───┼───┼───╢ ╔══════╧═══╧══════╗ ");
- _settextposition(13,10);
- _outtext(" ║ │ │ │ │ │ ║ ║ ███ ███ ███ ███ ║ ");
- _settextposition(14,10);
- _outtext(" ╟───┼───┼───┼───┼───┼───╢ ║ █ █ █ █ █ █ █ █ ║ ");
- _settextposition(15,10);
- _outtext(" ║ │ │ │ │ │ ║ ║ ███ ███ ███ ███ ║ ");
- _settextposition(16,10);
- _outtext(" ╟───┼───┼───┼───┼───┼───╢ ╚═════════════════╝ ");
- _settextposition(17,10);
- _outtext(" ║ │ │ │ │ │ ║ Spielzug: 0 ");
- _settextposition(18,10);
- _outtext(" ╚═══╧═══╧═══╧═══╧═══╧═══╝");
-
- spielfeld();
- wer_beginnt();
-
- _settextcolor(MENSCH);
- _settextposition(7,40);
- _outtext("Ihr Zug : - ");
- }
-
- /*----------------------------------------------------------------*/
-
- int neues_spiel()
- {
- int retcode;
- char c;
- _settextposition(8,39);
- _outtext(" Noch ein Spiel (j/n)?");
- c = (char)getche();
- if ( c == 'j' || c == 'J' )
- retcode = TRUE;
- else retcode = FALSE;
-
- _settextposition(8,40);
- _outtext(" ");
-
- return retcode;
- }
-
- /*----------------------------------------------------------------*/
-
- int spielende()
- {
- int x, y, Spieler_1 = 0, Spieler_2 = 0, retcode = FALSE;
-
- for ( x = 0; x <= 5; x++ )
- {
- for ( y = 0; y <= 5; y++ )
- {
- if ( Spieler[x][y] == COMPUTER && Zug_Anzahl > 2 )
- Spieler_1 = COMPUTER;
-
- if ( Spieler[x][y] == MENSCH && Zug_Anzahl > 2 )
- Spieler_2 = MENSCH;
- }
- }
-
- Spieler_2 = Spieler_1 + Spieler_2;
-
- if ( Spieler_2 == COMPUTER )
- {
- retcode = TRUE;
- _settextcolor(COMPUTER);
- _settextposition(7,39);
- _outtext(" SIE HABEN VERLOREN! ");
- }
- else if ( Spieler_2 == MENSCH )
- {
- retcode = TRUE;
- _settextcolor(MENSCH);
- _settextposition(7,39);
- _outtext(" SIE HABEN GEWONNEN! ");
- }
- return retcode;
- }
-
- /*----------------------------------------------------------------*/
-
- sprengen()
- {
- int x, y;
- int max_wert[6][6] = {
- { 1, 2, 2, 2, 2, 1 },
- { 2, 3, 3, 3, 3, 2 },
- { 2, 3, 3, 3, 3, 2 },
- { 2, 3, 3, 3, 3, 2 },
- { 2, 3, 3, 3, 3, 2 },
- { 1, 2, 2, 2, 2, 1 }};
-
- spielfeld(); /* Vor der Sprengung */
-
- do {
- rumsbums = FALSE;
- for (x = 0; x <= 5; x++) {
- for (y = 0; y <= 5; y++) {
- if ( Feld[x][y] > max_wert[x][y] )
- {
-
- _settextcolor(3);
- _settextposition(7,39);
- _outtext(">> ES WIRD GESPRENGT! << ");
-
- _settextposition(7 + y * 2, 13 + x * 4);
- printf("%d",Feld[x][y]);
- _settextposition(7 + y * 2, 13 + x * 4);
-
- pause(350);
- _settextposition(7 + y * 2, 13 + x * 4);
- printf(" ");
- _settextposition(7 + y * 2, 13 + x * 4);
-
- pause(350);
- _settextposition(7 + y * 2, 13 + x * 4);
- printf("%d",Feld[x][y]);
- _settextposition(7 + y * 2, 13 + x * 4);
-
- pause(350);
- _settextposition(7 + y * 2, 13 + x * 4);
- printf(" ");
- _settextposition(7 + y * 2, 13 + x * 4);
-
- pause(350);
-
-
- /*... Die 4 Eckpunke ......................................*/
-
- if ( max_wert[x][y] == 1 )
- {
- if ( x == 0 && y == 0 )
- {
- Feld[x][y] -= 2;
-
- if (Feld[x][y] == 0)
- Spieler[x][y] = 0;
-
- Feld[x+1][y]++;
- Spieler[x+1][y] = Aktueller_Spieler;
-
- Feld[x][y+1]++;
- Spieler[x][y+1] = Aktueller_Spieler;
-
- spielfeld();
- }
-
- else if ( x == 5 && y == 0 )
- {
- Feld[x][y] -= 2;
-
- if ( Feld[x][y] == 0 )
- Spieler[x][y] = 0;
-
- Feld[x-1][y]++;
- Spieler[x-1][y] = Aktueller_Spieler;
-
- Feld[x][y+1]++;
- Spieler[x][y+1] = Aktueller_Spieler;
-
- spielfeld();
- }
-
- else if ( x == 0 && y == 5 )
- {
- Feld[x][y] -= 2;
-
- if (Feld[x][y] == 0)
- Spieler[x][y] = 0;
-
- Feld[x+1][y]++;
- Spieler[x+1][y] = Aktueller_Spieler;
-
- Feld[x][y-1]++;
- Spieler[x][y-1] = Aktueller_Spieler;
-
- spielfeld();
- }
-
- else if ( x == 5 && y == 5 )
- {
- Feld[x][y] -= 2;
-
- if (Feld[x][y] == 0)
- Spieler[x][y] = 0;
-
-
- Feld[x-1][y]++;
- Spieler[x-1][y] = Aktueller_Spieler;
-
- Feld[x][y-1]++;
- Spieler[x][y-1] = Aktueller_Spieler;
-
- spielfeld();
- }
- }
- /*...... Ende 4 Eckpunkte, Berechnung der Seiten ..........*/
-
- else if ( max_wert[x][y] == 2 )
- {
-
- if ( y == 0 )
- {
- Feld[x][y] -= 3;
-
- if (Feld[x][y] == 0)
- Spieler[x][y] = 0;
-
- Feld[x+1][y]++;
- Spieler[x+1][y] = Aktueller_Spieler;
-
- Feld[x-1][y]++;
- Spieler[x-1][y] = Aktueller_Spieler;
-
- Feld[x][y+1]++;
- Spieler[x][y+1] = Aktueller_Spieler;
-
- spielfeld();
- }
-
- else if ( y == 5 )
- {
- Feld[x][y] -= 3;
-
- if (Feld[x][y] == 0)
- Spieler[x][y] = 0;
-
- Feld[x+1][y]++;
- Spieler[x+1][y] = Aktueller_Spieler;
-
- Feld[x-1][y]++;
- Spieler[x-1][y] = Aktueller_Spieler;
-
- Feld[x][y-1]++;
- Spieler[x][y-1] = Aktueller_Spieler;
-
- spielfeld();
- }
-
-
- else if ( x == 0 )
- {
- Feld[x][y] -= 3;
-
- if (Feld[x][y] == 0)
- Spieler[x][y] = 0;
-
- Feld[x][y-1]++;
- Spieler[x][y-1] = Aktueller_Spieler;
-
- Feld[x][y+1]++;
- Spieler[x][y+1] = Aktueller_Spieler;
-
- Feld[x+1][y]++;
- Spieler[x+1][y] = Aktueller_Spieler;
-
- spielfeld();
- }
-
- else if ( x == 5 )
- {
- Feld[x][y] -= 3;
-
- if (Feld[x][y] == 0)
- Spieler[x][y] = 0;
-
- Feld[x][y-1]++;
- Spieler[x][y-1] = Aktueller_Spieler;
-
- Feld[x][y+1]++;
- Spieler[x][y+1] = Aktueller_Spieler;
-
- Feld[x-1][y]++;
- Spieler[x-1][y] = Aktueller_Spieler;
-
- spielfeld();
- }
- }
-
- /*...... Ende der Seiten, Berechnung komplettes Mittelfeld.*/
-
- else if ( max_wert[x][y] == 3 )
- {
- Feld[x][y] -= 4;
-
- if (Feld[x][y] == 0)
- Spieler[x][y] = 0;
-
- Feld[x][y-1]++;
- Spieler[x][y-1] = Aktueller_Spieler;
-
- Feld[x][y+1]++;
- Spieler[x][y+1] = Aktueller_Spieler;
-
- Feld[x-1][y]++;
- Spieler[x-1][y] = Aktueller_Spieler;
-
- Feld[x+1][y]++;
- Spieler[x+1][y] = Aktueller_Spieler;
-
- spielfeld();
- }
- /*.........................................................*/
- y = 6;
- rumsbums = TRUE;
- }
- } /* Ende innere FOR-Schleife */
- } /* Ende äußere FOR-Schleife */
-
- } while ( rumsbums == TRUE && !spielende() ); /* weiter sprengen?*/
- }
- /*----------------------------------------------------------------*/
-
- void main()
- {
- int i;
- srand(1); /* Zufallszahlen Generator initialisieren */
- start:
- initialisieren();
- feld_zeichnen();
-
- if ( Aktueller_Spieler == COMPUTER )
- {
- computerzug();
- sprengen();
- }
-
- while ( !spielende() )
- {
- zug_eingeben();
- sprengen();
- if ( !spielende() )
- {
- computerzug();
- spielfeld();
- sprengen();
- }
- }
-
- if ( neues_spiel() == TRUE )
- goto start;
-
- _clearscreen( _GCLEARSCREEN); /* Programm beenden und Bild löschen */
- }
- /*----------------- ENDE VON BESTRAFE.C ---------------------------*/
-