如何使用Filewriter和Append参数来修复数字的无休止写入错误



我遇到了一个我正在努力解决的问题。想象一下,简单的游戏,其中一些对象称其为汽车,在X轴上保持一动不动(x = 50),并且只能在y轴上移动(上下)。同时,在随机点以外(并向我的第一个对象移动),将创建另一个对象,因此它们的坐标在X轴上减小。一旦每个对象达到我的第一个对象坐标,某些变量 int分数; 递增。

int scores;
if(cars.getX() == getCarPos_X() && cars.getY() != getCarPos_Y() )
   scores++;

基本上,这款游戏看起来像是在其他汽车和避免击中的汽车,并且每次我的汽车通过下一个移动汽车时,计数

那是什么问题?我使用计时器,这些计时器在重新粉刷之间计算时间。所有对象都传递到实际上所有图形绘制的油漆component。在ActionPerform的情况下,我调用所有动作的方法,一种方法可以检查与另一辆车发生碰撞的方法。如果发生碰撞,游戏停止和分数应写入一些TXT文件。问题是,尽管两个对象具有相同的坐标,但JVM将无数数字(得分)编写到文件中(我认为是因为坐标停止减小,并且每个计时器间隔都会检查碰撞,并且它==========================================是的,随着游戏的停止,对象仍然存在。)因此,我在TXT文件中的分数看起来像:

0
0
0
0

在一列中。或它显示我得到的任何分数。等等...


这是我使用的关键代码片段

public void actionPerformed(ActionEvent e)
{
  animate();
  checkTouch();
}
private void animate()
{
  //here code that creates obstacles and moves them
}
 checkTouch()
{
  //objects creating in some inner class Cars and add to ArrayList ( I don’t mention about it as it is beside the point )
  for(Cars car : cars)
   {
     if((cars.getX() == getCarPos_X && cars. getY() == getCarPos_Y())
     {
       //boolean var which stops game
       inGame = false;
       writeScore();
     }
   }
}
 public void writeScore()
{
  File scoresTxt = new File("scores.txt");
  FileWriter fw = null;
  BufferedWriter bw = null;
  try
   {
     fw = new FileWriter(scoresTxt, true);
     bw = new BufferedWriter(fw);
     bw.write(scores + "n");
   }catch (IOException e)
    {
     e.printStackTrace();
    }finally
    {
     try
      {
        bw.flush();
        bw.close();
        fw.close();
      }catch(IOException e)
       {
         e.printStackTrace();
       }
    }
}
public void paintComponent (Graphics g)
{
 if(inGame)
 {
 g.drawImage(myCar, 50, 100, this);
 for(Cars car : cars)
 {
   g.drawImage(obstacleCar, car.getX(), car.getY(), this);
 }
  }
}

如果您需要我使用的一些额外代码,请写评论,然后添加。,我再次需要修复编写无数列数的错误,而不是从碰撞时刻开始的最终分数。我的代码有什么问题,以及如何解决此问题?作为初学者,请给我建议最简单的决定。预先感谢!

如果您的计时器是这样启动的,或类似的东西,当Ingame变量变为false时,您可以将其取消。关于计时器的好文章。

TimerTask task = new TimerTask() {
    public void run() {
        if (!inGame)
            cancel();
        else
            // whatever it is that you are doing now
    }
};

您可能还想以类似的方式停止在ActionPerformed(E)方法中处理事件。

if (!inGame) 
    return;

相关内容

  • 没有找到相关文章

最新更新