在C ++中为游戏创建可点击网格的最简单方法是什么?

时间:2010-04-23 23:13:22

标签: c++ user-interface grid clickable clickable-image

我有一段时间没有使用C ++,所以我决定接受一个小项目再次熟悉它。我正在尝试制作一个中国跳棋游戏,但我没有使用C ++进行GUI设计的经验。是否有一种真正简单的方法来制作网格(即位图六边形或其他东西),当点击它时,会给我一个我点击过的索引编号? 如果有人有任何关于如何做到这一点的例子,即使只有2D网格方格,这也会有所帮助。 感谢任何帮助,谢谢!

5 个答案:

答案 0 :(得分:1)

取决于您为简单方式所采取的措施。

Qt可能是一种简单的方法,但需要时间来适应它(如果你不是这样)。

如果我是你,我会使用创建一个简单的winapi应用程序,为WM_CLICK消息编写处理程序并添加一个简单的网格渲染器。

答案 1 :(得分:0)

首先要确定您要为您的应用使用哪种API。 Qt的? SDL? Win32的? OpenGL的?我的建议是使用Qt及其QGraphicsView类(您可以从使用QGraphicsView的Qt示例应用程序开始,并根据您的喜好对其进行修改)。

答案 2 :(得分:0)

这取决于您的GUI工具包。但是,我认为这两种最可能的方式可能会有一些变化

  1. 存储每个正方形,空洞或任何您想要为游戏点击的内容的坐标,并让点击事件处理程序使用它获得的坐标来确定点击了哪个方格。

  2. 将每个方块都设为自己的小部件。这样,当它被点击时,它就是获得click事件的方块本身,它可以以一种漂亮的,面向对象的方式处理。然而,这对于中国跳棋游戏来说意味着很多小部件。

答案 3 :(得分:0)

通常,GUI takeit将允许您覆盖(例如通过虚函数)表示板的小部件的事件处理程序,因此您可以通过调用自己的一些函数来处理鼠标单击事件,如MouseClicked(int x ,int y),其中处理程序也会给你鼠标坐标x和y。

如果它是一个矩形网格,只需整数将坐标除以单元格宽度(以像素为单位)。

如果它是六角形细胞网格,那么将其解决将更加困难。我想你可以先定义一个标记六边形矩形中心的矩形网格,然后在边缘周围的四个三角形区域内添加更多检测。但是,游戏可能只适用于矩形单元格定义,只是忽略了三角形边缘。

答案 4 :(得分:0)

使用单行数学将鼠标坐标转换为游戏网格坐标很容易:

POINT grid_loc = POINT(click.x / grid.cell.width, click.y / grid.cell.height);

当然这是一个从零开始的游戏网格。