Fillrectangle Schachfeld nicht richtig dargestellt



  • Hallo liebes Forum :),
    da ich mittlerweile nicht weiter weiß, habe ich mich kurzerhand hier registriert.

    Ich muss in der Schule ein Schachprogramm programmieren. Das ganze soll in Windowsforms c++/cli geschehen. Nunja, beim Schachbrett selbst treten nun schon die ersten Probleme auf. Undzwar werden beim Zeichnen des Schachfelds mittels Fillrectangle die Felder nicht immer angezeigt. Wann die Felder angezeigt bzw. wann nicht angezeigt werden, hängt von der Fenstergröße ab. Um meine Problematik mal deutlicher zu machen: Hier gibts auch die compiled exe (Startsize ist auf 808x808 pixel eingestellt. Bei dieser Größe werden die Felder NICHT angezeigt):

    http://ul.to/rtood1

    Und noch ein bisschen Code-Schnippsel dabei:
    Die Methode getEdgelength aus der Basisklasse BaseChess:

    int BaseChess::getEdgelength()
    {
    	if (mWidth <= mHeight)
    	{
    		mEdgelength = mWidth/8;
    	}
    	else
    	{
    		mEdgelength = mHeight/8;
    	}
    	return mEdgelength;
    }
    

    Die Methode Draw aus der Klasse DrawBoard:

    void DrawBoard::Draw(System::Drawing::Graphics ^pGraphics)
    {
    	Pen^ BP = gcnew Pen(Color::Ivory, 1);
    	int edgelength;
    	edgelength = getEdgelength();
    
    	SolidBrush^ drawBrush = gcnew SolidBrush (Color::DarkCyan);
    	SolidBrush^ drawBrush2 = gcnew SolidBrush (SystemColors::ControlLight);
    
    		for(int r=0; r<edgelength*8; r += edgelength)
    		{
    			pGraphics->FillRectangle(drawBrush2, r, r, edgelength, edgelength);
    
    			for (int i=0; i<edgelength*8; i += edgelength)
    			{
    				if((r%2 == 0 && i%2 == 1)  || (r%2 == 1 && i%2 == 0))
    				{
    					pGraphics->FillRectangle(drawBrush, r, i, edgelength, edgelength);
    				}
    
    				else
    				{
    					pGraphics->FillRectangle(drawBrush2, r, i, edgelength, edgelength);
    				}
    
    			}
    		}
    }
    

    Und zu guter letzt die setSize:

    private: System::Void Form1_Resize(System::Object^  sender, System::EventArgs^  e) {
    				 d1.setSize(this->ClientSize.Width, this->ClientSize.Height);
    
    				Invalidate();
    			 }
    

    Ich freue mich auf Verbesserungs- und Lösungsvorschläge!

    Danke im vorraus,
    Hans.



  • Überleg mal, was bei i%2 bzw. r%2 rauskommt, wenn deine Kantenlänge gerade ist.



  • MFK schrieb:

    Überleg mal, was bei i%2 bzw. r%2 rauskommt, wenn deine Kantenlänge gerade ist.

    Das war schon des Rätsels Lösung. Danke vielmals 🙂


Log in to reply