Bildschrim größe ?



  • hy

    ich porgrammiere unter win xp pro mit borland 5.

    Ich programmiere das Spiel Reversi oop.
    Und ein Methode ist das die Spielerklärung ausgegeben wird.
    Die sich in einer Datei befindet.
    Wenn ich diese auf dem Bildschrim ausgebe ist das zuviel für ein Fenster , die Scrollbar ist dann "unten" , das heißt man sieht nicht den Anfang nicht.

    Jetzt würde ich des gern so machen das man erst den Teil 1 sieht, und dan bei Tasten druck den Teil zwei. Nur wie mache ich des. Ich hab kein ahnung nach was für befehl ich da suchen muss.

    Danke



  • Hallo

    Ich weiß zwar nicht wirklich was Du zu tun gedenkst, aber wenn es etwas mit dem Einladen einer Datei in eine Memo oder etwas vergleichbares ist, kannst Du auf Tastendruck z.B. die Taste PageDown an Deine Memo senden und damit den Cursor bewegen

    Oder Du arbeitest mit Selection: Schaue einfach mal in der Hilfe nach Selection/SelStart/SelLength.

    PS: In Deiner Signatur sind Rechtschreibfehler. Keine Ahnung ob die absichtlich dort hingehören - In diesem Context wirken sie aber irgendwie unpassend. 😉

    Gruss



  • hy

    die ist die vereinfachte darstellung meines Bildschirmm.

    ----------------------------------------------
    - ...text -
    - -
    - -
    - -
    - -
    - ... ende text -
    ---------------------------------------------

    Der Text hat ein Anfang und ein Ende. Nur ist der Text zuviel für eine Bildschirm und man sieht den Anfang nicht mehr. Ist das gleiche wenn man sich unter cmd die
    hilfe für "route /?" an zeigen lässt dan sieht man nur das Ende und nicht den Anfang. Und ich will jetzt das genau soviel ausgegeben wird wie Platz auf dem Bildschirm ist.



  • nimm doch die dateizeiger tellg() zum lesen seekg() zum setzen!

    begrenze dein memo in der zeichenanzahl, und wenn die grenze erreicht ist machst ne pause beim auslesen!

    wenn mann dann weitermacht ließt du ab der aktuellen zeigerposition weiter



  • hy

    Problem wenn jemand vollscreen hat soll der es ganz ausgegeben werden ohne pause
    und sonst mit pause.
    Freund meinte ich sollte schau was für ein framework für die gui verwendet wird.
    Und schau ob mir des framework den befehl anbietet nur weiß ich nicht was für ein framework borland 5 verwendet.



  • Hallo

    der BCB verwendet die VCL als Framework.

    Waru mmachst du es dir so schwer? Bleibe beim TMemo und las wie Rostfrei gesagt hat nach dem Laden der Datei den Cursor auf das allererste Zeichen setzen. Der Rest wird gescrollt, wenn nötig.

    bis bald
    akari



  • :p immer noch Fehler :p



  • hy

    so also ich soll alles auslesen und dann der Cursor im fenster nach oben setzen, so das man den anfang sieht. Hab ich des so richtig verstanden ?
    Dann mach ich das so.



  • hy

    mal neben bei ich schreibe ne konsolenanwendung.

    Wie steuer ich den cursor ?



  • Hallo

    Moment, schreibst du nun eine Anwendung mit GUI oder eine Konsolenanwendung? Verwendest du über VCL-Komponenten (TForm, TMemo...)?

    Denn ich vermute die meisten dachten natürlich das du Hilfe für ein TMemo o.ä. brauchst. Wenn es eine Konsolenanwendung ist, dann schau in die Konsolen-FAQ.

    bis bald
    akari



  • Hy

    so du meinst Win-32 Konsolen Faq bereich.

    Habs glaub raus gefunden. Nur hab ich neue Probleme

    #include <iostream.h>
    #include <fstream>
    #include <conio.h>
    #include <time.h>
    #include <stdio.h>
    #include <iomanip.h>
    #include <windows.h>
    bool rand(int,int,int,int);
    int steinsucheminus(int feldf[], int d , int e,int w,int gw);
    int steinsucheplus(int feldf[] ,int d ,int e ,int w ,int gw);
    
    class  Reversi
    {
     private:
      int feld[64];
      bool wer_ist_dran ;
      bool gewinner ;
      ifstream hilfe;
     public:
      Reversi();
      void ausgabehilfe(void);
      void ausgabezeichenSpielfeld(void);
      void ausgabe_wer_ist_dran(void);
      bool checksetze(int stelle, string richtung);
      void setze(int stelle, string richtung);
      bool spielende(void);
      //void gewinner(void);
      void ausgabepassen(void);
      void ausgabegewinner(void);
    
    };
    
     Reversi::Reversi()
     {
      for(int i=0;i<65;i++)
      {
       feld[i]=i+1;
      }
       hilfe.open("hilfe.txt") ;
    
       feld[26]=99;
       feld[10]=99;
       feld[12]=99;
       feld[14]=99;
       feld[30]=99;
       feld[46]=99;
       feld[44]=99;
       feld[42]=99;
       feld[20]=66;
       feld[21]=66;
       feld[29]=66;
       feld[37]=66;
       feld[36]=66;
       feld[35]=66;
       feld[27]=66;
       feld[19]=66;
     //------standard einstellung
      /*feld[27]=66;
      feld[28]=66;
      feld[35]=99;
      feld[36]=99;
      */
      randomize() ;
      wer_ist_dran=false;
      hilfe.open("Regeln.txt");
     }
    
     void Reversi::ausgabehilfe()
     {
    
      char a;
      clrscr();
      if(hilfe==0)
       {
        cout << " Konnte Datein nicht öffnen!" << endl;
       }
       else
       {
        while(!hilfe.eof())
        {
    
         hilfe.get(a);
         cout <<  a ;
        }
    
        cout << endl << "Bei Tasten druch zurueck ins Spiel" ;
        gotoxy(1,1);
    
       }
       hilfe.close();
       hilfe.open("Regeln.txt");
     }
    
     void Reversi::ausgabezeichenSpielfeld()
     {
      int g=0, a=0 ;
    
      for(a=0;a<64;a++)
      {
       if(g==8)
       {
         g=0;
         cout << endl ;
        }
       switch(feld[a])
       {
         case 66 : cout<< setw(3);
                   cout << "X" ;
                break;
         case  99 : cout<< setw(3);
                   cout << "O" ;
                break;
        default: cout<< setw(3);
                cout << feld[a];
    
       }
       g++;
       }
      cout<< endl;
      cout<< endl;
     }
    
    void Reversi::ausgabe_wer_ist_dran(void)
     {
     if(wer_ist_dran==true)
        cout << "Spieler1 ist dran" ;
     else
        cout << "spieler2 ist dran" ;
     cout << endl<< "Auf welche Stelle soll gesetzt werden ?";
     cout << endl << "Bei druecken von F1 erscheint die Hilfe " ;
    
     }
    
    bool Reversi::checksetze(int stelle, string richtung)
     {
      int a=0, Gestein=0, dran=0, Gdran=0;
      bool erg;
       //------Umwandlung von string in int für switch/case Anweisung
       if(richtung=="N")
        a=1;
       if(richtung=="NO")
        a=2;
       if(richtung=="O")
        a=3;
       if(richtung=="SO")
        a=4;
       if(richtung=="S")
        a=5;
       if(richtung=="SW")
        a=6;
       if(richtung=="W")
        a=7;
       if(richtung=="NW")
        a=8;
       if(a==0)
        return false ;
       if(wer_ist_dran==true)
       {
        dran=99;
        Gdran=66;
       }
       else
       {
       dran=66;
       Gdran=99;
       }
    
       if(feld[stelle]==66)
          return false  ;
       if(feld[stelle]==99)
          return false   ;
    
        switch(a)
        {
        case 1: // N
               if(stelle>15) // horizontaler Rand  1-16
                 {
                  stelle=stelle-8;
                  Gestein=steinsucheminus(feld,stelle,8,dran,Gdran);
                  if(Gestein<=0)
                      return false;
                  if(Gestein==stelle)
                      return false ;
                  return true;
                 }
               else
               return false;
        case 2:// N0
               erg=rand(8,stelle,8,72);// vertiakler Rand 8,16,24,32,40,48,56,64
               if(erg==true)
                 if(stelle>7)// horizontaler Rand 1-8
                   {
                    stelle=stelle-7;
                    Gestein=steinsucheminus(feld,stelle,7,dran,Gdran);
                    cout << Gestein ;
                    if(Gestein<=0)
                      return false;
                    if(Gestein==stelle)
                      return false ;
                    return true;
                    }
               return false;
        case 3: // O
               erg=rand(8,stelle,8,72); // vertiakler Rand 8,16,24,32,40,48,56,64
               if(erg==true)
                 {
                  stelle=stelle+1;
                  Gestein=steinsucheplus(feld,stelle,1,dran,Gdran);
                  if(Gestein<=0)
                    return false;
                  if(Gestein==stelle)
                    return false ;
                  return true;
                 }
               return false;
        case 4: // so
               erg=rand(8,stelle,8,72); // vertiakler Rand 8,16,24,32,40,48,56,64
               if(erg==true)
                 if(stelle<56)// horizontaler Rand 57-64
                 {
                  stelle=stelle+9;
                  Gestein=steinsucheplus(feld,stelle,9,dran,Gdran);
                  if(Gestein<=0)
                    return false;
                  if(Gestein==stelle)
                    return false ;
                  return true;
                  }
               return false;
        case 5: // s
               if(stelle<48)// horizontaler Rand 49-64
                 {
                  stelle=stelle+8;
                  Gestein=steinsucheplus(feld,stelle,8,dran,Gdran);
                  if(Gestein<=0)
                    return false;
                  if(Gestein==stelle)
                    return false ;
                  return true;
                 }
               return false;
        case 6: // SW
               erg=rand(1,stelle,8,65); // vertiakler Rand   1,9,17,25,33,41,49,57
               if(erg==true)
                 if(stelle>15) // horizontaler Rand 1-16
                   {
                    stelle=stelle+7;
                    Gestein=steinsucheplus(feld,stelle,7,dran,Gdran);
                    if(Gestein<=0)
                     return false;
                    if(Gestein==stelle)
                      return false;
                    return true;
                   }
               return false;
        case 7:  // W
               if(stelle<48) // horizontaler Rand 49-64
                {
                 stelle=stelle-1;
                 Gestein=steinsucheminus(feld,stelle,1,dran,Gdran);
                 if(Gestein<=0)
                      return false;
                 if(Gestein==stelle)
                      return false;
                 return true;
                }
                return false;
        case 8:// NW
               erg=rand(1,stelle,8,65); // vertiakler Rand   1,9,17,25,33,41,49,57
               cout<< endl << erg << endl;
               if(erg==true)
                 if(stelle>7)  //horizontaler Rand    1-8
                   if(erg==true)
                     {
                      stelle=stelle-9 ;
                      Gestein=steinsucheminus(feld,stelle,9,dran,Gdran);
                      if(Gestein<=0)
                        return false;
                      if(Gestein==stelle)
                        return false ;
                      return true;
                     }
        }
       return  false;
     }
    
    void Reversi::setze(int stelle, string richtung)
    {
      int a=0,  dran=0, Gdran=0;
      bool erg;
       //------Umwandlung von string in int für switch/case Anweisung
       if(richtung=="N")
        a=1;
       if(richtung=="NO")
        a=2;
       if(richtung=="O")
        a=3;
       if(richtung=="SO")
        a=4;
       if(richtung=="S")
        a=5;
       if(richtung=="SW")
        a=6;
       if(richtung=="W")
        a=7;
       if(richtung=="NW")
        a=8;
       if(wer_ist_dran==true)
       {
        dran=66;
        Gdran=99;
       }
       else
       {
       dran=99;
       Gdran=66;
       }
        switch(a)
        {
        case 1: // N
               feld[stelle]=dran;
               if(feld[stelle-8]==Gdran)
                 this->setze(stelle-8,"N");
               break;
    
        case 2: // NO
               feld[stelle]=dran;
               if(feld[stelle-7]==Gdran)
                 this->setze(stelle-7,"NO");
              break;
        case 3: // 0
               feld[stelle]=dran;
               if(feld[stelle+1]==Gdran)
                 this->setze(stelle+1,"O");
             break;
        case 4: // SO
              feld[stelle]=dran;
               if(feld[stelle+9]==Gdran)
                 this->setze(stelle+9,"SO");
             break;
        case 5: // S
               feld[stelle]=dran;
               if(feld[stelle+8]==Gdran)
                 this->setze(stelle+8,"S");
             break;
        case 6: // SW
               feld[stelle]=dran;
               if(feld[stelle+7]==Gdran)
                 this->setze(stelle+7,"SW");
             break;
        case 7: // W
               feld[stelle]=dran;
               if(feld[stelle-1]==Gdran)
                 this->setze(stelle-1,"O");
             break;
        case 8: // NW
               feld[stelle]=dran;
               if(feld[stelle-9]==Gdran)
                 this->setze(stelle-9,"NW");
        }
       }
    void main(void)
     {
      Reversi b;
      bool erg=false;
      int stell=0;
      string richtun="Nix";
      int wert=1;
      short KeyState = 0;
      short ArrKeyState[256]={0};
    
      b.ausgabezeichenSpielfeld();
      b.ausgabe_wer_ist_dran();
     while (wert<2)
      {
      for (int i = 0; i < 256; i++)
        {
          KeyState = GetAsyncKeyState(i);
          ArrKeyState[i] = KeyState;
        }
    
        if (ArrKeyState[112]==-32767)
           {
           wert=2;
           b.ausgabehilfe();
           }
        for (int i = 48; i <58 ; i++)
        {
          if(ArrKeyState[i]!=0)
          {
           wert=2;
           cin>>stell;
          }
        }
     }
      getch();
      clrscr();
    
      cout << endl << "Welche Richtung ?";
      cin >> richtun ;
      erg=b.checksetze(stell-1, richtun);
      if(erg==true)
      {
         b.setze(stell-1,richtun);
    
      }
      b.ausgabezeichenSpielfeld();
      getch();
     }
    
    bool rand( int c, int b,int plus, int abbruch)
    {
     bool erg;
     if(c==b) // wenn die stelle am rand leigt dan diese anweisung
        return false ;
     if(c==abbruch) //wenn die stelle nicht am rand liegt
        return true ;
     rand(c+plus,b,plus,abbruch);
    }
    
    int steinsucheminus(int feldf[], int d , int e,int w,int gw)
    {
     if(feldf[d]!=w)
      {
       if(feldf[d]==gw)
         {
          return d;
         }
       else
          return 0;
      }
     if(d<=0)
         return 0 ;
        steinsucheminus(feldf,d-e,e,w,gw);
    }
    
    int steinsucheplus(int feldf[] ,int d ,int e ,int w ,int gw)
     {
     cout << endl << feldf[d];
     if(feldf[d]!=w)
      {
       if(feldf[d]==gw)
          return d;
       else
          return 0;
      }
     if(d<=0)
         return 0 ;
        steinsucheplus(feldf,d+e,e,w,gw);
     }
    

    Mein Problem ist das wenn man sich die Hilfe anzeigen lässt,das die durch raselt. Das Spiel ist noch nicht ganz fertig, aber für vorschläge wie ich was besser porgramieren kann bin dankbar.
    😃



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • hy

    so ich hab weiter gemacht nun hab ich aber das Problem das wenn ich eine Stelle eingeben und nachher die hilfe ausgeben will geht dies nicht mehr.
    die if(ArrKeyState[112]..) wird nicht mehr genommen sonder gleich die else dazu

    #include <iostream.h>
    #include <fstream>
    #include <conio.h>
    #include <time.h>
    #include <stdio.h>
    #include <iomanip.h>
    #include <windows.h>
    bool rand(int,int,int,int);
    int steinsucheminus(int feldf[], int d , int e,int w,int gw);
    int steinsucheplus(int feldf[] ,int d ,int e ,int w ,int gw);
    
    class  Reversi
    {
     private:
      int feld[64];
      bool wer_ist_dran ;
      bool gewinner ;
      ifstream hilfe;
     public:
      Reversi();
      void ausgabehilfe(void);
      void ausgabezeichenSpielfeld(void);
      void ausgabe_wer_ist_dran(void);
      bool checksetze(int stelle, string richtung);
      void setze(int stelle, string richtung);
      bool spielende(void);
      void aenderwer_ist_dran();
      //void gewinner(void);
      void ausgabepassen(void);
      void ausgabegewinner(void);
    
    };
    
     Reversi::Reversi()
     {
      for(int i=0;i<65;i++)
      {
       feld[i]=i+1;
      }
       hilfe.open("hilfe.txt") ;
      //------standard einstellung
      feld[27]=66;
      feld[28]=66;
      feld[35]=99;
      feld[36]=99;
    
      randomize() ;
      wer_ist_dran=true;
      hilfe.open("Regeln.txt");
     }
    
     void Reversi::aenderwer_ist_dran()
     {
      if(wer_ist_dran==true)
        {
              wer_ist_dran=false;
        }
      else
        {
    
         wer_ist_dran=true;
        }
     }
     void Reversi::ausgabehilfe()
     {
    
      char a;
      clrscr();
      if(hilfe==0)
       {
        cout << " Konnte Datein nicht öffnen!" << endl;
       }
       else
       {
        while(!hilfe.eof())
        {
    
         hilfe.get(a);
         cout <<  a ;
        }
    
        cout << endl << "Bei Tasten druch zurueck ins Spiel" ;
        gotoxy(1,1);
        getch();
        getch();
        getch();
    
        clrscr();
       }
       hilfe.close();
       hilfe.open("Regeln.txt");
     }
    
     void Reversi::ausgabegewinner()
     {
      cout << " Soll winner ausgeben ";
    
     }
    
     void Reversi::ausgabepassen()
     {
      if(wer_ist_dran==true)
        {
         cout << endl << "Spieler 1 muss passen" ;
         wer_ist_dran=false;
        }
      else
        {
         cout << endl << "Spieler 2 muss passen";
    
         wer_ist_dran=true;
        }
        cout << endl << "Bei Tasten druck geht es weiter";
        getch();
      }
    
     void Reversi::ausgabezeichenSpielfeld()
     {
      int g=0, a=0 ;
      clrscr();
      for(a=0;a<64;a++)
      {
       if(g==8)
       {
         g=0;
         cout << endl ;
        }
       switch(feld[a])
       {
         case 66 : cout<< setw(3);
                   cout << "X" ;
                break;
         case  99 : cout<< setw(3);
                   cout << "O" ;
                break;
        default: cout<< setw(3);
                cout << feld[a];
    
       }
       g++;
       }
      cout<< endl;
      cout<< endl;
     }
    
    void Reversi::ausgabe_wer_ist_dran(void)
     {
     if(wer_ist_dran==true)
       {
        cout << "Spieler1 ist dran" ;
    
       }
     else
       {
        cout << "spieler2 ist dran" ;
        ;
       }
     cout << endl << "Bei druecken von F1 erscheint die Hilfe." ;
     cout << endl<< "Auf welche Stelle soll gesetzt werden ? : ";
    
     }
    
    bool Reversi::spielende(void)
    {
      int i=0, moeglichkeiten=1, besetzt=0;
      bool erg;
      for(i;i<64;i++)
        {
        if(feld[i]!=99|feld[i]!=66)
          {
    
           erg=this->checksetze(i,"N");
           if(erg==true)
              moeglichkeiten++;
    
           erg=this->checksetze(i,"NO");
           if(erg==true)
              moeglichkeiten++;
    
           erg=this->checksetze(i,"O");
           if(erg==true)
              moeglichkeiten++;
    
           erg=this->checksetze(i,"SO");
           if(erg==true)
              moeglichkeiten++;
    
           erg=this->checksetze(i,"S");
           if(erg==true)
              moeglichkeiten++;
    
           erg=this->checksetze(i,"SW");
           if(erg==true)
              moeglichkeiten++;
    
           erg=this->checksetze(i,"W");
           if(erg==true)
              moeglichkeiten++;
    
           erg=this->checksetze(i,"NW");
           if(erg==true)
              moeglichkeiten++;
          }
         if(feld[i]==99|feld[i]==66)
           {
            besetzt=besetzt+1;
           }
        }
       if(besetzt==63)
         {
         // b.gewinner();
         }
       else if(moeglichkeiten>1)
         {
          return true;
         }
       else
         {
           this->ausgabepassen();;
         }
       return false ;
     }
    
    bool Reversi::checksetze(int stelle, string richtung)
     {
      int a=0, Gestein=0, dran=0, gegner=0;
      bool erg;
       //------Umwandlung von string in int für switch/case Anweisung
       if(richtung=="N")
        a=1;
       if(richtung=="NO")
        a=2;
       if(richtung=="O")
        a=3;
       if(richtung=="SO")
        a=4;
       if(richtung=="S")
        a=5;
       if(richtung=="SW")
        a=6;
       if(richtung=="W")
        a=7;
       if(richtung=="NW")
        a=8;
       if(a==0)
        return false ;
       if(wer_ist_dran==true)
       {
        dran=66  ;
        gegner=99;
       }
       else
       {
       dran=99;
       gegner=66;
       }
    
       if(feld[stelle]==66)
          return false  ;
       if(feld[stelle]==99)
          return false   ;
    
        switch(a)
        {
        case 1: // N
               if(stelle>15) // horizontaler Rand  1-16
                 {
                  stelle=stelle-8;
                  Gestein=steinsucheminus(feld,stelle,8,gegner,dran);
                  if(Gestein<=0)
                      return false;
                  if(Gestein==stelle)
                      return false ;
                  return true;
                 }
               else
               return false;
        case 2:// N0
               erg=rand(8,stelle,8,72);// vertiakler Rand 8,16,24,32,40,48,56,64
               if(erg==true)
                 if(stelle>7)// horizontaler Rand 1-8
                   {
                    stelle=stelle-7;
                    Gestein=steinsucheminus(feld,stelle,7,gegner,dran);
    
                    if(Gestein<=0)
                      return false;
                    if(Gestein==stelle)
                      return false ;
                    return true;
                    }
               return false;
        case 3: // O
               erg=rand(8,stelle,8,72); // vertiakler Rand 8,16,24,32,40,48,56,64
               if(erg==true)
                 {
                  stelle=stelle+1;
                  Gestein=steinsucheplus(feld,stelle,1,gegner,dran);
                  if(Gestein<=0)
                    return false;
                  if(Gestein==stelle)
                    return false ;
                  return true;
                 }
               return false;
        case 4: // so
               erg=rand(8,stelle,8,72); // vertiakler Rand 8,16,24,32,40,48,56,64
               if(erg==true)
                 if(stelle<56)// horizontaler Rand 57-64
                 {
                  stelle=stelle+9;
                  Gestein=steinsucheplus(feld,stelle,9,gegner,dran);
                  if(Gestein<=0)
                    return false;
                  if(Gestein==stelle)
                    return false ;
                  return true;
                  }
               return false;
        case 5: // s
               if(stelle<48)// horizontaler Rand 49-64
                 {
                  stelle=stelle+8;
                  Gestein=steinsucheplus(feld,stelle,8,gegner,dran);
                  if(Gestein<=0)
                    return false;
                  if(Gestein==stelle)
                    return false ;
                  return true;
                 }
               return false;
        case 6: // SW
               erg=rand(1,stelle,8,65); // vertiakler Rand   1,9,17,25,33,41,49,57
               if(erg==true)
                 if(stelle>15) // horizontaler Rand 1-16
                   {
                    stelle=stelle+7;
                    Gestein=steinsucheplus(feld,stelle,7,gegner,dran);
                    if(Gestein<=0)
                     return false;
                    if(Gestein==stelle)
                      return false;
                    return true;
                   }
               return false;
        case 7:  // W
               if(stelle<48) // horizontaler Rand 49-64
                {
                 stelle=stelle-1;
                 Gestein=steinsucheminus(feld,stelle,1,gegner,dran);
                 if(Gestein<=0)
                      return false;
                 if(Gestein==stelle)
                      return false;
                 return true;
                }
                return false;
        case 8:// NW
               erg=rand(1,stelle,8,65); // vertiakler Rand   1,9,17,25,33,41,49,57
               if(erg==true)
                 if(stelle>7)  //horizontaler Rand    1-8
                   if(erg==true)
                     {
                      stelle=stelle-9 ;
                      Gestein=steinsucheminus(feld,stelle,9,gegner,dran);
                      if(Gestein<=0)
                        return false;
                      if(Gestein==stelle)
                        return false ;
                      return true;
                     }
        }
       return  false;
     }
    
    void Reversi::setze(int stelle, string richtung)
    {
      int a=0,  dran=0, gegner=0;
      bool erg;
       //------Umwandlung von string in int für switch/case Anweisung
       if(richtung=="N")
        a=1;
       if(richtung=="NO")
        a=2;
       if(richtung=="O")
        a=3;
       if(richtung=="SO")
        a=4;
       if(richtung=="S")
        a=5;
       if(richtung=="SW")
        a=6;
       if(richtung=="W")
        a=7;
       if(richtung=="NW")
        a=8;
       if(wer_ist_dran==true)
       {
        dran=66;
        gegner=99;
    
       }
       else
       {
       dran=99;
       gegner=66;
    
       }
        switch(a)
        {
        case 1: // N
               feld[stelle]=dran;
               if(feld[stelle-8]==gegner)
                 this->setze(stelle-8,"N");
               break;
    
        case 2: // NO
               feld[stelle]=dran;
               if(feld[stelle-7]==gegner)
                 this->setze(stelle-7,"NO");
              break;
        case 3: // 0
               feld[stelle]=dran;
               if(feld[stelle+1]==gegner)
                 this->setze(stelle+1,"O");
             break;
        case 4: // SO
              feld[stelle]=dran;
               if(feld[stelle+9]==gegner)
                 this->setze(stelle+9,"SO");
             break;
        case 5: // S
               feld[stelle]=dran;
               if(feld[stelle+8]==gegner)
                 this->setze(stelle+8,"S");
             break;
        case 6: // SW
               feld[stelle]=dran;
               if(feld[stelle+7]==gegner)
                 this->setze(stelle+7,"SW");
             break;
        case 7: // W
               feld[stelle]=dran;
               if(feld[stelle-1]==gegner)
                 this->setze(stelle-1,"O");
             break;
        case 8: // NW
               feld[stelle]=dran;
               if(feld[stelle-9]==gegner)
                 this->setze(stelle-9,"NW");
        }
    
       }
    
    void main(void)
     {
      Reversi b;
      bool erg=false;
      int stell=0, wert=1, wert1=1;
      string richtun="Nix";
      short KeyState = 0;
    
     // short ArrKeyState[256]={0};
    
      do
        {
         b.ausgabezeichenSpielfeld();
         b.ausgabe_wer_ist_dran();
         erg=b.spielende();
    
         short ArrKeyState[256]={0};
         KeyState = 0;
         if(erg==true) // überprüfung ob Spieler setzen kann
           {
            while (wert<2)
              {
               for (int i = 1; i < 256; i++) // Abprüfen der Gesammtentastertur
                 {
                  KeyState = GetAsyncKeyState(i);
                  ArrKeyState[i] = KeyState;
    
                 }
               if (ArrKeyState[112]==-32767) // Überprüfen ob F1 gedrückt wurde
                 {
                  b.ausgabehilfe();
                  wert=2;
    
                 }
               else
                {
                 for (int i = 48; i <58 ; i++)
                   {
                    if(ArrKeyState[i]!=0)
                      {
    
                       wert=2;
                       wert1=3;
                       cin>>stell;
                      }
                   }
                }
              }
            if(wert1==3)
            {
             cout << endl << "Welche Richtung ?";
             cin >> richtun ;
             erg=b.checksetze(stell-1, richtun);
             if(erg==true)
             {
              b.setze(stell-1,richtun);
              wert=1;
              wert1=1;
              erg=false;
              b.aenderwer_ist_dran();
             }
             else      // wenn sezten der sonst eingabe nich in ordnung war
             {
              cout << endl <<" Spielzug oder eingabe nicht zulaessig" <<endl;
              cout << "Bei Tasten druck geht es weiter ";
              getch();
              wert=1;
              wert1=1;
             }
            }
            else //wenn hilfe ausgegeben wurde trifft dieser fall   ein
             {
              wert=1;
              }
            }
            else
              {
               b.ausgabegewinner();
              }
        }
      while(wert1<2);
      getch();
     }
    
    bool rand( int c, int b,int plus, int abbruch)
    {
     bool erg;
     if(c==b) // wenn die stelle am rand leigt dan diese anweisung
        return false ;
     if(c==abbruch) //wenn die stelle nicht am rand liegt
        return true ;
     rand(c+plus,b,plus,abbruch);
    }
    
    int steinsucheminus(int feldf[], int d , int e,int w,int gw)
    {
     if(feldf[d]!=w)
      {
       if(feldf[d]==gw)
         {
          return d;
         }
       else
          return 0;
      }
     if(d<=0)
         return 0 ;
        steinsucheminus(feldf,d-e,e,w,gw);
    }
    
    int steinsucheplus(int feldf[] ,int d ,int e ,int w ,int gw)
     {
    
     if(feldf[d]!=w)
      {
       if(feldf[d]==gw)
          return d;
       else
          return 0;
      }
     if(d<=0)
         return 0 ;
        steinsucheplus(feldf,d+e,e,w,gw);
     }
    


  • hy

    so ich habs. Ich glaub nähmlich das irgend wie noch zeichen im Tastatur Puffer
    waren. Und die hat er beimn einlesen der Tastatur gefunden und des waren halt zahlen und zack war er in else drin.

    Man muss vor die if (ArrKeyState[112]==-32767) noch ne if setzen nähmlich
    if(if(kbhit()) dann klappt alles.

    Ob mein Erklärung stimmt weiß ich nicht auf jeden fal geht es.


Anmelden zum Antworten