# 3 gewinnt



## lz9c1j (5. Januar 2005)

also habe wiedermal ne kleine frage. ich möchte das 3 gewinnt programmieren. das sieht (sollte) dann so aussehen.

A B C
------------------
1 | | | |
------------------
2 | | | |
------------------
3 | | | |
----------------- 

jetzt die frage. ich möchte das man ein feld eingeben kann. z.B A1 und dass es dann ein x macht. wie mach ich jetzt dort das x rein? 

hoffe auf gute antworten

nimmt die abstände leider nicht mit. sollten immer 5 abstände sein dazwischen


----------



## lz9c1j (5. Januar 2005)

habe es jetzt trotzdem anderst gemacht. ich habe jedem feld eine nummer gegeben 1-9. ich habe es zahl1-zahl9 gennent. wie kann ich in char eine zahl eingeben. ich möchte eben, wenn einer ein feld gewählt hat das dort ein x oder ein o steht. bei int geht das ja nicht. und bei char müsste ich die felder zuerst benennen mit zahlen. aber wie? sonst mach ich es im schlimmsten fall mit a, b usw.


----------



## revelation (5. Januar 2005)

Hi!

Also mit den Informationen kann man eigentlich alles antworten!

Was hast du bis jetzt überhaupt an Code?
Welche Sprache C oder C++?
Wie werden die Felder gespeichert?
Console oder GUI? (Eingabe)

Wenn du diese Fragen beantwortet hast, kann man dir vielleicht helfen!

Gruß
Johannes


----------



## lz9c1j (5. Januar 2005)

#include <stdio.h>

void main()

{

int zahl1=1;
int zahl2=2;
int zahl3=3;
int zahl4=4;
int zahl5=5;
int zahl6=6;
int zahl7=7;
int zahl8=8;
int zahl9=9;


 
printf("\n ------- ------- ------- ");
printf("\n| | | |");
printf("\n| %i | %i | %i |", zahl1, zahl2, zahl3);
printf("\n| | | |");
printf("\n ------- ------- ------- ");
printf("\n| | | |");
printf("\n| %i | %i | %i |", zahl4, zahl5, zahl6);
printf("\n| | | |");
printf("\n ------- ------- ------- ");
printf("\n| | | |");
printf("\n| %i | %i | %i |", zahl7, zahl8, zahl9);
printf("\n| | | |");
printf("\n ------- ------- ------- ");


getchar();

}

hoffentlich sind da alle nötigen fragen beantwortet. ausser die letzte verstehe ich nicht richtig. ich wollte einfach mal das spielfeld machen. und seit dort bin ich mir folgende frage von oben am überlegen. müsste man die felder vielleich in char änder. will eben, wenn man ein feld gewählt hat, dass ein x oder o erscheint anstelle der zahl. 

thx for help

edith: man sieht nie schön aus  nimmt die abstände nie mit


----------



## PixelShader (5. Januar 2005)

> man sieht nie schön aus  nimmt die abstände nie mit


benutze [ CODE ] [ /CODE ] 

nimm doch ein 3x3 Matrix

```
char Feld[3][3];
int y,x;

// am anfang des Spiels
for(x= 0;x < 3;x++)
for(y= 0;y < 3;y++)
{
  Feld[x][y] = ' ';
}

// das Malen
for(y= 0;y < 3;y++)
{
  printf("\n ------- ------- ------- ");
  printf("\n|       |       |       |");
  printf("\n|   %c   |   %c   |   %c   |", Feld[0][y], Feld[1][y], Feld[2][y]);
  printf("\n|       |       |       |");
}
```

Du musst nur noch in das entsprechende Feld[][] ein 'x' oder 'o' eintragen


----------



## lz9c1j (5. Januar 2005)

sieht gut aus, aber ich verstehe es leider nicht ganz. nämlich: wie heisst das erste feld auf der zweiten zeile. ach feld[0] [y]


----------



## revelation (5. Januar 2005)

Hi,

erst mal zur letzen Frage. Consolen-Anwendungen zeigen dem User im Gegensatz zu GUI-Anwendungen nur Text als Programmausgaben. Du hast die Frage allerdings durch deinen Code-Schnipsel beantwortet: Es handelt sich um eine Consolenanwendung.

Noch ein kleiner Hinweis: Benutze beim Posten von Code IMMER die dafür vorgesehenen Code-Tags! So bleiben die Einrückungen erhalten!
(Ich habs mal für dich gemacht )

```
#include <stdio.h>;

void main()
{
    int zahl1=1;
    int zahl2=2;
    int zahl3=3;
    int zahl4=4;
    int zahl5=5;

    int zahl6=6;
    int zahl7=7;
    int zahl8=8;
    int zahl9=9;

    printf("\n ------- ------- ------- ");

    printf("\n| | | |");
    printf("\n| %i | %i | %i |", zahl1, zahl2, zahl3);
    printf("\n| | | |");
    printf("\n ------- ------- ------- ");
    printf("\n| | | |");

    printf("\n| %i | %i | %i |", zahl4, zahl5, zahl6);
    printf("\n| | | |");
    printf("\n ------- ------- ------- ");
    printf("\n| | | |");
    printf("\n| %i | %i | %i |", zahl7, zahl8, zahl9);

    printf("\n| | | |");
    printf("\n ------- ------- ------- ");

    getchar();

}
```
So zurück zu deinem Problem. Du hast die Speicherung der Daten sehr unpraktisch gelöst. Daher werden die weiteren Funktionen ebenfalls sehr unpraktisch und unschön, wenn du das nicht ändern willst.

Ich würde vorschlagen, das ganze in einer logischen Matrix (zweidimensionaler Array) zu speichern.
Näheres dazu bei google oder hier im Forum.

Wenn dir das zu kompliziert ist, kannst du mit scanf einfach einen String einlesen und diesen in einer länferen Fallunterscheidung deinen Variabeln zuordnen.

Kleiner Ausschnitt:

```
char buffer[32]; // Dein Eingabe-String

scanf("%s", buffer); // Einlesen der Daten, AdressOf-Operator überflüssig da buffer char * ist

// Zuordnung der Werte
if(strcmp("A1", buffer) == 0)
  zahl1 = 88; // ASCII-Code für X speichern
....
```

Gruß
Johannes


----------



## PixelShader (5. Januar 2005)

> (Ich habs mal für dich gemacht  ):


leider etwas falsch, denn die Leerzeichen stimmen nicht. das Ergebniss würde am Ende so ziemlich unschoen aussehen.   
----
das erste Feld in der zweiten Zeile Feld[0][1]

ich mal ma das ganze ding auf:

```
Feld[0][0] Feld[1][0] Feld[2][0]
Feld[0][1] Feld[1][1] Feld[2][1]
Feld[0][2] Feld[1][2] Feld[2][2]
```


----------



## lz9c1j (5. Januar 2005)

ok langsam kommt es. und wenn ich jetzt die felder anschreiben möchte. wäre es besser draussen a und oben 1 oder auch in die kästchen rein mit 1. komme mit dem matrix anschreiben noch nicht ganz klar


----------



## revelation (5. Januar 2005)

Hi,

@ Pixelshader: Ich sprach auch nur von der Codeeinrückung...... 

Noch was: Ich glaube nicht, dass es ihm irgendetwas bringt, wenn du ihm hier erstens eine komplette Lösung aufschreibst und zweitens darin Elemente benutzt, die er gar nicht versteht!  

Der Lerneffekt ist gleich Null! Na gut er hat ein lauffähiges Programm...... Aber ich bezweifle stark, dass er in der Lage ist, dieses ohne Hilfe neu zu formulieren.....
(Deshalb auch mein wirklich unschöner Ansatz!)

Gruß
Johannes


----------



## lz9c1j (5. Januar 2005)

@relevation: es wandelt die 88 nicht um, in ein X. habe das es die zeichnung wiederholt, schnell eine variable definiert etwas. lösche sie nacher schon wieder, ist nur das du mal das programm siehst und vielleicht den fehler findest. thx



```
#include <stdio.h>
void main()
{
	 
	 int zahl1=1;
	 int zahl2=2;
	 int zahl3=3;
	 int zahl4=4;
	 int zahl5=5;
	 int zahl6=6;
	 int zahl7=7;
	 int zahl8=8;
	 int zahl9=9;
	 int etwas=0;
	 
	 char spieler1[30];
	 char spieler2[30];
	 char buffer[5];
	 printf("Namen des Spieler 1: ");
	 scanf("%c", &spieler1);
	 fflush(stdin);
	 
	 printf("Namen des Spieler 2: ");
	 scanf("%c", &spieler2);
	 fflush(stdin);
	 while (etwas==0)
	 {	 
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %i   |   %i   |   %i   |", zahl1, zahl2, zahl3);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %i   |   %i   |   %i   |", zahl4, zahl5, zahl6);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %i   |   %i   |   %i   |", zahl7, zahl8, zahl9);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 
		 
		 printf("Geben sie eine zahl ein: ");
		 scanf("%s", buffer); // Einlesen der Daten, AdressOf-Operator überflüssig da buffer char * ist
	
		 // Zuordnung der Werte
		 if(strcmp("1", buffer) == 0)
		 {
			zahl1 = 88; // ASCII-Code für X speichern
		 }
	 }  
	 getchar();
	 
}
```


----------



## PixelShader (5. Januar 2005)

@relevation: an Beispielen lernt man. ausserdem hab ich nicht gesagt dass das der Code dafur sein MUSS, nur son Beischpiel damit man vergleichen kann  das dass ich ein schlechter Lehrer bin, wusste ich auch so 

@lz9c1j: dafur muss du in printf() nicht %i sondern %c nehmen


----------



## revelation (5. Januar 2005)

Hi,

@ PixelShader: lol 
Du hast jetzt aber auch einen Fehler gemacht: Das X wird zwar richtig angezeigt, jedoch die Zahlen nicht..... 

Folgende Änderungen:

Definiere deine Variabeln zahl1 usw. als char (Muss nicht, ist hier aber sinnvoll.).
Weise ihnen die nicht die Zahlen sonder die Zeichn zu. Das erreichst du durch:

```
char zahl1 = '1';
```

Gruß
Johannes

PS: Vergiss nicht das
	
	
	



```
while (etwas==0)
```


----------



## lz9c1j (5. Januar 2005)

ahhhhhh. jetzt ist es klar. wusste nicht dass man int in %c machen darf. aber jetzt sehen die Zahlen 1-9 nicht mehr schoen aus. Weiss jemand gerade einen guten Link zur ASCI-Tabelle sonst gehe ich nämlich suchen


----------



## PixelShader (5. Januar 2005)

weisst doch alles
http://www.torsten-horn.de/techdocs/ascii.htm

statt ASCII Tabelle nimm lieber den C++ Feauture einfach den Buchstaben in Anführungszeichen.  x = '1'  x='A'


----------



## lz9c1j (5. Januar 2005)

ah ist jetzt egal, da ich von einer homepage die asci-tabelle rauskopiert habe. also jetzt sollte ich gerade keine probleme haben und probiere einfach mal. danke für eure schnelle hilfe. werde vielleicht später nochmals fragen


----------



## revelation (5. Januar 2005)

Hi,

lol - Wer lesen kann, ist klar im Vorteil.... 
Guckt mal in meinen letzten Post.......


----------



## lz9c1j (5. Januar 2005)

ALSO (capslock) bin schon ein bisschen weitergekommen. jetzt habe ich wieder ein problem, dass ich manchmal einfach habe. trotz dem getchar(); geht mein Fenster nach dem Sieg einfach zu. Wieso? Kann mir das jemand sagen.



```
#include <stdio.h>
void main()
{
	 
	 int zahl1=65;
	 int zahl2=66;
	 int zahl3=67;
	 int zahl4=68;
	 int zahl5=69;
	 int zahl6=70;
	 int zahl7=71;
	 int zahl8=72;
	 int zahl9=73;
	 int ablaufzahl=1;
	 char buffer[5];
	 printf("Willkommen beim Tic Tac Toe Game");

	 while (ablaufzahl==1)
	 {   
		 
		 printf("\n\nSpieler 1: x\n");
		 printf("Spieler 2: o\n\n");  
		 
		 
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl1, zahl2, zahl3);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl4, zahl5, zahl6);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl7, zahl8, zahl9);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 
		 
		 printf("\n\nSpieler 1 ist an der Reihe.Geben sie bitte einen Buchstaben ein: ");
		 scanf("%s", buffer); // Einlesen der Daten, AdressOf-Operator überflüssig da buffer char * ist
	
		 // Zuordnung der Werte
		 if(strcmp("A", buffer) == 0  && zahl1!=11 && zahl1!=120)
		   zahl1 = 120; // ASCII-Code für X speichern
		 if(strcmp("B", buffer) == 0  && zahl2!=11 && zahl2!=120)
		   zahl2 = 120; // ASCII-Code für X speichern
		   
		 if(strcmp("C", buffer) == 0  && zahl3!=11 && zahl3!=120)
		   zahl3 = 120; 
		   
		 if(strcmp("D", buffer) == 0  && zahl4!=11 && zahl4!=120)
		   zahl4 = 120;
		   
		 if(strcmp("E", buffer) == 0  && zahl5!=11 && zahl5!=120)
		   zahl5 = 120; 
		   
		 if(strcmp("F", buffer) == 0  && zahl6!=11 && zahl6!=120)
		   zahl6 = 120; 
		   
		 if(strcmp("G", buffer) == 0  && zahl7!=11 && zahl7!=120)
		   zahl7 = 120;   
		   
		 if(strcmp("H", buffer) == 0  && zahl8!=11 && zahl8!=120)
		   zahl8 = 120; 
		   
		 if(strcmp("I", buffer) == 0  && zahl9!=11 && zahl9!=120)
		   zahl9 = 120; 
			
		 if (zahl1==120 && zahl2==120 && zahl3==120)
		   ablaufzahl=2;
		   
		 if (zahl4==120 && zahl5==120 && zahl6==120)
		   ablaufzahl=2;
		   
		 if (zahl7==120 && zahl8==120 && zahl9==120)
		   ablaufzahl=2;
		   
		 if (zahl1==120 && zahl4==120 && zahl7==120)
		  ablaufzahl=2;
		   
		 if (zahl2==120 && zahl5==120 && zahl8==120)
		   ablaufzahl=2;  
		   
		 if (zahl3==120 && zahl6==120 && zahl9==120)
		   ablaufzahl=2;  
		   
		 if (zahl1==120 && zahl5==120 && zahl9==120)
		   ablaufzahl=2;
		   
		 if (zahl3==120 && zahl5==120 && zahl7==120)
		   ablaufzahl=2; 
	 } 
	 
	 if (ablaufzahl==2) 
	 {
	   printf("\n\n\nSpieler 1 hat das Spiel gewonnen");
	   
		 printf("\n\n\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl1, zahl2, zahl3);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl4, zahl5, zahl6);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl7, zahl8, zahl9);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
	   
	   printf("\n\n\nWollen Sie noch ein Spiel machen");
	 
	 }
	 
	 getchar();
	 
}
```


----------



## PixelShader (5. Januar 2005)

nach den letzten tippen in scanf() bleiben noch Tasturbefehle über, die warten bis so eine Funktion wie getchar() diese übernimmt. Beispiel, wenn Windows mal hängenbleibt, und du viele Tasten drückst, dann nach einiger Zeit weden diese Tasten einfach alle auf einmal wahrgenommen!
also, lösung lautet so:

```
fflush(stdin); // Tastaturbuffer löschen
getchar();
```
der Befehl fflush(stdin); löscht die Tastaturwarteschlange.


----------



## lz9c1j (5. Januar 2005)

man wieso. jetzt funktioniert gar nichts mehr. also erster fehler ist, dass es nicht zum 2 spieler geht. und zweiter fehler ist das es nach dem sieg immernoch das fenster schliesst. wieso? bitte um hilfe 


```
#include <stdio.h>
void main()
{
	 
	 int zahl1=65;
	 int zahl2=66;
	 int zahl3=67;
	 int zahl4=68;
	 int zahl5=69;
	 int zahl6=70;
	 int zahl7=71;
	 int zahl8=72;
	 int zahl9=73;
	 int ablaufzahl=1;
	 char buffer[5];
	 printf("Willkommen beim Tic Tac Toe Game");

	 while (ablaufzahl==1)
	 {   
		 
		 printf("\n\nSpieler 1: x\n");
		 printf("Spieler 2: o\n\n");  
		 
		 
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl1, zahl2, zahl3);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl4, zahl5, zahl6);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl7, zahl8, zahl9);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 
		 
		 printf("\n\nSpieler 1 ist an der Reihe.Geben sie bitte einen Buchstaben ein: ");
		 scanf("%s", buffer); // Einlesen der Daten, AdressOf-Operator überflüssig da buffer char * ist
		 fflush(stdin);
	
		 // Zuordnung der Werte
		 if(strcmp("A", buffer) == 0  && zahl1!=111 && zahl1!=120)
		   zahl1 = 120; // ASCII-Code für X speichern
		 if(strcmp("B", buffer) == 0  && zahl2!=111 && zahl2!=120)
		   zahl2 = 120;
		   
		 if(strcmp("C", buffer) == 0  && zahl3!=111 && zahl3!=120)
		   zahl3 = 120; 
		   
		 if(strcmp("D", buffer) == 0  && zahl4!=111 && zahl4!=120)
		   zahl4 = 120;
		   
		 if(strcmp("E", buffer) == 0  && zahl5!=111 && zahl5!=120)
		   zahl5 = 120; 
		   
		 if(strcmp("F", buffer) == 0  && zahl6!=111 && zahl6!=120)
		   zahl6 = 120; 
		   
		 if(strcmp("G", buffer) == 0  && zahl7!=111 && zahl7!=120)
		   zahl7 = 120;   
		   
		 if(strcmp("H", buffer) == 0  && zahl8!=111 && zahl8!=120)
		   zahl8 = 120; 
		   
		 if(strcmp("I", buffer) == 0  && zahl9!=111 && zahl9!=120)
		   zahl9 = 120; 
			
		 if (zahl1==120 && zahl2==120 && zahl3==120)
		   ablaufzahl=2;
		   
		 if (zahl4==120 && zahl5==120 && zahl6==120)
		   ablaufzahl=2;
		   
		 if (zahl7==120 && zahl8==120 && zahl9==120)
		   ablaufzahl=2;
		   
		 if (zahl1==120 && zahl4==120 && zahl7==120)
		  ablaufzahl=2;
		   
		 if (zahl2==120 && zahl5==120 && zahl8==120)
		   ablaufzahl=2;  
		   
		 if (zahl3==120 && zahl6==120 && zahl9==120)
		   ablaufzahl=2;  
		   
		 if (zahl1==120 && zahl5==120 && zahl9==120)
		   ablaufzahl=2;
		   
		 if (zahl3==120 && zahl5==120 && zahl7==120)
		   ablaufzahl=2; 
		   
		 ablaufzahl=3;
	 } 
	 
	 
	 if (ablaufzahl==2) 
	 {
	   printf("\n\n\nSpieler 1 hat das Spiel gewonnen");
	   
		 printf("\n\n\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl1, zahl2, zahl3);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl4, zahl5, zahl6);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl7, zahl8, zahl9);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
	   
	   printf("\n\n\nWollen Sie noch ein Spiel machen");
	 }	 
	 
	 while (ablaufzahl==3)
	 {
		 
		 printf("\n\nSpieler 1: x\n");
		 printf("Spieler 2: o\n\n");  
		 
		 
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl1, zahl2, zahl3);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl4, zahl5, zahl6);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl7, zahl8, zahl9);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 
		 
		 printf("\n\nSpieler 2 ist an der Reihe.Geben sie bitte einen Buchstaben ein: ");
		 scanf("%s", buffer); // Einlesen der Daten, AdressOf-Operator überflüssig da buffer char * ist
		 fflush(stdin);
	
		 // Zuordnung der Werte
		 if(strcmp("A", buffer) == 0  && zahl1!=11 && zahl1!=120)
		   zahl1 = 11; // ASCII-Code für X speichern
		 if(strcmp("B", buffer) == 0  && zahl2!=11 && zahl2!=120)
		   zahl2 = 11; // ASCII-Code für X speichern
		   
		 if(strcmp("C", buffer) == 0  && zahl3!=11 && zahl3!=120)
		   zahl3 = 11; 
		   
		 if(strcmp("D", buffer) == 0  && zahl4!=11 && zahl4!=120)
		   zahl4 = 11;
		   
		 if(strcmp("E", buffer) == 0  && zahl5!=11 && zahl5!=120)
		   zahl5 = 11; 
		   
		 if(strcmp("F", buffer) == 0  && zahl6!=11 && zahl6!=120)
		   zahl6 = 11; 
		   
		 if(strcmp("G", buffer) == 0  && zahl7!=11 && zahl7!=120)
		   zahl7 = 11;   
		   
		 if(strcmp("H", buffer) == 0  && zahl8!=11 && zahl8!=120)
		   zahl8 = 11; 
		   
		 if(strcmp("I", buffer) == 0  && zahl9!=11 && zahl9!=120)
		   zahl9 = 11; 
			
		 if (zahl1==11 && zahl2==11 && zahl3==11)
		   ablaufzahl=4;
		   
		 if (zahl4==11 && zahl5==11 && zahl6==11)
		   ablaufzahl=4;
		   
		 if (zahl7==11 && zahl8==11 && zahl9==11)
		   ablaufzahl=4;
		   
		 if (zahl1==121 && zahl4==11 && zahl7==11)
		  ablaufzahl=4;
		   
		 if (zahl2==11 && zahl5==11 && zahl8==11)
		   ablaufzahl=4;  
		   
		 if (zahl3==11 && zahl6==11 && zahl9==11)
		   ablaufzahl=4;  
		   
		 if (zahl1==11 && zahl5==11 && zahl9==11)
		   ablaufzahl=4;
		   
		 if (zahl3==11 && zahl5==11 && zahl7==11)
		   ablaufzahl=4; 
		   
		 ablaufzahl=1;
		 
			  
	 
	 
	 if (ablaufzahl==4) 
	 {
	   printf("\n\n\nSpieler 2 hat das Spiel gewonnen");
	   
		 printf("\n\n\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl1, zahl2, zahl3);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl4, zahl5, zahl6);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl7, zahl8, zahl9);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
	   
	   printf("\n\n\nWollen Sie noch ein Spiel machen");
	   
	 
	 }
	 getchar();
	 
}
```


----------



## PixelShader (5. Januar 2005)

Ich hab den bei mir laufen lassen, und nach Syntaxfehler-Korrektur da kommt folgendes:
erster Spieler zieht
zweiter Spieler zieht
ende des programms

Die Fehler:

1.
statt

```
if (zahl1==121 && zahl4==11 && zahl7==11)
  ablaufzahl=4;
```
muss

```
if (zahl1==11 && zahl4==11 && zahl7==11)
  ablaufzahl=4;
```

2.

```
while (ablaufzahl==3)
	 {
```
Die Klammer } fur diese Schleife ist nicht da wo sie sein soll.

3.
schau deinen code genau an. ich kürze mal alles drum und dran. da steht eigentlich


```
#include <stdio.h>
void main()
{
...
           while (ablaufzahl==1)
           {  
...
           } 
	 
           if (ablaufzahl==2) 
           {
...
           }	 
	 
           while (ablaufzahl==3)
           {
...
           }  << diese Klammer fehlte uebrigens

           if (ablaufzahl==4) 
           {
...
           }
           getchar();
}
```
Nach einem durchgang Spieler 1, dann Spieler 2, dann Ende. denn du hast die globalste Schleife vergessen, die den ganzen Code nochmal wiederholt.Mach das per while() oder per goto;


----------



## lz9c1j (5. Januar 2005)

genauuu. danke dir vielmals. denn mit der } Klammer habe ich noch gefunden. Aber diesen mit der while () hätte ich nie mehr gefunden, da ich ihn am Anfang gelöscht habe. Juhu. Fast bin ich fertig. Jetzt muss ich nur den Sieg rechtzeititg feststellen. Es gibt ihn noch nicht an. Also danke dir für den aufwand


----------



## petrovice (5. Januar 2005)

Hallo,
beim durschauen heute morgen bin ich auf diesen 3-Gewinnt-Thread gestossen und hab nun auch mit der Programmierung, allerdings unter Visual C++, angefangen. 
Da ich erst seit kurzer Zeit programmiere, stehe ich nun vor einem kleinem Problem.
Bei mir ist das Spielfeld in einem char-Array gespeichert, während dem Ablauf soll nun dieses Array sehr oft erneut aufgebaut werden.

Meine Frage ist nun, ob ich diese Ausgabe mit der Hilfe einer Funktion auslagern kann um beliebig oft, innerhalb meines Progs, wieder aufrufen zu können.

Meine Ausgabe sieht folgendermassen aus:

```
// Ausgabe Anfang//    
system("cls");   
cout << "\t3 Gewinnt\n";    
cout << "\t---------\n\n";    
cout << "\t0\t1\t2\n\n";    
for( yachse = 0; yachse < 3; yachse++)      // Ausgabe des Spiel-Array//    
    {      
       cout << "   " << yachse;         
            for( xachse = 0; xachse < 3; xachse++)        
                {          
                    cout << "\t" << feld[yachse][xachse];         
                }  	
       cout << endl << endl;    
    }   
//Ausgabe Ende//
```


----------



## PixelShader (5. Januar 2005)

> Meine Frage ist nun, ob ich diese Ausgabe mit der Hilfe einer Funktion auslagern kann um beliebig oft, innerhalb meines Progs, wieder aufrufen zu können.


 kannst du natürlich, und der Code ist soweit in ordnung. Du musst nur noch die funktionsdeklaration um den Code schreiben, z.B. MaleFeld:

```
void MaleFeld()
{
/* dein Code hier */
}
```


----------



## lz9c1j (6. Januar 2005)

ICH MUSS (capslock) leider nochmals zurück zu meinem Programm kommen. Habe es für mich schön formatiert und keine Syntaxfehler mehr gefunden. Das Programm ist eben ein gratis, genauer gesagt Dev-C++ man kann aber auch C machen. Jetzt die Frage. Wieso gibt es nie die Winner-Meldung aus? Mein letzter Punkt, dann laueft das Programm.



```
#include <stdio.h>
void main()
{
	 
	 int zahl1=65;
	 int zahl2=66;
	 int zahl3=67;
	 int zahl4=68;
	 int zahl5=69;
	 int zahl6=70;
	 int zahl7=71;
	 int zahl8=72;
	 int zahl9=73;
	 int ablaufzahl=1;
	 char buffer[5];
	 int etwas=0;
	 printf("Willkommen beim Tic Tac Toe Game");
while (etwas==0)
{
	  
	 //Spieler 1 ist an der Reihe
	 if (ablaufzahl==1)
	 {   
		 
		 printf("\n\nSpieler 1: x\n");
		 printf("Spieler 2: o\n\n");  
		 
		 
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl1, zahl2, zahl3);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl4, zahl5, zahl6);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl7, zahl8, zahl9);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 
		 
		 printf("\n\nSpieler 1 ist an der Reihe.Geben sie bitte einen Buchstaben ein: ");
		 scanf("%s", buffer); // Einlesen der Daten, AdressOf-Operator überflüssig da buffer char * ist
		 fflush(stdin);
	
		 // Zuordnung der Werte
		 if(strcmp("A", buffer) == 0  && zahl1!=111 && zahl1!=120)
		 {
		   zahl1 = 120; // ASCII-Code für X speichern
		 }
		 
		 if(strcmp("B", buffer) == 0  && zahl2!=111 && zahl2!=120)
		 {
		   zahl2 = 120;
		 }
		   
		 if(strcmp("C", buffer) == 0  && zahl3!=111 && zahl3!=120)
		 {
		   zahl3 = 120; 
		 }
		   
		 if(strcmp("D", buffer) == 0  && zahl4!=111 && zahl4!=120)
		 {
		   zahl4 = 120;
		 }
		   
		 if(strcmp("E", buffer) == 0  && zahl5!=111 && zahl5!=120)
		 {
		   zahl5 = 120; 
		 }
		   
		 if(strcmp("F", buffer) == 0  && zahl6!=111 && zahl6!=120)
		 {
		   zahl6 = 120; 
		 }
		   
		 if(strcmp("G", buffer) == 0  && zahl7!=111 && zahl7!=120)
		 {
		   zahl7 = 120; 
		 }  
		 
		 if(strcmp("H", buffer) == 0  && zahl8!=111 && zahl8!=120)
		 {
		   zahl8 = 120; 
		 }
		   
		 if(strcmp("I", buffer) == 0  && zahl9!=111 && zahl9!=120)
		 {
		   zahl9 = 120; 
		 }
		   
		 ablaufzahl = 2;
		   
	 }
		
		
	 //Überprüfung ob Spieler 1 Tic Tac Toe hat
	 if (ablaufzahl==2)
	 {
			 
		 if (zahl1==120 && zahl2==120 && zahl3==120)
		 {
		   ablaufzahl = 3;
		 }
		   
		 if (zahl4==120 && zahl5==120 && zahl6==120)
		 {
		   ablaufzahl = 3;
		 }
		   
		 if (zahl7==120 && zahl8==120 && zahl9==120)
		 {
		   ablaufzahl = 3;
		 }
		  
		 if (zahl1==120 && zahl4==120 && zahl7==120)
		 {
		  ablaufzahl = 3;
		 }
		   
		 if (zahl2==120 && zahl5==120 && zahl8==120)
		 {
		   ablaufzahl = 3;  
		 }
		   
		 if (zahl3==120 && zahl6==120 && zahl9==120)
		 {
		   ablaufzahl = 3;  
		 }
		   
		 if (zahl1==120 && zahl5==120 && zahl9==120)
		 {
		   ablaufzahl = 3;
		 }
		   
		 if (zahl3==120 && zahl5==120 && zahl7==120)
		 {
		   ablaufzahl = 3; 
		 }
		   
		 ablaufzahl = 4;
	 }
	   
		   
	 //Wenn Spieler 1 Tic Tac Toe hat, kommt die Winner-Meldung
	 if (ablaufzahl==3) 
	 {
		 printf("\n\n\nSpieler 1 hat das Spiel gewonnen");
   
		 printf("\n\n\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl1, zahl2, zahl3);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl4, zahl5, zahl6);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl7, zahl8, zahl9);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 
		 ablaufzahl = 7;
		   
	 }   
	  
	  
	 //Wenn Spieler 1 kein Tic Tac Toe hat, ist Spieler 2 an der Reihe
	 if (ablaufzahl==4)
	 {
					   
		 printf("\n\nSpieler 1: x\n");
		 printf("Spieler 2: o\n\n");  
		 
		 
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl1, zahl2, zahl3);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl4, zahl5, zahl6);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl7, zahl8, zahl9);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 
		 
		 printf("\n\nSpieler 2 ist an der Reihe.Geben sie bitte einen Buchstaben ein: ");
		 scanf("%s", buffer); // Einlesen der Daten, AdressOf-Operator überflüssig da buffer char * ist
		 fflush(stdin);
	
		 // Zuordnung der Werte
		 if(strcmp("A", buffer) == 0  && zahl1!=111 && zahl1!=120)
		 {
		   zahl1 = 111; // ASCII-Code für X speichern
		 }  
		 
		 if(strcmp("B", buffer) == 0  && zahl2!=111 && zahl2!=120)
		 {
		   zahl2 = 111; // ASCII-Code für X speichern
		 }
		   
		 if(strcmp("C", buffer) == 0  && zahl3!=111 && zahl3!=120)
		 {
		   zahl3 = 111; 
		 }
		   
		 if(strcmp("D", buffer) == 0  && zahl4!=111 && zahl4!=120)
		 {
		   zahl4 = 111;
		 }
		   
		 if(strcmp("E", buffer) == 0  && zahl5!=111 && zahl5!=120)
		 {
		   zahl5 = 111; 
		 }
		   
		 if(strcmp("F", buffer) == 0  && zahl6!=111 && zahl6!=120)
		 {
		   zahl6 = 111; 
		 } 
		 
		 if(strcmp("G", buffer) == 0  && zahl7!=111 && zahl7!=120)
		 {
		   zahl7 = 111;   
		 }		   
		 
		 if(strcmp("H", buffer) == 0  && zahl8!=111 && zahl8!=120)
		 {
		   zahl8 = 111; 
		 }
		 
		 if(strcmp("I", buffer) == 0  && zahl9!=111 && zahl9!=120)
		 {
		   zahl9 = 111; 
		 }
		  
		 ablaufzahl = 5;
		   
	 }
		   
		   
	 //Überprüfung ob Spieler 2 Tic Tac Toe hat
	 if (ablaufzahl==5)
	 {
					   
		 if (zahl1==111 && zahl2==111 && zahl3==111)
		 {
		   ablaufzahl = 6;
		 }
		   
		 if (zahl4==111 && zahl5==111 && zahl6==111)
		 {  
		   ablaufzahl = 6;
		 }  
		 if (zahl7==111 && zahl8==111 && zahl9==111)
		 {  
		   ablaufzahl = 6;
		 }  
		 
		 if (zahl1==111 && zahl4==111 && zahl7==111)
		 {
		   ablaufzahl = 6;
		 }  
		 if (zahl2==111 && zahl5==111 && zahl8==111)
		 {
		   ablaufzahl = 6;  
		 }  
		 
		 if (zahl3==111 && zahl6==111 && zahl9==111)
		 {
		   ablaufzahl = 6;  
		 }  
		 
		 if (zahl1==111 && zahl5==111 && zahl9==111)
		 {
		   ablaufzahl = 6;
		 }  
		 
		 if (zahl3==111 && zahl5==111 && zahl7==111)
		 {
		   ablaufzahl = 6; 
		 }
		 
		 ablaufzahl = 1;  
	 }

	 //Wenn Spieler 2 Tic Tac Toe hat, kommt die Winner-Meldung
	 if (ablaufzahl==6) 
	 {
						
	   printf("\n\n\nSpieler 2 hat das Spiel gewonnen");
	   
		 printf("\n\n\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl1, zahl2, zahl3);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl4, zahl5, zahl6);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
		 printf("\n|	   |	   |	   |");
		 printf("\n|   %c   |   %c   |   %c   |", zahl7, zahl8, zahl9);
		 printf("\n|	   |	   |	   |");
		 printf("\n ------- ------- ------- ");
	   
	   ablaufzahl=7;
	   
	 }
	 
	 
	 //Abfrage nach einem weiteren Spiel
	 if (ablaufzahl==7)
	 {
					   
		 printf("\n\n\nWollen Sie noch einmal Tic Tac Toe spielen?");
		 
		 printf("\n\nDruecken Sie folgende Tasten");
		 printf("\n1 fuer Ja");
		 printf("\n2 fuer Nein");
		 
		 printf("\n\nIhre Wahl bitte: ");
		 scanf("%i", &ablaufzahl);
		 fflush(stdin);
		 
	 }
	 
	 
}
	 getchar();
	 
}
```


----------



## lz9c1j (6. Januar 2005)

mein programm läuft nun fehlerlos. ihr müsst nicht mehr antworten. danke für die vielen hilfen. ihr habt mir sehr geholfen. 

thx for help

von mir aus --> closed


----------

