2012-12-05 4 views
2

나는 뱀이 ArrayList of Points 내 자신의 스네이크 게임을 작성하고 내가 자기 먹는 확인하려면이 방법을 사용하십시오뱀자가 먹는 최적화

public void checkSelfEating() { 
    for (int i = 1; i < body.size(); i++) { 
     if (body.get(i).equals(body.get(0))) { 
      sgv.setGameOverState(true); 
      sgv.setMessage("Game over!"); 
      System.out.println("SelfEatingdetected"); 

     } 
    } 
} 

Video (Started at 35 s.)

VisualVM result

을하지만 그것을 너무 느리고 뱀은 게임이 끝날 때까지 약 5 번 움직입니다. 더 나은 해결책이 있습니까?

+0

신체의 종류는 무엇입니까? –

+0

그것이 얼마나 간단한지를 감안할 때 이것이 느리다는 것은 놀랍습니다. 뱀의 시체는 얼마나 걸립니까? – Dan

+0

@Dan 9-15 Points – JohnDow

답변

3

addremove 호출을 통해 HashSet에 본문 단위를 저장하십시오. O(1). 또한 LinkedHashSet을 사용하면 머리와 꼬리를 관리하기가 매우 쉽습니다 (의견 당).

이것은 올바른 데이터 구조이고 질문에 대한 답변이지만 모든 요소에 대해 for 루프를 수행해야하는 이유가 무엇인지 몰라서 프로그램이 너무 끔찍하게 느려지고 있습니다. 프로파일 링을 권장하고 실제 병목 지점을 찾는 것이 좋습니다. 해시 세트가이 스케일에서 더 빠를 지 확신 할 수 없기 때문입니다.

+2

HashSet으로 충분할 것 같아 .. – Jack

+0

고정. . . . . – djechlin

+0

+1, 그의'Point'가'hashCode()'와'equals()'를 구현할 필요가있다. – jlordo

관련 문제