Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » TicTacToe

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.04.2005, 22:08 Uhr
~ferl
Gast


Hi Leute hab ne frage.
Dieses Spiel geht fast einen hacken hat es es gibt die gewinnermeldung nicht aus.
Könnt ihr mir weiterhelfen.


C++:
#include <stdio.h>
#include <string.h>
#include "ConsoleFunctions.h"
#include <windows.h>
#include <stdlib.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)
{
      
    
     if (ablaufzahl==1)
     {  
         clrscr();
         printf("\n\nSpieler 1: x\n");
         printf("Spieler 2: o\n\n");  
        
        
         printf("*******************\n");
       printf("*  %c  *  %c  *  %c  *\n", zahl1, zahl2, zahl3);
       printf("*******************\n");
       printf("*  %c  *  %c  *  %c  *\n", zahl4, zahl5, zahl6);
       printf("*******************\n");
       printf("*  %c  *  %c  *  %c  *\n", zahl7, zahl8, zahl9);
       printf("*******************\n");
      
        
        
         printf("\n\nSpieler 1 ist an der Reihe.Geben sie bitte einen Buchstaben ein: ");
         scanf("%s", buffer);
         fflush(stdin);
    
        
         if(strcmp("A", buffer) == 0  && zahl1!=111 && zahl1!=120)
         {
           zahl1 = 120;
         }
        
         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üft ob Spieler 1 TicTacToe 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 gewonnen hat
     if (ablaufzahl==3)
     {
         printf("\n\n\nSpieler 1 hat das Spiel gewonnen");
  
         printf("*******************\n");
       printf("*  %c  *  %c  *  %c  *\n", zahl1, zahl2, zahl3);
       printf("*******************\n");
       printf("*  %c  *  %c  *  %c  *\n", zahl4, zahl5, zahl6);
       printf("*******************\n");
       printf("*  %c  *  %c  *  %c  *\n", zahl7, zahl8, zahl9);
       printf("*******************\n");
      
        
         ablaufzahl = 7;
          
     }  
      
      
    
     if (ablaufzahl==4)
     {
        clrscr();              
         printf("\n\nSpieler 1: x\n");
         printf("Spieler 2: o\n\n");  
                  printf("*******************\n");
       printf("*  %c  *  %c  *  %c  *\n", zahl1, zahl2, zahl3);
       printf("*******************\n");
       printf("*  %c  *  %c  *  %c  *\n", zahl4, zahl5, zahl6);
       printf("*******************\n");
       printf("*  %c  *  %c  *  %c  *\n", zahl7, zahl8, zahl9);
       printf("*******************\n");
      
        
        
         printf("\n\nSpieler 2 ist an der Reihe.Geben sie bitte einen Buchstaben ein: ");
         scanf("%s", buffer);
         fflush(stdin);
    
        
         if(strcmp("A", buffer) == 0  && zahl1!=111 && zahl1!=120)
         {
           zahl1 = 111;
         }  
        
         if(strcmp("B", buffer) == 0  && zahl2!=111 && zahl2!=120)
         {
           zahl2 = 111;
         }
          
         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üft ob Spieler 2 TicTacToe 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;
        
        
     }

    

     //Gibt gewinner meldung von spieler 2 aus
     if (ablaufzahl==6)
     {
                        
       printf("\n\n\nSpieler 2 hat das Spiel gewonnen");
      
         printf("*******************\n");
       printf("*  %c  *  %c  *  %c  *\n", zahl1, zahl2, zahl3);
       printf("*******************\n");
       printf("*  %c  *  %c  *  %c  *\n", zahl4, zahl5, zahl6);
       printf("*******************\n");
       printf("*  %c  *  %c  *  %c  *\n", zahl7, zahl8, zahl9);
       printf("*******************\n");
      
      
       ablaufzahl=7;
      
     }
    
    
    
     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();
    
}  



Mfg. ferl


Bearbeitung von Windalf:

bitte cpp tags verwenden


Dieser Post wurde am 14.04.2005 um 23:28 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
15.04.2005, 02:17 Uhr
Pablo
Supertux
(Operator)


[standard]
1. es heißt int main (ich kann das nicht oft genug sagen, die Leute verstehen es einfach nicht)
[/standard]

Nun ja, wir sind leider Menschen und keiner Compiler, die den gesamten Code lesen werden, um heraszufinden, was falsch ist, wenn wir nicht wissen
1. was der Code tut
2. was falsch bei dir läuft

Also stelle leiber gezielte Fragen, sonst wirst du keine Antwort bekommen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
15.04.2005, 09:42 Uhr
Th




C++:
       if (zahl3==120 && zahl5==120 && zahl7==120)
         {
           ablaufzahl = 3;
         }
          
         ablaufzahl = 4;


Na siehst du den Fehler???

Mehr kann ich leider zu deinem Code nichts sagen, da er grauenvoll zu lesen ist (selbst für ein C-Programm). Benutz lieber Arrays und keine Copy & Paste-Orgien...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
15.04.2005, 15:39 Uhr
Frodenius



hmm.. auch so..: wie wärs mit einem (simplen) switch-konstrukt, anstatt 10 mal if(.... ?
--
NI! ...and thanks for all the fish!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.04.2005, 16:08 Uhr
0xdeadbeef
Gott
(Operator)


Ich würd vor allem arrays und table lookups benutzen...etwa so:

C++:
#include <stdio.h>

typedef int ttt_feld[3][3];

static int const tokens[] = { ' ', 'X', 'O' };

int gewonnen(ttt_feld feld, int x, int y) {
  int player = feld[x][y];

  if(feld[0][y] == player && feld[1][y] == player && feld[2][y] == player)
    return 1;
  if(feld[x][0] == player && feld[x][1] == player && feld[x][2] == player)
    return 1;

  if(feld[0][0] == player && feld[1][1] == player && feld[2][2] == player)
    return 1;
  if(feld[0][2] == player && feld[1][1] == player && feld[2][0] == player)
    return 1;

  return 0;
}

void print_feld(ttt_feld feld) {
  printf("  -------\n"
         "1 |%c|%c|%c|\n"
         "  -------\n"
         "2 |%c|%c|%c|\n"
         "  -------\n"
         "3 |%c|%c|%c|\n"
         "  -------\n"
         "   1 2 3\n",
         tokens[feld[0][0]],
         tokens[feld[1][0]],
         tokens[feld[2][0]],
         tokens[feld[0][1]],
         tokens[feld[1][1]],
         tokens[feld[2][1]],
         tokens[feld[0][2]],
         tokens[feld[1][2]],
         tokens[feld[2][2]]);
}

void eingabe(int player, int *x, int *y) {
  char zeile[100];

  do {
    printf("%c setzt. x, y eingeben (jew. 1 - 3): ", tokens[player]);
    fflush(stdout);

    fgets(zeile, 100, stdin);
  } while(sscanf(zeile, "%d, %d", x, y) != 2);

  --*x;
  --*y;
}

int spiel(void) {
  ttt_feld feld = { { 0 } };
  int x, y, i = 0;

  print_feld(feld);

  for(i = 0; i < 9; ++i) {
    do {
      eingabe(i % 2 + 1, &x, &y);
    } while(feld[x][y]);

    feld[x][y] = i % 2 + 1;

    print_feld(feld);

    if(gewonnen(feld, x, y))
      return i % 2 + 1;
  }

  return 0;
}

int main(void) {
  int gewinner = spiel();

  if(gewinner == 0)
    puts("Unentschieden!");
  else
    printf("%c hat gewonnen!\n", tokens[gewinner]);

  return 0;
}


Ist grad nur so eben hingekladdet, und ja, print_feld kann man mit Sicherheit noch schöner schreiben, aber ich wollt grad nicht sooo viel Hirnschmalz reinstecken.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 15.04.2005 um 16:35 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
16.04.2005, 03:27 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


www.fun-soft.de/showtopic.php?threadid=8075
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: