正如标题所说,当我最终在我的算盘上绘制计数器时,我的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);
}
}
}
}
希望那里有人可以指出我正确的方向并抱歉,如果任何一个没有格式化你想要的方式。这是我的第一个问题帖子,我试图让它变得容易。
答案 0 :(得分:1)
根据我的评论:
当您绘制石头的占位符时,您将遍历列,然后遍历行。但是当绘制计数器时,您只迭代列而不是行。为什么不行呢?并且不应该getNumCounters()的结果同时采用列和&amp;作为输入行,因为你试图获得mancala板上每个位置的计数器数量,对吧?
在回答第二个问题时,我必须相信getNumCounters()
必须同时将行和列作为输入。由于你在mancala板上有两排,并且石头的数量取决于柱子以及它是在第一排还是第二排,否则它就没有意义了。
另外,要考虑的第三件事。在你的矩形中,当你绘制你的计数器时,它似乎需要改变它们的位置 - 在我看来你的每个计数器将叠加在一起,所以20个计数器看起来没有不同于1.