Hilfe bei Vier Gewinnt



  • //züge zurücknehmen
    ja das mit dem array habsch mir auch schon überlegt...
    aber ich brauch ja nen y und nen x wert... und die beiden werte kannsch ja nicht in einen speicher tun...
    will das man 5 züge zurückgehen kann...
    ich könnte entweder 2 arrays nehmen einmal für x und einmal für y oder
    oder des array doppelt so groß machen...
    aber da es da leichter zu fehlern kommen kann wär es doch angebrachter 2 zu nehmen oder??

    //Exe erstellung
    und noch ne frage... wenn ich des spiel über f9 starte... dann erstellt er mir ja auch eine exe das ist ja aber nur ne kleine... wenn ich die auf anderen computern ausführe geht die ja nicht...
    wie mach cih das das es eine "richtige" ist die alle erforderlichen infos enthält???

    was ist STL???



  • Du brauchst nur einen Wert, den der Spalte. Du kannst immer nur den obersten in der Spalte wieder rausnehmen.

    EXE: Sieh mal in die FAQ unter Standalone EXE.

    STL: Schau mal in die Hilfe Deines BCB.



  • so nun wieder zeit für cpp 🙂

    ich brauch trotzdem 2 werte.. weil ich muss ja wissen welche spalte er ist und in welcher reihe er ist.

    weil wie soll ich herrausfinde welches der oberste ist ???

    was soll mir STL bringen???
    also die hilfe hat mir net wirklich was Gebracht....

    //nochwas nebenbei...
    kann man den code zur gewinnabfrage so lassen?

    wenn er so ok ist mach ich des struktogramm dafür

    //Gewinnfeststellung---------------------------------------------------------
    bool TVierGewinnt::viergewinnt(int countx, int scolor)
    {
      int count=0, count2=0, count3=0, count4=0;
      for(int cy=MAXY-1; cy>=3; cy--)//beginn der diagonalen von rechts
      {
        for (int cx = MAXX-1; cx >= 3; cx--)
        {
          count4 = 0;
          for(int cv = 0; cv<=3; cv++)
          {
            if(feldwerte[cy-cv][cx-cv] == scolor)
            count4++;
          }
          if(count4 == 4) return(true);
          count4 = 0;
        }
      }//ende for schleife   //ende der diagonalen von rechts
      for(int cy=MAXY-1; cy>=3; cy--)//beginn der diagonalen von links   und der senkrechten
      {
        for (int cx = 0; cx<=4; cx++)
        {
          count3 = 0;
          count2 = 0;
          for(int cv = 0; cv<=3; cv++)
          {
            if(feldwerte[cy-cv][cx+cv] == scolor)
              count3++;
            if(feldwerte[cy][cx+cv] == scolor)
              count2++;
          }
          if(count2==4 || count3==4) return(true);
          count3 = 0;
          count2 = 0;
        }
      }//ende for schleife   //ende der diagonalen von links
      for(int cy=MAXY-1; cy>=0; cy--)//beginn der senkrechten
      {
        count = 0;
        for (int cv = 0; cv <=3; cv++){
          if(feldwerte[cy -cv][countx] == scolor)
          count++;
          }
        if (count == 4) return(true);
        count = 0;  //ende der senkrechten
      }//ende for schleife
    
      if(start==0)
        start++;
      else
        start--;
      return(false);
    }
    


  • Hallo

    ich brauch trotzdem 2 werte.. weil ich muss ja wissen welche spalte er ist und in welcher reihe er ist.

    weil wie soll ich herrausfinde welches der oberste ist ???

    In dem besagten Array brauchst du nur einen Wert, den der Spalte (also den Wert, auf den du die Gewinnüberprüfung machst). Denn genau so wie du immer nur von oben einen neuen Stein setzen kannst, kannst du auch immer nur einen Stein von oben wieder wegnehmen.
    Um jetzt den obersten Stein einer Spalte zu finden, gehst du nur die betreffende Spalte von unten nach oben durch und suchst den letzten Stein der Spalte, das heißt das nächste Feld der Spalte ist leer.

    nochwas nebenbei...
    kann man den code zur gewinnabfrage so lassen?

    wenn er so ok ist mach ich des struktogramm dafür

    Funktioniert denn der Code, so wie du willst? Es geht erstmal nicht darum, das der Code perfekt ist, sondern das du weißt wie er funktioniert.

    bis bald
    akari



  • In dem besagten Array brauchst du nur einen Wert, den der Spalte (also den Wert, auf den du die Gewinnüberprüfung machst). Denn genau so wie du immer nur von oben einen neuen Stein setzen kannst, kannst du auch immer nur einen Stein von oben wieder wegnehmen.
    Um jetzt den obersten Stein einer Spalte zu finden, gehst du nur die betreffende Spalte von unten nach oben durch und suchst den letzten Stein der Spalte, das heißt das nächste Feld der Spalte ist leer.

    also speicher ich im prinzip die xachse von mienem array und suche von unten ab die erste 2 (2 = leer) und lösche ein feld darunter und mach dies auch gleich weiss...

    hmm muss ich mal gucken wie ich des mache... setz mich gleich mal ran

    //------------------------------------------------------------------

    Funktioniert denn der Code, so wie du willst? Es geht erstmal nicht darum, das der Code perfekt ist, sondern das du weißt wie er funktioniert.

    der code funktioniert genauso wie ich will könnte net besser laufen 🙂
    und verstehen tu icH IHn auch 🙂
    hab ja jetzt mittlerweile die anwendung von bool drauf 😉

    greetz
    morphY



  • wow morphY, dann bist duanscheinend schon fertig 👍
    wird wohl ne 1 beim master-g ^^



  • @apfelsaft
    jo bestimmt 🙂

    @all
    hab jetzt auch den button zum zurücksetzen drinne 🙂 ud er funzt optimal 🙂

    @akari
    hast du icq? oder email? email haste bestimmt ^^ willste mir die mal geben?
    will dir nen code schicken... soll aber halt net jeder sehen da es einige gibt die des gleiche game programmieren ^^ net das die dann den gleichen code haben ^^


Anmelden zum Antworten