0

我们刚开始学习 C++ 中的 windows 编程。我们必须制作一个屏幕上有 4 个骰子的程序,当用户按下“空格键”时,骰子滚动或骰子上的点数随机变化。我们的教授已经给了我们很多信息,所以我只是在寻找一些方向。

现在,我在屏幕上绘制了 4 个正方形,由 Rectangle() 函数制成。

Rectangle(hDC,30,100,130,200);
Rectangle(hDC,180,100,280,200);
Rectangle(hDC,330,100,430,200); 
Rectangle(hDC,480,100,580,200);  

我的问题是 1)我将如何在这些“正方形”而不是“屏幕”上绘制点。因此,如果我向上移动骰子,点会随着正方形移动,而不仅仅是停留在屏幕上。2.)当按下空格键(模拟它们已经滚动)时,我将如何让这些点随机变化?只是寻找一些方向,谢谢。

4

3 回答 3

1

1)
您仍然需要在屏幕上绘制它们,但您可以构建您的程序以将点实现为正方形的一部分。

void moveSquare()
{
    //change square position
    //change dots positions the same as you changed the square
}

2)
您可以使用WM_KEYDOWNWM_KEYUP消息或WM_CHAR消息捕获窗口中的按键。只需开始一连串更改按下空格时应该出现在骰子上的点数(SetTimer可能很方便),然后让我们WM_PAINT完成绘制点的工作(或调用一些东西来计算点的位置,然后让WM_PAINT循环通过它需要绘制的每个点。

void OnSpacePressed()
{
    //start changing dots every so often, handled elsewhere
    //maybe check if finished rolling before doing so
}

void calculateDotPositions()
{
    switch (numberOfDots) {...} //hint: use the square as a reference point
}

void OnPaint()
{ 
    //paint each sqaure
    //paint each dot in the correct position, which should be updated with square
}

void OnChangeDots()
{
    //change number of dots
    //also start a new change to happen later if not done rolling
}

要绘制点,请使用 Warren P 的参考链接。

于 2012-04-10T00:15:53.267 回答
1

另一种方法是在内存中创建位图或图片。一个用于模具的 6 个面中的每一个。这里的目标是将位图复制到屏幕上,而不是每次都重新绘制它们。研究“位图”和“bitblt”。

于 2012-04-10T00:17:01.763 回答
0

您应该创建一个在原点绘制骰子的例程,并按给定坐标偏移。我不熟悉您正在使用的特定库,所以我不知道 hDC 是什么,但它应该类似于以下内容。

void drawDie(HDC hDC, int xCoord, int yCoord, int dieValue)
{
    Rectangle(hDC, -50 + xCoord, -50 + yCoord, 50 + xCoord, 50 + yCoord);

    // draw some number of circles specified by dieValue at appropriate coordinates
    // translated by xCoord and yCoord arguments
}

然后,如果您希望它们更改,您可以在以前的骰子上重新绘制骰子。

于 2012-04-10T00:12:38.633 回答