0

C++でWindowsプログラミングを学び始めたところです。画面に4つのサイコロが表示されるプログラムを作成する必要があります。ユーザーが「スペースバー」を押すと、サイコロの目、またはサイコロのドット数がランダムに変化します。私たちの教授は私たちにたくさんの情報を与えてくれたので、私はある種の方向性を探しています。

現在、Rectangle()関数で作成された4つの正方形が画面に描画されています。

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_KEYUPWM_CHARSetTimerWM_PAINTWM_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

もう 1 つの方法は、メモリ内にビットマップまたは画像を作成することです。ダイスの 6 つの面のそれぞれに 1 つ。ここでの目的は、ビットマップを毎回再描画するのではなく、画面にコピーすることです。「bitmap」と「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 に答える