C++ 4 GEWINNT Problem



  • Hallo, und zwar versuche ich für die Schule 4 gewinnt mit Allegro bei C++ zu programmieren.
    Ich hab soweit alles bis auf die Gewinnabfrage. Aber es gibt noch ein Problem. Die Steine fallen in die jeweilige Spalte runter etc. Das funktioniert alles, nur wenn ich auf eine Spalte drücke fallen direkt 6-8 Steine herunter. Hat jemand eine Idee wie ich umgehen kann, das das Programm in die Schleife wieder direkt reingeht und die Bedingung für diese Spalte wieder direkt erfüllt ist? Danke


  • |  Mod

    @Marco456 Es scheint mir bemerkenswert, dass ein zweiter Nutzer mit einer aehnlichen IP nur wenige Tage nach dem ersten ebenfalls ein Schulprojekt mit Allegro zu bewerkstelligen sucht, und einen detailarmen Post verfasst. Falls das wirklich reiner Zufall ist, entschuldige ich mich 🤨

    Wie auch immer, meine Bitte bzgl. Code posten ist nach wie vor gültig.



  • Ich suche einfach nur einen Weg, wie man in Allegro bezüglich der Mauskoordinaten eine Verzweigung programmiert ohne öfters gestartet zu werden, bzw. Wie man umgehen kann das eine Verzweigung öfters genutzt wird, nicht spezifisch auf dieses Programm.



  • #include <allegro.h>
    #include <stdio.h>
    #include <math.h>
    
    int main()
    {
    //initialisieren
        allegro_init();
        install_keyboard();
        install_timer();
        install_mouse();
    //GRAFIK mode
        set_gfx_mode(GFX_AUTODETECT_WINDOWED, 1000, 1000, 0, 0);
    //Farben
        set_palette(desktop_palette);
        int black=makecol(0,0,0);
        int white=makecol(255,255,255);
        int red=makecol(255,0,0);
        int green=makecol(0,255,0);
        int blue=makecol(0,0,255);
        int pink=makecol(255,0,144);
        allegro_message("4 Gewinnt!!");
        start:;
        int spieler=1;
        int kreis=0;
        int ja=0;
        int feld[9][9]={0};
        int y2=850;
    
    
     //Spielfeld
    
     clear_to_color(screen,black);
    
    
        for(int i=1;i<=900;i++)
        {
             int i_1=i*100;
             line(screen,i_1,100,i_1,900,white);
             line(screen,100,i_1,900,i_1,white);
        }
    
        for(int i_i=50;i_i<=750;i_i=i_i)
        {
    
    i_i=i_i+100;
    
            circle(screen, i_i, 50, 45, white);
        }
    
        show_mouse(screen);
    
        while(!key[KEY_ESC]){
    
    
    
    int y=1, y1=1, y3=1, y4=1, y5=1, y6=1,y7=1,y8=1, y11=850, y22=850, y33=850, y44=850, y55=850, y66=850, y77=850, y88=850;
         while(kreis<64)
     {
    
    if ( mouse_b & 1 && mouse_x > 99 && mouse_x < 201 && mouse_y < 100 && mouse_y > -1 && spieler==1 && feld [1][y]==0 && ja<1) {
    if(feld[1][8]<1 ){
    
                 circlefill (screen, 150, y11, 45, makecol(0,255,0));
                       kreis=kreis+1;
                      feld[1][y]=1;
                      y=y+1; y11=y11-100;   ja=1;
    }
    
    }
    
    
    
    if ( mouse_b & 1 && mouse_x > 99 && mouse_x < 201 && mouse_y < 100 && mouse_y > -1 && spieler==-1 && feld [1][y]==0 && ja<1 ) {
    if(feld[1][8]<1 ){
    
                 circlefill (screen, 150, y11, 45, makecol(255,0,0));
                       kreis=kreis+1;
                      feld[1][y]=1;
                      y=y+1; y11=y11-100;   ja=1;
    
    }
    
    
    
    }
    
    
    
    
    
    if ( mouse_b & 1 && mouse_x > 199 && mouse_x < 301 && mouse_y < 100 && mouse_y > -1 && spieler==1 && feld [2][y1]==0 && ja==0) {
    if(feld[2][8]<1 ){
    
                 circlefill (screen, 250, y22, 45, makecol(0,255,0));
                       kreis=kreis+1;
                      feld[2][y1]=1;    ja=1;
                      y1=y1+1; y22=y22-100;
    }
    }
    
    if ( mouse_b & 1 && mouse_x > 199 && mouse_x < 301 && mouse_y < 100 && mouse_y > -1 && spieler==-1 && feld [2][y1]==0  && ja==0) {
     if(feld[2][8]<1){
                        kreis=kreis+1;
                      feld[2][y1]=1;   ja=1;
                        circlefill (screen, 250, y22, 45, makecol(255,0,0));
                        y1=y1+1; y22=y22-100;
    
                    }
    }
    
    
    
    
    
    
    if ( mouse_b & 1 && mouse_x > 299 && mouse_x < 401 && mouse_y < 100 && mouse_y > -1 && spieler==1 && feld [3][y3]==0 && ja==0) {
    if(feld[3][8]<1){
                 circlefill (screen, 350, y33, 45, makecol(0,255,0));
                       kreis=kreis+1;
                      feld[3][y3]=1;    ja=1;
                      y3=y3+1; y33=y33-100;
    }
    }
    
    if ( mouse_b & 1 && mouse_x > 299 && mouse_x < 401 && mouse_y < 100 && mouse_y > -1 && spieler==-1 && feld [3][y3]==0 && ja==0) {
    if(feld[3][8]<1){
                        kreis=kreis+1;
                      feld[3][y3]=1;   ja=1;
                        circlefill (screen, 350, y33, 45, makecol(255,0,0));
                        y3=y3+1; y33=y33-100;
    
                    }
    }
    
    
    
    
    
    if ( mouse_b & 1 && mouse_x > 399 && mouse_x < 501 && mouse_y < 100 && mouse_y > -1 && spieler==1 && feld [4][y4]==0  && ja==0) {
    if(feld[4][8]<1){
    
                 circlefill (screen, 450, y44, 45, makecol(0,255,0));
                       kreis=kreis+1;    ja=1;
                      feld[4][y4]=1;
                      y4=y4+1; y44=y44-100;
    
    }
    }
    if ( mouse_b & 1 && mouse_x > 399 && mouse_x < 501 && mouse_y < 100 && mouse_y > -1 && spieler==-1 && feld [4][y4]==0  && ja==0) {
             if(feld[4][8]<1){
                        kreis=kreis+1;
                      feld[4][y4]=1;     ja=1;
                        circlefill (screen, 450, y44, 45, makecol(255,0,0));
                        y4=y4+1; y44=y44-100;
    
    
                    }
    }
    
    
    
    
    if ( mouse_b & 1 && mouse_x > 499 && mouse_x < 601 && mouse_y < 100 && mouse_y > -1 && spieler==1 && feld [5][y5]==0   && ja==0){
    if(feld[5][8]<1 ){
    
                 circlefill (screen, 550, y55, 45, makecol(0,255,0));
                       kreis=kreis+1;      ja=1;
                      feld[5][y5]=1;
                      y5=y5+1; y55=y55-100;
    
    }
    }
    if ( mouse_b & 1 && mouse_x > 499 && mouse_x < 601 && mouse_y < 100 && mouse_y > -1 && spieler==-1 && feld [5][y5]==0  && ja==0 ) {
       if(feld[5][8]<1 ){
                        kreis=kreis+1;         ja=1;
                      feld[5][y5]=1;
                        circlefill (screen, 550, y55, 45, makecol(255,0,0));
                        y5=y5+1; y55=y55-100;
    
                    }
    }
    
    
    
    
    
    if ( mouse_b & 1 && mouse_x > 599 && mouse_x < 701 && mouse_y < 100 && mouse_y > -1 && spieler==1 && feld [6][y6]==0  && ja==0) {
    if(feld[6][8]<1 ){
    
                 circlefill (screen, 650, y66, 45, makecol(0,255,0));
                       kreis=kreis+1;        ja=1;
                      feld[6][y6]=1;
                      y6=y6+1; y66=y66-100;
    }
    }
    if ( mouse_b & 1 && mouse_x > 599 && mouse_x < 701 && mouse_y < 100 && mouse_y > -1 && spieler==-1 && feld [6][y6]==0 && ja==0 ) {
    if(feld[6][8]<1 ){
    
                        kreis=kreis+1;        ja=1;
                      feld[6][y6]=1;
                        circlefill (screen, 650, y66, 45, makecol(255,0,0));
                        y6=y6+1; y66=y66-100;
    
                    }
    }
    
    
    if ( mouse_b & 1 && mouse_x > 699 && mouse_x < 801 && mouse_y < 100 && mouse_y > -1 && spieler==1 && feld [7][y7]==0  && ja==0) {
    if(feld[7][8]<1 ){
    
                 circlefill (screen, 750, y77, 45, makecol(0,255,0));
                       kreis=kreis+1;           ja=1;
                      feld[7][y7]=1;
                      y7=y7+1; y77=y77-100;
    }
    }
    if ( mouse_b & 1 && mouse_x > 699 && mouse_x < 801 && mouse_y < 100 && mouse_y > -1 && spieler==-1 && feld [7][y7]==0 && ja==0 ) {
    if(feld[7][8]<1 ){
    
                        kreis=kreis+1;
                      feld[7][y7]=1;            ja=1;
                        circlefill (screen, 750, y77, 45, makecol(255,0,0));
                        y7=y7+1; y77=y77-100;
    
                    }
    }
    
    
    
    
    
    
    
    
    
    if ( mouse_b & 1 && mouse_x > 799 && mouse_x < 901 && mouse_y < 100 && mouse_y > -1 && spieler==1 && feld [8][y8]==0 && ja==0) {
    if(feld[8][8]<1  ){
    
                 circlefill (screen, 850, y88, 45, makecol(0,255,0));
                       kreis=kreis+1;           ja=1;
                      feld[8][y8]=1;
                      y8=y8+1; y88=y88-100;
    }
    }
    if ( mouse_b & 1 && mouse_x > 799 && mouse_x < 901 && mouse_y < 100 && mouse_y > -1 && spieler==-1 && feld [8][y8]==0 && ja==0) {
    
    if(feld[8][8]<1  ){
                        kreis=kreis+1;         ja=1;
                      feld[8][y8]=1;
                        circlefill (screen, 850, y88, 45, makecol(255,0,0));
                        y8=y8+1; y88=y88-100;
    
    }
    }
    
        if (ja=1){spieler=spieler*-1; ja=0;}
    
    
    
    }
     }
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    END_OF_MAIN()
    
    
    
    
    
    
    
    


  • Hier der Code, musste ein paar Funktionen rausnehmen, da ich das mit dem zweidimensionalem Array nicht über einen Parameter hinbekommen habe. Ist auch noch umständlich mit sehr vielen "If`s" geschrieben, da ich nur roh probieren wollte, wie sich verschiedene Veränderungen auf das Programm auswirken. Und nein, ich bin wirklich nicht der, für den sie mich halten 😉


  • |  Mod

    @Marco456 Schade, ich wollte dich gar nicht entmutigen, deine Frage richtig zu stellen. Und der Code war, obgleich furchtbar, doch immerhin vollständig. Wenn du moechtest, koennen wir spaeter mal daran arbeiten ihn ein wenig aufzuräumen, bis du hier die Frage erneut posten kannst, und eine konkrete Stelle darin aufzeigen kannst, an der du verzweifelst (wenn das dann noch der Fall ist).



  • @Columbo ja auf jeden Fall mal danke für die konstruktive Kritik, mir ist auf jeden Fall klar das der Code bsolut nicht schön geschrieben ist, ich wollte am Anfang nur etwas mit Allegro experementieren, da ich noch nicht sehr viel Erfahrung hatte in Allegro. Mir ist schon klar, dass ich das alles noch in Funktionen, Schleifen etc. packen muss, also wie gesagt reines Rohprogramm. Hatte nur keine Lust mehr auf Kommentare wie von dem Anderem die mir nicht helfen.
    würde mich freuen wenn sie mir vl. ein bisschen helfen könnten.


  • |  Mod

    @Marco456 Bitte hoer auf, deine Beiträge zu löschen, sonst wird das nie was.

    Versuch doch mal, deine ganzen if-Abfragen in eine Funktion auszulagern, und verschiedene Operationen innerhalb dieser if-Abfrage erneut auszulagern (bspw. ob der Cursor innerhalb eines vorgegebenen Areals liegt). Als ich mit Allegro gearbeitet habe, musste ich wie bereits erwähnt einen Haufen GUI Funktionalität selbst implementieren; in deinem anderen Thread könntest du einen Versuch wagen, die Maus mittels einer Klasse zu modellieren, die sich den Zustand merkt, und entsprechende Funktionen bereitstellt.



  • @Columbo Mein Programm funktioniert schon seit vorgestern deshalb, aber danke 😉
    Edit: Habe nur irgendwo Hilfe gesucht um 1-2 kleine Fragen zu klären, wurde aber eigentlich quasi nur blöd angemacht hier, bis ich 1-2 gute Antworten erhielt. Da ich nun aber keine Hilfe mehr benötige werde ich mich von dieser Seite hier distanzieren.



  • Was willst du erwarten? Posts löschen, neue Accounts anlegen und den Empfehlungen nicht nachkommen. Wenn du meinst es besser zu wissen, dann frage doch nicht erst nach. Hier im Forum findest die Ansprechpartner, welche viele Jahre Erfahrung mit C++ haben und täglich damit umgehen. Zwar ist dein Problem jetzt gelöst, allerdings vermute ich, dass bei dem nächsten Problem wieder ein neuer Account erstellt wird. Das ist ja Unsinn. Rede höflich mit den Membern, nehme dir die Tipps zu Herzen und zeige durch Eigeninitiative, dass du auch selbst an dem Problem aktiv arbeitest. Dann entsteht dieser ganze Kindergarten erst garnicht.



  • @Zhavok Was ist los mit dir? Ich habe noch nie einen neuen Account erstellt das hier ist mein erster Account in diesem Forum ich verstehe nicht was ich gemacht haben soll?
    Außerdem hab ich mir die netten Antworten auch zu Herzen genommen nur diese blöden Kommentare von den Anderen können sie sich sparen. Keine Ahnung warum mir hier die ganze Zeit vorgeworfen wird, dass ich hier anscheinend irgendwann schon einmal etwas geschrieben haben soll und anscheinend nichts gutes gemacht habe, das finde ich einfach unfair das mir irgendwas unterstellt wird.


  • |  Mod

    @Marco456 Das habe ich versehentlich vorgeworfen, und da es nicht zuzutreffen scheint, entschuldige ich mich nochmals fuer diesen Vorwurf. Aber allgemein betrachtet hast du deine Frage eben unverständlich formuliert, was in der IT community oftmals zu zynischen Antworten führt. Wenn du künftig den Thread Du brauchst Hilfe? beachtest, Eigeninitiative investierst (bzw. das zu erkennen gibst) und deine Frage vollständig und nachvollziehbar darstellst, wirst du definitiv auch ordentliche Antworten anziehen.

    Wir sind nicht hier um Anfänger zu demoralisieren und ihren unweigerlich furchtbaren Code auseinanderzunehmen. Und dass Fragen stellen nicht unbedingt leicht fällt, wenn man darin keine Übung hat wissen wir ebenfalls. Aber dir muss auch bewusst sein, dass wir nicht in der Lage sind, in deinen Kopf zu schauen oder gewisse Probleme anhand einer vagen Beschreibung sofort zuordnen und lösen zu können. Versuch es einfach nochmal. Mein erster Thread in diesem Forum hatte den Titel "Prob mit Programm" und hat SeppJ und volkard nicht sonderlich gefallen, aber ich hab einfach stur weiter gepostet (irgendwann hat sich SeppJ beschwert, ich haette mir volkards Tipp mit "Schleifen" nicht zu Herzen zu kommen). 😌