PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tic Tac Toe - Array als Funktionsparamterer



jookerxxx
31.08.2010, 15:30
Hallo,

ich habe vor 2 Tagen angefangen an einem Tic Tac Toe Game zu arbeiten.
Das Game ist noch "sozusagen" in der "Beta-Version" da es noch nicht vollständig ist( mit Menüs etc. ). Dennóch habe ich da zwei Probleme die mir einfach keine Ruhe lassen, und die ich auch versucht habe zu beheben.Wie die Überschrift es sagt, vermute ich , dass es an einer falschen verwendung mit Arrays in Bezug auf Funktionsparameter liegt :o ...

Hier die zwei Probleme:

1. Sobald man aufgefordert wird ein zweites Mal zu spielen und dies Tut,
...wird die Funktion Reset() zwar aufgerufen, jedoch erfüllt sie ihren zweck nicht.
2. Sobald man das zweite Mal das Spiel durchgespielt hat, beendet sich das ...Programm einfach.

Ich hoffe das Problem ist gut genug geschildert, bin nicht der beste in Deutsch xD, ´*hust* Immer diese Italiener *hust* xD

Danke schonmal im Voraus , falls es Antworten gibt.

Hier der Code:




// Copyright by Sterminio Productions ©

#include <iostream>
#include <windows.h>
using namespace std;

#define WIN32_LEAN_AND_MEAN //Eher SELTEN - VERWENDETE Teile aus <windows.h> nicht verwenden

//SpielBrett
char SpielBrett[10] = { "123456789" };
//GameOver Bedingung
bool bGameOver = false;
//Wer ist am Zug?
int iPlayer = 1;
//Eingabe
char cEingabe;
//Zeichen setzen
char cZeichen;
//Titel Screen
void TitelScreen();
//Korrekte Eingabe
bool bInput;
//Gibt es einen Gewinner ?
bool bWinner = false;
//Winner Price
void Winner( bool bW );
// Nochmal spielen ?
bool bAgain = true;
void End( bool *bA );
//Game Funktion
void Game();
//Reset Funktion
void Reset( char *Felder, int iElemente );





int main(){


//TitelScreen
//TitelScreen();


//SpielUmgebung Setzen
system("Color 0a");


Game();

End( &bAgain );
if( bAgain == true ){
Game();
Reset( SpielBrett, sizeof( SpielBrett )/sizeof( SpielBrett[0] ) );
}
else if( bAgain == false ){
exit(0);
}


return 0;
}






void TitelScreen(){

system("Color 4");
cout << endl << endl << endl << endl << endl << endl ;
cout << " ßßßßßßßßßßßßßßßßßßßßßßßßß ßßßßßßßßßßßßßßßßßßßß" << endl;
cout << " ß ß" << endl;
cout << " ß TIC TAC TOE ß" << endl;
cout << " ß ß" << endl;
cout << " ß ß" << endl;
cout << " ß ß" << endl;
cout << " ß ß" << endl;
cout << " ß Copyright Sterminio Productions ß" << endl;
cout << " ßßßßßßßßßßßßßßßßßßßßßßßßß ßßßßßßßßßßßßßßßßßßßß" << endl;
for( int i =0; i < 20; i++ ){

system("Color 1");
system("Color 2");
system("Color 3");
system("Color 4");
system("Color 5");
system("Color 6");
system("Color 7");
system("Color 8");
system("Color 9");
system("Color 0");
}

}


void Winner( bool bW ){

system("CLS");

cout << endl << endl << endl << endl << endl << endl << endl;
cout << " ßßßßßßßßßßßßß" << endl;
cout << " ß " << SpielBrett[0] << " ß " << SpielBrett[1] << " ß " << SpielBrett[2] << " ß" << endl;
cout << " ßßßßßßßßßßßßß" << endl;
cout << " ß " << SpielBrett[3] << " ß " << SpielBrett[4] << " ß " << SpielBrett[5] << " ß" << endl;
cout << " ßßßßßßßßßßßßß" << endl;
cout << " ß " << SpielBrett[6] << " ß " << SpielBrett[7] << " ß " << SpielBrett[8] << " ß" << endl;
cout << " ßßßßßßßßßßßßß" << endl;

if( bW ){

cout << endl << endl << endl << endl;
cout << " ßßßßßßßßßßßßßßßßßßßßßßßßß ßßßßßßßßßßßßßßßßßßßß" << endl;
cout << " ß ß" << endl;
cout << " ß HERZLICHEN GLUECKWUNSCH ß" << endl;
cout << " ß ß" << endl;
printf( " ß Spieler : (%d) hat das Spiel ß\n",iPlayer);
cout << " ß ß" << endl;
cout << " ß GEWONNEN !!! ß" << endl;
cout << " ß ß" << endl;
cout << " ßßßßßßßßßßßßßßßßßßßßßßßßß ßßßßßßßßßßßßßßßßßßßß" << endl;
for( int i =0; i < 20; i++ ){

system("Color 1");
system("Color 2");
system("Color 3");
system("Color 4");
system("Color 5");
system("Color 6");
system("Color 7");
system("Color 8");
system("Color 9");
system("Color 0a");
}


}// if
else if( !bW ){
cout << "Keiner hat gewonnen. " << endl;
}
Sleep( 1000 );
}



void Game(){

do{

//Zeichen festlegen ( Player 1 = X ; Player 2 = O )
if( iPlayer == 1 ){
cZeichen = 'X';
}
else if ( iPlayer == 2 ){
cZeichen = 'O';
}


system("CLS");

cout << endl << endl << endl << endl << endl << endl << endl;
cout << " ßßßßßßßßßßßßß" << endl;
cout << " ß " << SpielBrett[0] << " ß " << SpielBrett[1] << " ß " << SpielBrett[2] << " ß" << endl;
cout << " ßßßßßßßßßßßßß" << endl;
cout << " ß " << SpielBrett[3] << " ß " << SpielBrett[4] << " ß " << SpielBrett[5] << " ß" << endl;
cout << " ßßßßßßßßßßßßß" << endl;
cout << " ß " << SpielBrett[6] << " ß " << SpielBrett[7] << " ß " << SpielBrett[8] << " ß" << endl;
cout << " ßßßßßßßßßßßßß" << endl;

//Schleife zur Kontrolle ob ein "korrekter" Zug gemacht wurde
do{
bInput = true;
cin >> cEingabe;

//EingabeKontrolle
if( cEingabe == '1' && SpielBrett[0] == '1' ) {
SpielBrett[0] = cZeichen;
}
else if(cEingabe == '2' && SpielBrett[1] == '2' ){
SpielBrett[1] = cZeichen;
}
else if(cEingabe == '3' && SpielBrett[2] == '3' ){
SpielBrett[2] = cZeichen;
}
else if(cEingabe == '4' && SpielBrett[3] == '4' ){
SpielBrett[3] = cZeichen;
}
else if(cEingabe == '5' && SpielBrett[4] == '5' ){
SpielBrett[4] = cZeichen;
}
else if(cEingabe == '6' && SpielBrett[5] == '6' ){
SpielBrett[5] = cZeichen;
}
else if(cEingabe == '7' && SpielBrett[6] == '7' ){
SpielBrett[6] = cZeichen;
}
else if(cEingabe == '8' && SpielBrett[7] == '8' ){
SpielBrett[7] = cZeichen;
}
else if(cEingabe == '9' && SpielBrett[8] == '9' ){
SpielBrett[8] = cZeichen;
}
else{
cout << " Falsche Eingabe ! Versuche es noch einmal ! " << endl;
bInput = false;
Sleep(2000);
}//else
}while( !bInput ); //EingabeKontrolle

//Winner Check
if( SpielBrett[0] != '1' ){
if( SpielBrett[1] == SpielBrett[0] && SpielBrett[2] == SpielBrett[0] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
if( SpielBrett[3] == SpielBrett[0] && SpielBrett[6] == SpielBrett[0] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
}
if( SpielBrett[4] != '5' ){
if( SpielBrett[3] == SpielBrett[4] && SpielBrett[5] == SpielBrett[4] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
if( SpielBrett[1] == SpielBrett[4] && SpielBrett[7] == SpielBrett[4] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
if( SpielBrett[0] == SpielBrett[4] && SpielBrett[8] == SpielBrett[4] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
if( SpielBrett[2] == SpielBrett[4] && SpielBrett[6] == SpielBrett[4] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
}
if( SpielBrett[8] != '9' ){
if( SpielBrett[2] == SpielBrett[8] && SpielBrett[5] == SpielBrett[8] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
if( SpielBrett[6] == SpielBrett[8] && SpielBrett[7] == SpielBrett[8] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
//Unentschieden
if ( SpielBrett[0] != '1' &&
SpielBrett[1] != '2' &&
SpielBrett[2] != '3' &&
SpielBrett[3] != '4' &&
SpielBrett[4] != '5' &&
SpielBrett[5] != '6' &&
SpielBrett[6] != '7' &&
SpielBrett[7] != '8' &&
SpielBrett[8] != '9' &&
!bGameOver ){
bGameOver = true;
bWinner = false;
bInput = false;

}
}//Winner Check

//Auch der andere Spieler will mal an der Reihe sein :)
if( iPlayer == 1 && bInput == true ){
iPlayer = 2;
}
else if ( iPlayer == 2 ){
iPlayer = 1;
}



}while( !bGameOver ); // Solange GameOver == False , kein Ende !

Winner( bWinner );

}

void Reset( char *Felder, int iElemente ){ // SpielBrett[0] ~> FALSCH !!!

Felder[0] = '1';
Felder[1] = '2';
Felder[2] = '3';
Felder[3] = '4';
Felder[4] = '5';
Felder[5] = '6';
Felder[6] = '7';
Felder[7] = '8';
Felder[8] = '9';
bWinner = false;
bGameOver = false;
bAgain = false;
}



void End( bool *bA ){

char cA;

cout << "Wollen Sie nochmal spielen ? (Y/N)" << endl;
cin >> cA;
if( cA == 'y' || cA == 'Y' ){
*bA = true;
}
else if( cA == 'n' || cA == 'N' ){
*bA = false;
}





} Felder[4] = '5';
Felder[5] = '6';
Felder[6] = '7';
Felder[7] = '8';
Felder[8] = '9';
bWinner = false;
bGameOver = false;
bAgain = false;
}[/SPOILER]



void End( bool *bA ){

char cA;

cout << "Wollen Sie nochmal spielen ? (Y/N)" << endl;
cin >> cA;
if( cA == 'y' || cA == 'Y' ){
*bA = true;
}
else if( cA == 'n' || cA == 'N' ){
*bA = false;
}

}


Ich hab Euch vorsichtshalber den GANZEN Code einmal reingestellt.
Hoffe Ihr könnt was damit anfangen, und ich bitte Euch nicht "andere
Fehler" oder Code-Stylistische "Fehler" zu beheben.
Dass ( system() ) nicht gerne bentutzt wird weiß ich auch, genauso
wie andere Elemente meines Codes.

Saluti a Tutti ( Mfg )


jookerxxx

blackberry
31.08.2010, 16:10
Okay ich fange mal an:

Dazu erstmal ein Ausschnitt aus deiner main-Funktion:

Game();

End( &bAgain );
if( bAgain == true ){
Game();
Reset( SpielBrett, sizeof( SpielBrett )/sizeof( SpielBrett[0] ) );
}
else if( bAgain == false ){
exit(0);
}

"1. Sobald man aufgefordert wird ein zweites Mal zu spielen und dies Tut,
...wird die Funktion Reset() zwar aufgerufen, jedoch erfüllt sie ihren zweck nicht."
Wie du im if-Block unschwer erkennen kannst, wird Game vor Reset aufgerufen. Beim zweiten Spielstart wurde das Spielfeld also noch nicht zurückgesetzt!

"2. Sobald man das zweite Mal das Spiel durchgespielt hat, beendet sich das ...Programm einfach."
Ja und? Was sollte den passieren? Wenn du mal unter das if schaust (in dem Ausschnitt den ich gezeigt habe nicht dabei) wirst du sehen, dass danach nur ein return kommt -- keine Schleife, keine Wiederholung!

Hier ist nochmal alles deine Fehler betreffendes korrigiert (den Rest habe ich mir nicht so genau angeschaut):

// Copyright by Sterminio Productions ©

#include <iostream>
// #include <windows.h> // unnötig -BB
using namespace std;

// #define WIN32_LEAN_AND_MEAN //Eher SELTEN - VERWENDETE Teile aus <windows.h> nicht verwenden
// ^--- unnötig -BB

// arbeite gerade auf nem Mac... und das Sleep() und system() nervt -BB
#if defined(__APPLE__) || defined(__linux__)
#define Sleep(x)
#define system(x)
#endif

//SpielBrett
char SpielBrett[10] = { "123456789" };
//GameOver Bedingung
bool bGameOver = false;
//Wer ist am Zug?
int iPlayer = 1;
//Eingabe
char cEingabe;
//Zeichen setzen
char cZeichen;
//Titel Screen
void TitelScreen();
//Korrekte Eingabe
bool bInput;
//Gibt es einen Gewinner ?
bool bWinner = false;
//Winner Price
void Winner( bool bW );
// Nochmal spielen ?
bool bAgain = true;
void End( bool *bA );
//Game Funktion
void Game();
//Reset Funktion
void Reset( char *Felder, int iElemente );





int main(){

do
{
//TitelScreen
//TitelScreen();

//SpielUmgebung Setzen
system("Color 0a");

Game();
Reset( SpielBrett, sizeof( SpielBrett )/sizeof( SpielBrett[0] ) );
// Reset() setzt bAgain auf false... also müssen wir hier zuerst resetten
// und dann fragen... man könnte auch Reset() bAgain auf true setzen lassen
// und dann nur resetten, wenn der User nochmal spielen will...
// da Reset() jedoch nichts super kompliziertes bzw. Laufzeitaufwändiges
// macht kann es zumindest auch nicht schaden zu resetten, auch wenn man
// nicht weiter spielen möchte... -BB
End( &bAgain );
}
while(bAgain);
// ^---- wiederhole solange der User will... -BB


return 0;
}






void TitelScreen(){

system("Color 4");
cout << endl << endl << endl << endl << endl << endl ;
cout << " ßßßßßßßßßßßßßßßßßßßßßßßßß ßßßßßßßßßßßßßßßßßßßß" << endl;
cout << " ß ß" << endl;
cout << " ß TIC TAC TOE ß" << endl;
cout << " ß ß" << endl;
cout << " ß ß" << endl;
cout << " ß ß" << endl;
cout << " ß ß" << endl;
cout << " ß Copyright Sterminio Productions ß" << endl;
cout << " ßßßßßßßßßßßßßßßßßßßßßßßßß ßßßßßßßßßßßßßßßßßßßß" << endl;
for( int i =0; i < 20; i++ ){

system("Color 1");
system("Color 2");
system("Color 3");
system("Color 4");
system("Color 5");
system("Color 6");
system("Color 7");
system("Color 8");
system("Color 9");
system("Color 0");
}

}


void Winner( bool bW ){

system("CLS");

cout << endl << endl << endl << endl << endl << endl << endl;
cout << " ßßßßßßßßßßßßß" << endl;
cout << " ß " << SpielBrett[0] << " ß " << SpielBrett[1] << " ß " << SpielBrett[2] << " ß" << endl;
cout << " ßßßßßßßßßßßßß" << endl;
cout << " ß " << SpielBrett[3] << " ß " << SpielBrett[4] << " ß " << SpielBrett[5] << " ß" << endl;
cout << " ßßßßßßßßßßßßß" << endl;
cout << " ß " << SpielBrett[6] << " ß " << SpielBrett[7] << " ß " << SpielBrett[8] << " ß" << endl;
cout << " ßßßßßßßßßßßßß" << endl;

if( bW ){

cout << endl << endl << endl << endl;
cout << " ßßßßßßßßßßßßßßßßßßßßßßßßß ßßßßßßßßßßßßßßßßßßßß" << endl;
cout << " ß ß" << endl;
cout << " ß HERZLICHEN GLUECKWUNSCH ß" << endl;
cout << " ß ß" << endl;
printf( " ß Spieler : (%d) hat das Spiel ß\n",iPlayer);
cout << " ß ß" << endl;
cout << " ß GEWONNEN !!! ß" << endl;
cout << " ß ß" << endl;
cout << " ßßßßßßßßßßßßßßßßßßßßßßßßß ßßßßßßßßßßßßßßßßßßßß" << endl;
for( int i =0; i < 20; i++ ){

system("Color 1");
system("Color 2");
system("Color 3");
system("Color 4");
system("Color 5");
system("Color 6");
system("Color 7");
system("Color 8");
system("Color 9");
system("Color 0a");
}


}// if
else if( !bW ){
cout << "Keiner hat gewonnen. " << endl;
}
Sleep( 1000 );
}



void Game(){

do{

//Zeichen festlegen ( Player 1 = X ; Player 2 = O )
if( iPlayer == 1 ){
cZeichen = 'X';
}
else if ( iPlayer == 2 ){
cZeichen = 'O';
}


system("CLS");

cout << endl << endl << endl << endl << endl << endl << endl;
cout << " ßßßßßßßßßßßßß" << endl;
cout << " ß " << SpielBrett[0] << " ß " << SpielBrett[1] << " ß " << SpielBrett[2] << " ß" << endl;
cout << " ßßßßßßßßßßßßß" << endl;
cout << " ß " << SpielBrett[3] << " ß " << SpielBrett[4] << " ß " << SpielBrett[5] << " ß" << endl;
cout << " ßßßßßßßßßßßßß" << endl;
cout << " ß " << SpielBrett[6] << " ß " << SpielBrett[7] << " ß " << SpielBrett[8] << " ß" << endl;
cout << " ßßßßßßßßßßßßß" << endl;

//Schleife zur Kontrolle ob ein "korrekter" Zug gemacht wurde
do{
bInput = true;
cin >> cEingabe;

//EingabeKontrolle
if( cEingabe == '1' && SpielBrett[0] == '1' ) {
SpielBrett[0] = cZeichen;
}
else if(cEingabe == '2' && SpielBrett[1] == '2' ){
SpielBrett[1] = cZeichen;
}
else if(cEingabe == '3' && SpielBrett[2] == '3' ){
SpielBrett[2] = cZeichen;
}
else if(cEingabe == '4' && SpielBrett[3] == '4' ){
SpielBrett[3] = cZeichen;
}
else if(cEingabe == '5' && SpielBrett[4] == '5' ){
SpielBrett[4] = cZeichen;
}
else if(cEingabe == '6' && SpielBrett[5] == '6' ){
SpielBrett[5] = cZeichen;
}
else if(cEingabe == '7' && SpielBrett[6] == '7' ){
SpielBrett[6] = cZeichen;
}
else if(cEingabe == '8' && SpielBrett[7] == '8' ){
SpielBrett[7] = cZeichen;
}
else if(cEingabe == '9' && SpielBrett[8] == '9' ){
SpielBrett[8] = cZeichen;
}
else{
cout << " Falsche Eingabe ! Versuche es noch einmal ! " << endl;
bInput = false;
Sleep(2000);
}//else
}while( !bInput ); //EingabeKontrolle

//Winner Check
if( SpielBrett[0] != '1' ){
if( SpielBrett[1] == SpielBrett[0] && SpielBrett[2] == SpielBrett[0] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
if( SpielBrett[3] == SpielBrett[0] && SpielBrett[6] == SpielBrett[0] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
}
if( SpielBrett[4] != '5' ){
if( SpielBrett[3] == SpielBrett[4] && SpielBrett[5] == SpielBrett[4] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
if( SpielBrett[1] == SpielBrett[4] && SpielBrett[7] == SpielBrett[4] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
if( SpielBrett[0] == SpielBrett[4] && SpielBrett[8] == SpielBrett[4] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
if( SpielBrett[2] == SpielBrett[4] && SpielBrett[6] == SpielBrett[4] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
}
if( SpielBrett[8] != '9' ){
if( SpielBrett[2] == SpielBrett[8] && SpielBrett[5] == SpielBrett[8] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
if( SpielBrett[6] == SpielBrett[8] && SpielBrett[7] == SpielBrett[8] ){
bGameOver = true;
bWinner = true;
bInput = false;
}
//Unentschieden
if ( SpielBrett[0] != '1' &&
SpielBrett[1] != '2' &&
SpielBrett[2] != '3' &&
SpielBrett[3] != '4' &&
SpielBrett[4] != '5' &&
SpielBrett[5] != '6' &&
SpielBrett[6] != '7' &&
SpielBrett[7] != '8' &&
SpielBrett[8] != '9' &&
!bGameOver ){
bGameOver = true;
bWinner = false;
bInput = false;

}
}//Winner Check

//Auch der andere Spieler will mal an der Reihe sein :)
if( iPlayer == 1 && bInput == true ){
iPlayer = 2;
}
else if ( iPlayer == 2 ){
iPlayer = 1;
}



}while( !bGameOver ); // Solange GameOver == False , kein Ende !

Winner( bWinner );

}

void Reset( char *Felder, int iElemente ){ // SpielBrett[0] ~> FALSCH !!!

Felder[0] = '1';
Felder[1] = '2';
Felder[2] = '3';
Felder[3] = '4';
Felder[4] = '5';
Felder[5] = '6';
Felder[6] = '7';
Felder[7] = '8';
Felder[8] = '9';
bWinner = false;
bGameOver = false;
bAgain = false;
}



void End( bool *bA ){

char cA;

cout << "Wollen Sie nochmal spielen ? (Y/N)" << endl;
cin >> cA;
if( cA == 'y' || cA == 'Y' ){
*bA = true;
}
else if( cA == 'n' || cA == 'N' ){
*bA = false;
}
}
Alle Änderungen sind kommentiert und mit einem "-BB" versehen. Wenn du also in deinem Editor danach suchst solltest du schnell herausfinden können was anders ist.

P.S. #1: der Code sieht formatierungsbezogen aus wie hingeschissen. Was der SPOILER in deinem CODE-Tag zu suchen hat weiß ich nicht und ich musste auch erstmal raten was wohin gehörte, damit der Code überhaupt erstmal compiliert werden konnte.

P.S. #2: soviel Copyrights für ein so kleines Programm... :/

jookerxxx
31.08.2010, 21:43
@Black Berry

Danke Großa :))
Wie immer hilfst Du , und die Hilfe ist wie Immer , RICHTIG HILFREICH !
xD
Vllt. sollte ich zum Schluss dann in der Main, nochmal die NORMALE LOGIK Kontrollieren.
:P

rayz0r
03.09.2010, 19:57
Hi, falls dir das noch hilft, ich hab auch mal sowas in der Art gebaut,
das war damals meine Version:


#include <iostream>
#include <string>

using namespace std;

//Globale Variablen
string namePlayer1("Spieler 1");
string namePlayer2("Spieler 2");
char spielfeld[8] = {48,49,50,51,52,53,54,55};
bool bot = false;

//Prototypen
int main();
void Game();
void PlayerWin(string winner);
void TurnPlayer2();
void TurnPlayer2();
void draw();

void TurnBot()
{

}

void TurnPlayer1()
{
cout << spielfeld[0] << "|" << spielfeld[1] << "|" << spielfeld[2] << endl;
cout << spielfeld[3] << "|" << spielfeld[4] << "|" << spielfeld[5] << endl;
cout << spielfeld[6] << "|" << spielfeld[7] << "|" << spielfeld[8] << endl;
cout << "\n" << namePlayer1 << " ist am Zug." << endl;
cout << "Wo moechtest du dein 'X' platzieren?(0-8)" << endl;
int eingabe;
cin >> eingabe;
if(eingabe < 9 && eingabe > -1)
{
if(spielfeld[eingabe] != 'X' && spielfeld[eingabe] != 'O')
{
spielfeld[eingabe] = 'X';
} else {
cout << "Fehler: Feld schon belegt!" << endl;
}
} else {
cout << "Falsche Eingabe,nur Zahlen von 0-8 sind zulässig." << endl;
}
if(spielfeld[0] == 'X' && spielfeld[1] == 'X' && spielfeld[2] == 'X')
{
PlayerWin(namePlayer1);
} else if(spielfeld[3] == 'X' && spielfeld[4] == 'X' && spielfeld[5] == 'X')
{
PlayerWin(namePlayer1);
} else if(spielfeld[6] == 'X' && spielfeld[7] == 'X' && spielfeld[8] == 'X')
{
PlayerWin(namePlayer1);
} else if(spielfeld[0] == 'X' && spielfeld[3] == 'X' && spielfeld[6] == 'X')
{
PlayerWin(namePlayer1);
} else if(spielfeld[1] == 'X' && spielfeld[4] == 'X' && spielfeld[7] == 'X')
{
PlayerWin(namePlayer1);
} else if(spielfeld[2] == 'X' && spielfeld[5] == 'X' && spielfeld[8] == 'X')
{
PlayerWin(namePlayer1);
} else if(spielfeld[0] == 'X' && spielfeld[4] == 'X' && spielfeld[8] == 'X')
{
PlayerWin(namePlayer1);
} else if(spielfeld[2] == 'X' && spielfeld[4] == 'X' && spielfeld[6] == 'X')
{
PlayerWin(namePlayer1);
} else if(spielfeld[0] != 48 && spielfeld[1] != 49 && spielfeld[2] != 50 && spielfeld[3] != 51 && spielfeld[4] != 52 && spielfeld[5] != 53 && spielfeld[6] != 54 && spielfeld[7] != 55 && spielfeld[8] != 56)
{
draw();
} else {
TurnPlayer2();
}
}

void TurnPlayer2()
{
cout << spielfeld[0] << "|" << spielfeld[1] << "|" << spielfeld[2] << endl;
cout << spielfeld[3] << "|" << spielfeld[4] << "|" << spielfeld[5] << endl;
cout << spielfeld[6] << "|" << spielfeld[7] << "|" << spielfeld[8] << endl;
cout << "\n" << namePlayer2 << " ist am Zug." << endl;
cout << "Wo moechtest du dein 'O' platzieren?(0-8)" << endl;
int eingabe;
cin >> eingabe;
if(eingabe < 9 && eingabe > -1)
{
if(spielfeld[eingabe] != 'X' && spielfeld[eingabe] != 'O')
{
spielfeld[eingabe] = 'O';
} else {
cout << "Fehler: Feld schon belegt!" << endl;
}
} else {
cout << "Falsche Eingabe,nur Zahlen von 0-8 sind zulässig." << endl;
}
if(spielfeld[0] == 'O' && spielfeld[1] == 'O' && spielfeld[2] == 'O')
{
PlayerWin(namePlayer2);
} else if(spielfeld[3] == 'O' && spielfeld[4] == 'O' && spielfeld[5] == 'O')
{
PlayerWin(namePlayer2);
} else if(spielfeld[6] == 'O' && spielfeld[7] == 'O' && spielfeld[8] == 'O')
{
PlayerWin(namePlayer2);
} else if(spielfeld[0] == 'O' && spielfeld[3] == 'O' && spielfeld[6] == 'O')
{
PlayerWin(namePlayer2);
} else if(spielfeld[1] == 'O' && spielfeld[4] == 'O' && spielfeld[7] == 'O')
{
PlayerWin(namePlayer2);
} else if(spielfeld[2] == 'O' && spielfeld[5] == 'O' && spielfeld[8] == 'O')
{
PlayerWin(namePlayer2);
} else if(spielfeld[0] == 'O' && spielfeld[4] == 'O' && spielfeld[8] == 'O')
{
PlayerWin(namePlayer2);
} else if(spielfeld[2] == 'O' && spielfeld[4] == 'O' && spielfeld[6] == 'O')
{
PlayerWin(namePlayer2);
} else if(spielfeld[0] != 48 && spielfeld[1] != 49 && spielfeld[2] != 50 && spielfeld[3] != 51 && spielfeld[4] != 52 && spielfeld[5] != 53 && spielfeld[6] != 54 && spielfeld[7] != 55 && spielfeld[8] != 56)
{
draw();
} else {
TurnPlayer1();
}
}

void draw()
{
cout << "Unentschieden!" << endl;
cout << "Nocheinmal spielen? <y/n>" << endl;
char menu;
cin >> menu;
if(menu == 121)
{
Game();
}
}


void PlayerWin(string winner)
{
cout << winner << " gewinnt!" << endl;
cout << "Nocheinmal spielen? <y/n>" << endl;
char menu;
cin >> menu;
if(menu == 121)
{
Game();
}
}

void Game()
{
int index = 0;
for(int i = 48; i < 57; ++i)
{
spielfeld[index] = i;
++index;
}
TurnPlayer1();


}

void Options()
{
cout << "<1> Spielernamen\n<2> Bot Einstellungen" << endl;
int eingabe;
cin >> eingabe;
switch(eingabe)
{
case 1:
cout << "Hier kannst du die Namen der Spieler aendern." << endl;
cout << "Aktuelle Spielernamen:" << endl;
cout << "Spieler 1: " << namePlayer1 << endl;
cout << "Spieler 2: " << namePlayer2 << endl;
cout << "Moechtest du die Namen aeandern?(y/n)" << endl;
char menu;
cin >> menu;
if(menu == 121)
{
cout << "Spieler 1: ";
cin >> namePlayer1;
cout << "Spieler 2: ";
cin >> namePlayer2;
main();
} else {
main();
}
break;

case 2:
cout << "Bot an? <y/n>" << endl;
char menu1;
cin >> menu1;
if(menu1 == 121)
{
bot = true;
main();
} else {
main();
}
break;

default:
main();
break;
}
}

void Rules()
{
cout << "Regeln:" << endl;
cout << "Ziel ist es 3 mal dein Zeichen(O oder X) in einer Reihe zu haben,ob diagonal, waagerecht oder horizontal ist egal.\n\n" << endl;
main();
}

int main()
{
cout << "Willkommen zu rayz0r's TicTacToe." << endl;
cout << "<1> Optionen\n<2> Regeln\n<3> Spielen!" << endl;
int i;
cin >> i;
switch(i)
{
case 1:
Options();
break;
case 2:
Rules();
break;
case 3:
Game();
break;
default:
cout << "Inkorrekte Eingabe" << endl;
break;
}
cin.get();
return 0;
}


Wollte eigentlich irgendwann mal einen kleinen Bot hinzufügen, bin bis jetzt aber noch nich dazu gekommen, deswegen die ungenutzte Bot Variable.

jookerxxx
04.09.2010, 12:57
char spielfeld[8] = {48,49,50,51,52,53,54,55};

cout << spielfeld[0] << "|" << spielfeld[1] << "|" << spielfeld[2] << endl;
cout << spielfeld[3] << "|" << spielfeld[4] << "|" << spielfeld[5] << endl;
cout << spielfeld[6] << "|" << spielfeld[7] << "|" << spielfeld[8] << endl;


Ich hab nur mal in dein Code geluschat ohne groß etwas zu compilen.
Sutzig macht mich jedoch, dass Du ein Array mit 8 Elementen deklarierst
und definierst aber ganze 9 Elemente ausgibst :P

Dein Code lässt sich jedoch einwandfrei ausführen. =)

wacked
04.09.2010, 17:01
@rayz0r: Hast du jemals etwas von schleifen gehört?


cout << spielfeld[0] << "|" << spielfeld[1] << "|" << spielfeld[2] << endl;
cout << spielfeld[3] << "|" << spielfeld[4] << "|" << spielfeld[5] << endl;
cout << spielfeld[6] << "|" << spielfeld[7] << "|" << spielfeld[8] << endl;DE]



for(int i=0; i<9; i++)
{
cout<<spielfeld[i]<<"|";
if(i%3 == 0)
cout<<endl;
}
Und das checken ob gewonnen wurde kann auch besser gemcht werden

AlterHacker
04.09.2010, 17:57
Dein Code lässt sich jedoch einwandfrei ausführen. =)
Dadurch überschreibst du dann jedoch andere Werte aufm Stack.(Buffer Overflow lässt grüßen)
Ungesund, ungesund ;)

rayz0r
04.09.2010, 18:05
Hmm, jo.
Dass mir das nicht aufgefallen ist o.o
@wacked
ich fands damals übersichtlicher so, da man das Spielfeld dann auch im Code sozusagen hat.

Was die ganzen ifs an geht, sicher hätte könnte ob sich das Verbessern von sonem mini Ding dann lohnt ist wieder eine andere Frage.

AlterHacker
04.09.2010, 18:12
Natürlich lohnt sich das!
Gewöhn dir das von anfang an an.
=> Code wird lesbarer und angenehmer ;)