Java에서 A * 알고리즘을 사용하여 Pacman 게임을하고 있습니다. 나는 많은 질문을 수색했다. 나는 한 걸음의 해결책을 찾았다. 하지만 블록 내에서 내 테이블을 새로 고치고 싶습니다. 내 솔루션은 마지막 단계 (결과 표시)에 따라 JTable을 새로 고치기 만합니다 (모든 단계를 계산). 하지만 나는 새로 고침을하면서 Pacman의 장소 (위치)를 단계별로 단계별로 보여주고 싶습니다. Pacmans가 움직이는 것처럼 보입니다. 그러나 나는 할 수 없었다. 내 코드는 다음과 같습니다 : 지연 그냥 아이디어 : 1Java에서 JTable을 단계적으로 새로 고침
btnStartGame.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
//randomly placement of Pacmans
table_1.setValueAt(yellowPacman, locationyellowX, locationyellowY);
...calculating heuristics
//after calculation
newXYellow =locationyellowX;
newYYellow =locationyellowY+1;
nodeYellow = 10 * newXYellow + newYYellow;
while(heuristics != zero){
...enemy pacmans' movement
//after enemy pacmans' movement calculating yellow pacman's movement
if((newXYellow>=0 && newXYellow<10 && newYYellow>=0 && newYYellow<10) && !wallList.contains(nodeYellow)){
//calculate heuristic again
manhattanDistance[0][0] = Math.abs(newXYellow-locationblackX[0])+
Math.abs(newYYellow-locationblackX[0]);
manhattanDistance[0][1] = Math.abs(newXYellow-locationblackX[1])+
Math.abs(newYYellow-locationblackX[1]);
manhattanDistance[0][2] = Math.abs(newXYellow-locationblackX[2])+
Math.abs(newYYellow-locationblackX[2]);
fyellow[0] = manhattanDistance[0][0] + manhattanDistance[0][1] + manhattanDistance[0][2];
selectedNodeXYellow = newXYellow;
selectedNodeYYellow = newYYellow;
timer2.start();//updated
while(delay != 0)
delay--;
delay = 4000;
locationyellowX = selectedNodeXYellow;
locationyellowY = selectedNodeYYellow;
nodeYellow = 10 * selectedNodeXYellow+ selectedNodeYYellow;
timer3.start();//updated
while(delay != 0)
delay--;
delay = 10000;
}//ending if
}//ending while
}
}//ending action
timer2 = new Timer(ONE_SECOND, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
table_1.setValueAt(null, locationyellowX, locationyellowY);//I wanted to delete old moves
timer2.stop();
}
});
timer3 = new Timer(ONE_SECOND, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
table_1.setValueAt(yellowIcon, locationyellowX, locationyellowY);//here I want to show each moves step by step in while block
timer3.stop();
}
});
UPDATE. 알고리즘이 너무 빨리 계산되어 타이머가 실행되지 않을 수 있습니다. 그러나 그것은 작동하지 않았고 또한 타이머가 각각 1 초에 해고된다고 생각하지 않습니까? 여전히 JTable의 마지막 값을 보았습니다.
빠른 응답 감사합니다. 나는 업데이트했다 : 그리고 해결책이 이런 방식이어야한다는 것을 이해했다. 하지만 어디서 실수를하는지 이해할 수 없었습니다. – melomg