0

タイトルが示すように、最終的にそろばんにカウンターを描画するときに、Java コードに問題があります。コードはコンパイルおよび実行されますが、カウンターは一番上の行ではなく最初の行から描画されます。これに加えて、カウンターは各列にスタックされません。1 つのカウンターが表示され、クリックされたボタンに応じて列を上下に移動しますが、これは正しいですが、左クリックするとカウンターが加算されるか、右クリックすると減算されます。

私はこれに数時間を費やしましたが、それはばかげたことだと確信していますが、私の脳は機能を停止しており、解決策は考えられません.

とにかく、ここに私のコードがあります。

AbacusPanel.java

public void paint(Graphics g)
{
    g.setColor(Color.gray);
    g.fillRect(0,0,getWidth(), getHeight());
    g.setColor(Color.black);

    Graphics2D g2 = (Graphics2D)g;
    // we'll use Graphics2D for it's "draw" method -
    // neater than the Graphics "drawRect" suppled
    // (which you could also use)

    for (int i = 0;i<numCols;i++)
    {
        for(int j = 0;j<numRows;j++)
        {
            g2.draw(getRect(i,j));
        }
    }

    for(int thisCol= 0; thisCol < numCols; thisCol++)
    {
        for(int thisRow = 0; thisRow < numRows; thisRow++)
        {
            for(int counters=0; counters<=myAbacus.getNumCounters(thisCol); counters++)
            {
                Rectangle r2 = getRect(thisCol,myAbacus.getNumCounters(thisCol));
                g2.setColor(Color.red);
                g2.fillOval(r2.x, r2.y, r2.width, r2.height);
            }
        }
    }

}

うまくいけば、誰かが私を正しい方向に向けることができます.これがあなたが望むようにフォーマットされていない場合は申し訳ありません. これは私の最初の質問投稿であり、目にやさしいように努めました。

4

1 に答える 1

1

私のコメントによると:

石のプレースホルダーを描画するときは、列と行を反復処理します。ただし、カウンターを描画するときは、行ではなく列のみを反復処理します。行もしないのはなぜですか?getNumCounters() の結果は、列と行の両方を入力として受け取るべきではありません。mancala ボードの位置ごとのカウンターの数を取得しようとしているからですよね?

getNumCounters()あなたの2番目の質問への答えとして、行と列の両方を入力として取らなければならないと私は信じなければなりません。マンカラ ボードには 2 つの行があり、石の数は列と、それが 1 番目または 2 番目の行にあるかどうかに依存するため、それ以外の場合は意味がありません。

また、第三に考えること。あなたの長方形では、カウンターを描いているときに、カウンターの位置を変える必要があるようです-各カウンターが互いに積み重ねられるように見えるので、20個のカウンターは見えません1 とは異なります。

于 2012-04-25T22:08:30.630 に答える