728x90
팩맨 먹이 범위
![]() x,y좌표를 랜덤으로 뽑는데 이거는 이미지가 작으니까 ![]() 빨간점 부분의 좌표를 생성한다. |
![]() 이미지 5개 생성 |
![]() 팩맨이 먹이 이미지를 지나치면 먹이가 없어져야 하기 때문에 동시 동작이 이뤄지는 쓰레드의 추상메소드인 run부분에 선언해야 한다. ![]() 저 가운데의 좌표가 먹이 이미지 좌표랑 같으면 먹이좌표를 -100으로 해서 안보이게 이동시키는거 |
경주
1. 창만들고
2. 출발버튼만들고
3. 판넬에 올리고
4. 말그림 클래스따로 만들어서 캔버스로 그리기
5. 메인클래스 판넬에 올리기
6. 라인그리고
7. 이동시키고
스레드 - join()
Timer 타이머 만들기
이런 모양에 시작을 누르면 100까지 올라가고
정지를 누르면 멈추고
다시 시작을 누르면 초기화해서 올라가는 타이머 만들기
1.일단 윈도우 창에 버튼까지 만들기
![]() |
![]() |
버튼은 아직 활성화를 안했다.
2. 버튼을 누르면 동작할 수 있게 ActionListener 추가하고 쓰레드 생성하기
![]() |
이제 Runnable을 implement하고 쓰레드를 추가해야 한다. |
![]() ![]() |
먼저 스레드를 실행하기 위해 추상클래스 Runnable을 implement하고 스레드(동작)을 작동할 위치에 스레드를 생성한다. 버튼을 클릭하면 스레드를 생성해 시간을 움직일 거기 때문에 액션리스너에 스레드를 생성했다. 그리고 오버라이드된 run메소드에 스레드가 넘어가서 동작할 기능을 구현한다. 타이머는1~100까지 할거니깐 for문을 만들고 숫자는 위에보면 label에 0으로 써놨는데 이게 int가 아니라 String타입이다. 그래서 문자열에 글자를 빼오는 setText()를 사용했다. for문으로 증가하는 i를 선언하고 setText(i)를 넣으면 i setText()에는 문자열이 들어가야하는데 i는 숫자니깐 '+""'를 해줘서 문자열로 변환시킨다. 그리고 너무 빠르니깐 슬립을 걸어서 동작을 늦춘다. |
![]() |
실행하고 시작을 누르면 이렇게 동작하는데 시작을 한번더 누르면 스레드가 또 시작되서 섞인다. 그리고 정지버튼도 안먹힌다. 정지버튼을 구현하고 중복도 막자. |
![]() |
boolean형태인 aa를 만들어 기준점을 만든다 T면 시작, F면 정지 if(!aa)break; 의 뜻은 aa가 T일때 !(부정)을 만나 F가 되어 if문을 만족하지 않아 실행안하고 넘어간다. aa가 F일때 !(부정)을 만나 T가 되어 if문을 만족해 break를 실행한다. 그니까 정지버튼을 눌러 F가 되면 if문을 만족해 break를 실행해서 멈춘다. 근데 이상태에서 정지를 눌러도 스레드는 죽지않고 살아있다. 그래서 정지부분에 t=null을 넣어서 스레드 t를 초기화해서 멈춰준다. 근데 아직도 시작을하고 또 시작을 누르면 스레드가 또 발생한다. 그냥 못누르게 막아버리자. |
![]() |
startBtn.setEnabled(true); stopBtn.setEnabled(false); 이 메소드가 버튼을 활성화하고 비활성화 시키는 메소드이다. 이걸 적절한 곳에 넣어준다. |
![]() |
그럼 완성 |
728x90
'JAVA' 카테고리의 다른 글
10/16 수업내용 (0) | 2020.10.16 |
---|---|
스레드 (0) | 2020.10.16 |
팩맨 움직이기1 (0) | 2020.10.14 |
10/14 수업 (0) | 2020.10.14 |
미완성[메소드]정렬 sort(), Comparable vs Comparator (0) | 2020.10.14 |