0

正如标题所说,当最终在我的算盘上绘制计数器时,我的 Java 代码遇到了问题。代码编译并运行,但计数器是从第一行而不是第一行开始绘制的。最重要的是,计数器不会在每一列中堆叠,一个计数器会出现并在列上下移动,具体取决于单击哪个按钮是正确的,但计数器应该在我左键单击时添加或在我右键单击时减去。

我在这上面花了几个小时,我确信这很愚蠢,但我的大脑已经停止工作,我想不出任何解决方案。

无论如何,这是我的代码。

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() 的结果不应该同时将列和行作为输入,因为您试图获取曼卡拉板上每个位置的计数器数量,对吧?

在回答您的第二个问题时,我不得不相信必须getNumCounters()将行和列都作为输入。由于你在 mancala 板上有两行,并且石头的数量取决于列以及它是在第一行还是第二行,否则就没有意义了。

另外,要考虑的第三件事。在您的矩形中,当您绘制计数器时,似乎需要改变它们的位置 - 在我看来,您的每个计数器都会堆叠在一起,所以 20 个计数器看起来不会不同于1。

于 2012-04-25T22:08:30.630 回答