2011-10-24 30 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布局的一些未使用空间(即只居中字段并保留一些可变宽度边界)。