2016-03-15 77 views
0

我想用面板畫一條街道,但不行。我想要一個循環,但我無法完成它。牆和屋頂必須比左邊的房子小20%。C#繪圖房屋比左側房屋小20%

我的代碼:

private void button1_Click(object sender, EventArgs e) 
    { 
     for (int i = 0; i < 5; i++) 
     { 
      HuisTekenen(); 
     } 
    } 
    private void HuisTekenen() 
    { 
     gebouw(); 
     dak(); 
    } 
    private void gebouw() 
    { 
     Graphics paper; 
     paper = panel1.CreateGraphics(); 
     Pen pennetje = new Pen(Color.Green); 

     int b = 100; 
     int aantal = 0; 
     for (int i = 10; aantal <= 5; i += 120) 
     { 
      paper.DrawRectangle(pennetje, i, 100, b, 150); 
      aantal++; 
      i = i/100 * 80; 
      b = b/100 * 80; 
     } 
    } 
    private void dak() 
    { 
     Graphics paper; 
     paper = panel1.CreateGraphics(); 
     Pen pennetje = new Pen(Color.Red); 

     int b = 100; 
     int aantal = 0; 
     for (int i = 10; aantal <= 5; i+=120) 
     { 
      paper.DrawLine(pennetje, i, 10/100 * 80, i, b); 
      paper.DrawLine(pennetje, i, 10/100 * 80, i + 100, b); 
      aantal++; 
      i = i/100 * 80; 
      b = 100/100 * 80; 
     } 
    } 

我想要得到的結果是: The result i want to get

結果我得到: enter image description here

你能幫助我嗎?

謝謝!

+0

你現在得到了什麼結果? –

+1

添加了我現在擁有的屏幕截圖,我已經有了他們必須建造的房屋,只有更小的東西不會工作 – Arendax

+0

關於設計的副作用:我希望你調用方法'DrawHouse' 5次,傳遞它的參數(從循環「i」計算)。 'DrawHouse'既可以繪製完整的房屋,又可以調用'DrawWalls' +'DrawRoof',將它們的一部分傳遞給接收到的矩形(例如,頂部的矩形的上1/3)。 – Sinatr

回答

1

這裏有一個開始使用方塊的方法。你必須自己完成作業。

float size = 50; 
    float xpos = 0; 
    float ypos = 0; 
    for(int i=0;i<5;i++) //whatever you do, this must be what your loop looks like. anything else is going way off in the wrong direction 
    { 
     paper.DrawRectangle(pennetje, xpos, ypos, size, size); 
     xpos += size + 20; 
     size *= .8f; 
    } 
+0

感謝您的開始!我可以對此做很多事情,其中​​「size * = .8f;」代表什麼? – Arendax

+0

如果你不得不問一個0.8來自哪個項目,那麼你每次縮減20%的東西,那麼在編程或繪製圖形之前你還有其他問題需要解決。 – zeromus

+0

我的意思是在那裏的f,我知道它是20%... – Arendax

0

首先一句話:你for -statements是奇數,通常是三個部分將使用相同的變量。它可以這樣工作,但是這樣做肯定不推薦。

一種不同的問題將是這樣的說法:

i = i/100 * 80; 

隨着可變i被一個int,和/執行整數除法,第一部分i/100會產生因爲那是INT最接近實際/浮動結果的值。當然乘以80也不會做任何事情。

我建議你現在再試一次:-)

+0

你是對的我會盡力讓它變得更好。 – Arendax