2011-10-24 31 views
4

作爲編程自我教育的一部分,我決定在C#中製作蛇。我遇到的問題是關於遊戲表單的客戶端大小。C#中的蛇 - 玩家可以縮放窗口 - 將手動縮放的窗口分成相同的方塊

我希望玩家能夠縮放遊戲的窗口,窗口分爲25 x 25個網格(每個座標就像「一個像素」) - 這意味着,在任何時候,窗口都被分成25 x 25個相同的正方形。

我得到的問題是接近這個代碼:

int SquareSide = (ClientSize.Width/25); 

當我設置ClientSize嚴格例如600 X 600,這是25的倍數,一切都OK。但是當我沒有(例如通過手動調整大小,例如可以將大小改變爲711 x 711)時,它會在右側創建一個「條」,這似乎是像素的其餘部分,它可以不會被使用,因爲我們被分成整數。

我的問題是 - 是否有任何非常困難的方式來實現將任何客戶端大小的表格分成25 x 25格沒有這個問題?我嘗試使用double,但FillRectangle方法不接受它。

我希望我的問題可以理解,謝謝你的回覆。

回答

3

要告訴你實話,有

g.FillRectangle(Brush b, RectangleF rect) 

RectangleF是一個矩形,其座標是浮動。
所以,你可以使用:

float SquareSide = (ClientSize.Width * 1f/25); 
+0

這更明確IMO:'float SquareSide =(ClientSize.Width/25f);' – scottm

+0

@Marco哦,是的,謝謝!這就是我會這樣做的方式。 –

+0

@scottm:是的,也許你是對的。無論如何,我們正在談論語法糖;) – Marco

2

我會盡量簡單處理窗口的onResize受到事件,目前用戶完成rezise它,迫使該程序需要對電網的完美契合的大小。 因此,舉例來說,在用戶釋放鼠標的時刻,你會發現窗口711x711的一個尺寸,使其最接近700x700。

通過這種方式,您可以保證在不同的顯示器分辨率下獲得良好的用戶體驗,並且保證了您繪製的網格的正確配合。

希望這會有所幫助。

0

切換到浮動座標的一切。當線條沒有完整的像素座標時,確保你的遊戲看起來不錯。確保你「找到下一個單元格」的代碼也可以和浮點數一起使用,包括鼠標位置檢測,如果需要的話。

另一種方法是對整數座標(和相同大小的單元格)感到滿意,並且使頁面佈局靈活以適應奇數711x711佈局的一些未使用空間(即只居中字段並保留一些可變寬度邊界)。