Wahrscheinlich ein total dummer Fehler: Wieso funktionieren die Forschleifen nicht?



  • Es geht darum das auf einer Karte per Mausklick ein Gebäude platziert werden soll, welches in diesem Fall 2x2 Felder groß ist, hier der Code:

    bool Editor::CheckBuildPlace(int position_x, int position_y, int buildinglength, int buildingwidth)
    {
    	int x = position_x/32; // Durch Tilegröße damit man ent. Tile erhält
    	int y = position_y/32;
    
    	int a = x+buildinglength-1; 
    	int b = y+buildingwidth -1;
    
    	for(y; y<=b; y++)
    	{
    		for(x; x<=a; x++)
    		{
                          // Prüfe forsche mache
    				return(0);
    		}
    	}
    
    	return(1);
    }
    

    In X Richtung überprüft er perfekt, aber er weigert sich in der y richtung weiter zu suchen. Sorry wenn es zu dürftig beschrieben ist aber ich bin gerade auf dem Sprung (und freue mich eure Antworten zu lesen wenn ich gleich daheim bin 😉 )



  • Du solltest x für die innere Schleife zurücksetzen.



  • for(y; y<=b; y++) 
    { 
        for(x=position_x/32; x<=a; x++) 
        { 
           // Prüfe forsche mache
        }
    }
    

    (zu spät, aber ich wiederhole gerne jemand)



  • besten dank 🙂



  • euch ist aber klar, dass das x bei

    for(x;foo;bar)

    nix macht, oder?



  • Ich hab gelernt sowieso immer folgendes zu schreiben:

    for(x=0;x<256;x++) cout << static_cast<char>(x);
    

    nur mal als Beispiel, oder noch besser, aber in deinem Fall halt nicht machbar(aber hier):

    for(unsigned char x=0;x<256;x++) cout << static_cast<char>(x);
    

    Also gleich mit Deklarieren.
    Aber das ist Geschmackssache.



  • @Nimda: mit deinem unsigned char veursachst Du aber eine herrliche Endlosschleife. Sowas macht man nicht!!! 😡



  • recht hast du.
    Also:

    cout << static_cast<char>(0);
    for(unsigned char x=1;x>0;x++) cout << static_cast<char>(x);
    

    Besser?
    Man kann die erste Zeile auch weglassen, wenn man die 0 nicht braucht.

    edit: Ohne solche Fehler macht das Programmieren doch nur halb so viel Spaß, was auch viel Spaß macht:

    while(x!=0);
    {
    //Hier wird jetzt x ermittelt.
    }
    


  • Nimda schrieb:

    Besser?

    *lol* nein

    statt c<256 mach doch einfach c<=255



  • Shade Of Mine schrieb:

    statt c<256 mach doch einfach c<=255

    Ich schrieb:

    for(unsigned char x=0;x<=255;x++) cout << static_cast<char>(x);

    g++ schrieb:

    comparison is always true due to limited range of data type

    mal davon abgesehen, dass unsigned char nicht char ist.


Anmelden zum Antworten