• 티스토리 홈
  • 프로필사진
    Song hyun
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Song hyun
  • 프로필사진
    Song hyun
    • 분류 전체보기 (780)
      • 백준 (0)
      • 영어 (2)
        • Diary (0)
        • Toast Masters (2)
      • 메모 (13)
      • 설치 메뉴얼 (30)
      • Java (178)
      • MySQL (60)
      • JSP (67)
      • Springboot (46)
      • HTML,CSS, JS (71)
        • HTML (8)
        • CSS (12)
        • JavaScript (37)
        • HTML&CSS 스터디 (13)
      • C++ (7)
      • Linux (7)
      • JPA (34)
      • Kotlin (2)
      • Flutter (42)
      • Error Note (39)
      • 디자인 패턴 (12)
      • 디지털논리회로 (4)
      • 데이터베이스 시스템 (8)
      • 알고리즘 (7)
      • 운영체제 (3)
      • 이산수학 (3)
      • 인공지능 (1)
      • 자료 구조 (14)
        • 기본 개념 (14)
        • 자료구조 스터디 (0)
      • 💡My project (76)
        • 팩맨 : Java Swing 게임 제작 프로젝트 (6)
        • 네이트톡 : Java 소켓 통신 프로젝트 (4)
        • 포켓옥션 : HikariCP&JDBC CRUD 프.. (3)
        • 이지 부산 : BDIA-Devton 2024 프로.. (20)
        • 그린 유니버시티 : JSP를 사용한 학사관리 프로.. (1)
        • 애드 포커 : 웹 소켓과 Spring을 사용한 카.. (1)
        • 셸위 : 게임 친구 매칭 사이트 (21)
        • 다모아 : 개발자 중개 플랫폼 (20)
      • 📗스터디 (13)
        • CNN : 웹개발 스터디 (10)
        • Node&React로 유튜브 사이트 만들기 (3)
      • 📙독서 및 강연 기록 (36)
        • 강연 (14)
        • 독서 (22)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 팀 프로젝트(1) <Java Swing을 활용한 멀티 쓰레딩 프로그래밍 프로젝트: 팩맨(PacMan) 게임 구현하기(2)>
        2024년 05월 08일
        • Song hyun
        • 작성자
        • 2024.05.08.:37
        728x90
        반응형

        팀 프로젝트(1) <Java Swing을 활용한 멀티 쓰레딩 프로그래밍 프로젝트:

        팩맨(PacMan) 게임 구현하기(2)>

         

        1. 마감 기한 및 대략적인 업무 정리하기

        2. 코드 뼈대 만들기 (인터페이스 및 구현해야 할 기능)

        3. 코딩 컨벤션 조율하기

        4. 오늘의 건의 사항

         

        *돌아보기(트러블 슈팅 기록)


         

        1. 마감 기한 및 대략적인 업무 정리하기

         두번째 날, 가장 먼저 정한 것은 마감 기한이었다. 제출해야할 결과물은 게임 시연 영상, git, PPT 파일이었기 때문에 마감 기한보다 며칠 정도 더 여유가 필요했다. 일주일 정도의 기간이 남았지만, 마감 일자보다 2,3일 정도 먼저 구현 후 영상 촬영을 하는 것을 목표로 정했다. 

         

         

        *프로젝트 기한 목표

        -마감일자 2,3일 전: 게임 구현 후 영상 촬영

        -마감일자 1일 전: 발표 자료 정리

        -마감일: gitHub 및 영상 제출

         

         

        오늘의 대략적인 업무는 각자 2명씩 짝지어 아래 사항들을 구현하는 것으로 결정되었다.

        (1) Player/Enemy 클래스의 기본적인 움직임 구현(방향키를 입력받아 움직이기)

        (2) 백그라운드 구현

         

        2. 코드 뼈대 만들기 (인터페이스 및 구현해야 할 기능)

        -자세한 사항들의 경우, 이후 변경사항이 생길수도 있었기에 대략적인 클래스 파일(Player/Enemy)과 백그라운드서비스 파일, 메인 프레임 파일, 그리고 Moveable 인터페이스 파일을 생성하는 것으로 결정했다. 이후에 변경사항이 생길 경우 함께 상의해서 만들기로!


        3. 코딩 컨벤션 조율하기

        -보다 알아보기 쉽고, 오류와 수정 번복을 줄이기 위해 객체/메서드의 이름과 사항들을 통일하기로 결정했다. 이 덕분에 git pull을 할 때, 이로 인한 오류가 거의 없었던 것 같다.


        4. Player(팩맨) / Enemy(고스트) 캐릭터 구현하기

        -오늘의 목표는

        (1) 맵 및 플레이어, 적 캐릭터 구현

        (2) 벽에 부딪힐 시 충돌 구현

        (3) 플레이어 및 에너미 캐릭터의 움직임 재현이었다. 

         

         

        짝꿍님과 함께 짝을 지어, 나는 PlayerBcakgroundService /  짝꿍님은 Player 클래스를 각자 설계했다. 

        팀장님의 바로 옆에 앉아있었기에, Player/PlayerBackgroundService 파일을 구현하며 문제가 생기면, 즉각 그 자리에서 상의해 해결할 수 있어 꽤 빠르게 코드가 구현되었다. 서로 상대방의 코드를 보며 에러를 찾아주는 등 활기찬 분위기 속에서 프로젝트를 시작할 수 있어, 내내 즐거웠다.

         

         



        *돌아보기(트러블 슈팅 기록) . . .

         

        간단한 움직임을 구현하는데도, 생각보다 많은 에러가 생겼다. 기억나는 문제들은 아래와 같다.

         

        (1) 플레이어 캐릭터가 제대로 움직이지 않음
        (2) 플레이어 캐릭터 움직임이 구현되지 않음
        (3) 쓰레드 충돌로 인한 플레이어 캐릭터 움직임(입 벌리고 닫기) 속도 빨라짐 문제

         

         

        (1) 플레이어 캐릭터가 제대로 움직이지 않음

        -원래라면 위의 영상처럼, KeyEventListener를 통해 키를 입력받으면, 캐릭터가 상하좌우로 움직이도록 구현되어야 했다. 하지만 처음 코드를 실행했을 때는, 왼쪽 키를 누르면 플레이어 캐릭터가 멈추지 않고 계속 왼쪽으로 이동하는 식이었다. 

        => 알고보니 KeyReleased에서 이동을 멈추게 하는 코드가 입력되지 않은 것이 이유였다. 생각보다 금방 해결된 문제였고, 조금 더 꼼꼼히 코드를 살펴야겠다고 느낀 부분이었다.

         

         

        (2) 플레이어 캐릭터 움직임이 구현되지 않음

        -흔히 볼 수 있는 팩맨 캐릭터처럼, 화면에서 내내 입을 벌리고 닫는 움직임을 구현하려고 했다. 

        New Thread를 생성해 서서히 입을 벌리는 것처럼 보이게, 5개의 이미지로 교체되는 스레드를 만들었다. 헌데 이미지가 바뀌기는 커녕 내내 입을 다문 모습인 것이다.

         짝꿍님이 구현하시던 Player 클래스에서 발견한 문제였는데, KeyEventListener에 스레드를 넣어보거나, Player 클래스 내의 다른 메서드에 넣어보거나 하는 등 여러 방법을 시도했지만 풀리지 않았다. 내가 천천히 다시 코드를 살펴보던 중 이 문제를 풀게 되었는데, Thread를 실행하게 하는 start()를 호출하지 않아서 발생한 문제였다(!!!)

         

        +처음에는 setIcon->Thread.sleep을 5번 반복하여 이미지를 반복하는 식으로 메서드를 생성하려고 했다. 내 제안으로 인해 ImageIcon[] 형식의 배열을 만들어, 해당 배열에 5개의 ImageIcon 파일을 넣고, for 문을 통해 보다 간단하게 이미지 교체 메서드를 만들게 되었다. 줄어든 코드를 보고 함께 뿌듯했던 기억이 난다.

         

         

        (3) 쓰레드 충돌로 인한 플레이어 캐릭터 움직임(입 벌리고 닫기) 속도 빨라짐 문제

        막상 플레이어 캐릭터의 이미지가 움직이자, 또 다른 문제가 생겼다. 왼쪽으로 이동할 때만 이미지가 급속하게 빨리 변경되는 것이었다. 짝꿍님과 함께 코드를 찬찬히 살펴보던 중, Left()메서드에 changeIcon() 메서드가 이미 호출되어 있는 것을 발견했다. 

         

        사용자 정의 생성자와 함께 동시에 실행되는 changeIcon()메서드. 그런데 Left()메서드를 호출하면 changeIcon() 메서드가 두 번 호출되어 쓰레드 중복 이슈가 생기는 것이었다. Left() 메서드 속의 changeIcon() 메서드를 삭제하자 원래 속도로 돌아온 것을 확인할 수 있었다.


         수업 시간 중에 해결했던 문제(ex: 쓰레드 중첩)도 있었지만, 직접 코드를 구현하며 문제를 해결하는 것은 또 색다른 문제였다. 다행인 것은 팀 프로젝트였기 때문에, 하나의 문제가 생기면 팀원들이 함께 문제를 해결했다. 그 과정에서 뿌듯함과 성취감을 함께 공유할 수 있어 즐거운 시간이었다. 

        728x90
        반응형

        '💡My project > 팩맨 : Java Swing 게임 제작 프로젝트' 카테고리의 다른 글

        팀 프로젝트(1) <Java Swing을 활용한 멀티 쓰레딩 프로그래밍 프로젝트: 팩맨(PacMan) 게임 구현하기(6)>  (0) 2024.05.21
        팀 프로젝트(1) <Java Swing을 활용한 멀티 쓰레딩 프로그래밍 프로젝트: 팩맨(PacMan) 게임 구현하기(5)>  (0) 2024.05.20
        팀 프로젝트(1) <Java Swing을 활용한 멀티 쓰레딩 프로그래밍 프로젝트: 팩맨(PacMan) 게임 구현하기(4)>  (0) 2024.05.10
        팀 프로젝트(1) <Java Swing을 활용한 멀티 쓰레딩 프로그래밍 프로젝트: 팩맨(PacMan) 게임 구현하기(3)>  (0) 2024.05.09
        팀 프로젝트(1) <Java Swing을 활용한 멀티 쓰레딩 프로그래밍 프로젝트: 팩맨(PacMan) 게임 구현하기(1)>  (0) 2024.05.08
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바