Snake



  • es ist immer so ne sache sich mit code anderer menschen zu beschäftigen, besonders wenn man es nicht durch den compiler jagen kann...

    evtl. mal ein paar sachen die mir an deinem aufgefallen sind,

    1. die schlange geht keine diagonale. das ist aber mit deinem code möglich
    2. verwende statt den if's in der while schleife ein switch, das macht dem compiler den optimierungs prozess leichter
    3. wieso übergibst du den functionen die ints mit & das ist doch nicht nötig
    4. ßöäü und sonstige zeichen haben da nichts verloren, genauso wie andere utf-8 zeichen, denke das regex für ansi c schaut so in der richtung aus "a-zA-Z0-9_" kann mich aber auch täuschen und hab das 'ß' iwie überlesen 😉

    bei sowas im zweifel immer die ansi c grammar konsultieren
    http://www.lysator.liu.se/c/ANSI-C-grammar-l.html#CONSTANT

    5. deine schlange geht noch nicht in alle richtungen...

    es ist auch fraglich ob 2 arrays (iSchlangeX,iSchlangeY) besser sind als ein zwei dimensionales, bin mir da aber nicht sicher.

    6. ich hab dir doch ein beispiel gebastelt das die schlange bewegt, auch wenns jetzt nicht super sauber ist, und man das noch viel schöner machen kann, so sollte es doch funktionieren, zur erklärung kann man evtl. sagen das bei jedem schritt das letzte element der schlange gelöscht wird und als kopf verwendet wird. um nicht das ganze array zu verschieben, gibt es diese "center" variable die angibt wo sich der kopf befindet. und "center-1" ist dann das letzte element.

    lg lolo



  • Dieser Code sollte, wenn man ihn in die Entwicklungsumgebung kopiert ohne weiteres starten. Der Code ist nur ein kleiner Ausschnitt des gesamten Projekts und soll das Problem mit den kurzzeitigen Löchern veranschaulichen, wenn man es startet.

    Im Gesamten funktioniert alles, nur bei der Richtungsänderung kommt es meistens zu Löchern die aber wieder verschwinden und das soll ja nicht sein. Möchte nur gerne wissen mit was das zusammenhängt, bzw. was geändert werden muss.

    mfg



  • hab das gerade mal durch den vc++2010 gejagt, scheinbar erlaubt der utf-8 *kotz*

    void Haupt(int iSchlangeX[], int iSchlangeY[], int &iGroeßeSchlange){ 
    
        int dir = 0; 
    
        int iKopfX = iSchlangeX[0]; 
        int iKopfY = iSchlangeY[0];
        int iZaehlerD = 0; 
        int iZaehler = 0; 
    
        StartSchlange(iSchlangeX, iSchlangeY, &iGroeßeSchlange); 
        while(1){ 
            iZaehler++;
    		switch(dir){
    		case 0:
    			iSchlangeX[iGroeßeSchlange-iZaehler]=--iKopfX; 
                iSchlangeY[iGroeßeSchlange-iZaehler]=iKopfY;
    		break;
    		case 1:
    			iSchlangeX[iGroeßeSchlange-iZaehler]=++iKopfX; 
                iSchlangeY[iGroeßeSchlange-iZaehler]=iKopfY;
    		break;
    		case 2:
    			iSchlangeX[iGroeßeSchlange-iZaehler]=iKopfX; 
                iSchlangeY[iGroeßeSchlange-iZaehler]=--iKopfY;
    		break;
    		case 3:
    			iSchlangeX[iGroeßeSchlange-iZaehler]=iKopfX; 
                iSchlangeY[iGroeßeSchlange-iZaehler]=++iKopfY;
    		break;
    		}
    		if(iZaehler==iGroeßeSchlange)
    		        iZaehler=0; 
    
    		if(iZaehlerD++>21){
    			if(iZaehlerD>27)
    				iZaehlerD=0;
                dir = 1;
    		}else if(iZaehlerD++>14)
    			dir = 2;
    		else if(iZaehlerD++>7)
    			dir = 0;
    		else
    			dir = 3;
    
    		Sleep(500); 
            clrscr(); 
            ZeichneSchlange(iSchlangeX, iSchlangeY, iGroeßeSchlange, iKopfX, iKopfY); 
            } 
    }
    

    lg lolo



  • was ist utf-8???

    mfg



  • void _tmain(){

    char *中華人民共和 = "utf-8 in source sucks";

    cout << 中華人民共和;
    }

    ______________________
    und wie gut ist dein chinesisch 😉



  • gehörte wieder mal aufpoliert



  • noobLolo schrieb:

    void _tmain(){

    char *中華人民共和 = "utf-8 in source sucks";

    cout << 中華人民共和;
    }

    ______________________
    und wie gut ist dein chinesisch 😉

    das wär doch mal was für den "International Obfuscated C Code Contest" 😃



  • thx, funktioniert, muss noch schauen was du anders gemacht hast



  • franz-21 schrieb:

    thx, funktioniert, muss noch schauen was du anders gemacht hast

    glaub der haupt fehler war iZaehlerH und iZaehlerV die ich zusammengefasst hab zu iZaehler

    warum hast da eigentlich "ae" statt "ä" war das ne göttliche eingebung 😉



  • lol, ne, Umlaute sollte man ja nicht benutzen beim Programmieren, oder?!?!?

    mfg


  • Mod

    noobLolo schrieb:

    und wie gut ist dein chinesisch 😉

    中華人民共和
    In Porzellan Leute Porzellan total und!
    Besser bekannt als Volksrepublik China.



  • wollts nicht unbeding nochmal ausgraben, aber hatte gestern noch so eine idee die ich euch nich vorenthalten wollte

    void Haupt(int iSchlangeX[], int iSchlangeY[], int &iGroeßeSchlange){
    
        int dir = 0;
    
        int iKopfX = iSchlangeX[0];
        int iKopfY = iSchlangeY[0];
        int iZaehlerD = 0;
        int iZaehler = 0;
    
        StartSchlange(iSchlangeX, iSchlangeY, &iGroeßeSchlange);
        while(1){
            iZaehler++;
    
            switch(dir){
            case 0:
                iKopfX--;
            break;
            case 1:
                iKopfX++;
            break;
            case 2:
                iKopfY--;
            break;
            case 3:
                iKopfY++;
            break;
            }
            iSchlangeX[iGroeßeSchlange-iZaehler]=iKopfX;
            iSchlangeY[iGroeßeSchlange-iZaehler]=iKopfY;
    
            if(iZaehler==iGroeßeSchlange)
                    iZaehler=0;
    
            if(iZaehlerD++>21){
                if(iZaehlerD>27)
                    iZaehlerD=0;
                dir = 1;
            }else if(iZaehlerD++>14)
                dir = 2;
            else if(iZaehlerD++>7)
                dir = 0;
            else
                dir = 3;
    
            Sleep(500);
            clrscr();
            ZeichneSchlange(iSchlangeX, iSchlangeY, iGroeßeSchlange, iKopfX, iKopfY);
            }
    }
    

    aber schlimmer gehts immer;)


Anmelden zum Antworten