Я столкнулся с одной проблемой, которую я пытаюсь решить.Представьте себе простую игру, в которой какой-то объект, назовем его автомобилем, остается неподвижным по оси X (х = 50) и может двигаться только по оси Y (вверх и вниз).В то же время другие объекты создаются вне экрана в случайной точке (и движутся к моему первому объекту), поэтому их координаты уменьшаются по оси X.Как только каждый объект достигает координат моего первого объекта, некоторая переменная int Scores; увеличивается.
int scores;
if(cars.getX() == getCarPos_X() && cars.getY() != getCarPos_Y() )
scores++;
По сути, эта игра выглядит как машина, которая ездит между другими машинами и избегает столкновений, и противостоит баллов увеличивается каждый раз, когда моя машина проезжает мимо следующего движущегося автомобиля.
Так в чем же проблема? Я использую таймер, который считает время между перекрасками.Все объекты передаются в paintComponent, где фактически рисуется весь графический объект.В actionPerformed я вызываю методы для всех ходов и один метод, который проверяет, не произошло ли столкновение с другим автомобилем.В случае столкновения игра останавливается, и результаты должны быть записаны в некоторый текстовый файл.Проблема в том, что, хотя два объекта имеют одинаковые координаты, JVM записывает в файл бесконечное количество цифр ( баллов ) (я думаю, это потому, что координаты перестают уменьшаться и каждый интервал таймера проверяется на столкновение, и это == true, так как игра остановлена, и объект остается там, где они есть.) Таким образом, мои результаты в текстовом файле выглядят так:
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);
}
}
}
Если вам понадобится какой-то дополнительный код, который я использовал, напишите комментарий, и я добавлю его, И снова мне нужно исправить ошибку, которая записывает бесконечный столбец чисел вместо одного окончательного результата с момента столкновения. Что не так с моим кодом и как решить эту проблему?Дайте мне совет для самого простого решения, так как я начинающий.Заранее спасибо!