개인 프로젝트 - 스파르타 던전게임

김치헌·2024년 1월 5일
0

TIL

목록 보기
10/38

게임 구상 단계

과제의 필수 요구사항

  1. 게임시작화면 구성
  2. 상태보기창 구성
  3. 인벤토리창 구성 (아이템 장착 시 [E]표시)
    3-1 장착관리
  4. 상점 (보유골드, 아이템정보, 가격 표시, 이미 구매완료한 아이템 구매완료 표시)
    4-1 아이템 구매 (이미구매...입니다/ 구매를 완료/ 골드가 부족 /잘못된 입력 표시)

과제의 선택 요구사항

  1. 아이템 정보를 클래스/구조체로 활용해보기
  2. 아이템 정보를 배열로 관리하기
  3. 아이템 추가하기 - 나만의 새로운 아이템을 추가해보기
  4. 판매하기 기능 추가(구매가격 85%, 장착아이템은 해제)
  5. 장착 개선 (타입별로 하나의 아이템만 장착, 기존 방어구가 있다면 해제하고 장착)
  6. 던전 입장 기능 추가
  7. 휴식기능 추가
  8. 레벨업 기능 추가
  9. 게임 저장하기 추가

게임 구상

  1. 유니티에서 화면에 나타나는 장면마다 씬을 구성했었기 때문에 Class Scene를 만들고
    내부에 MainScene(), InventoryScence(), ShopScene() 등등을 만들어야겠다.
  2. 플레이어, 아이템, 상점 Class를 생성하여 각 데이터를 해당 Class에 저장한다.
  3. Scene>Shop>Plaer 로 구성하여 화면에 표시되는 Scene클래스에서는 Shop, Play에 정의된 함수에 접근이 가능하게 한다.

    ※ 해설영상에서는 Scene Class를 만들지 않고 메인함수에서 처리하였다.
  4. 과제에 제시된 내용과 같이 화면을 구성하고 While문과 if문으로 제시된 입력 외 다른 입력이 들어오는 경우 잘못된 입력입니다.를 출력되게 한다.
  5. Player 클래스의 변수들을 이용해 상태표시 <문제점. Player 클래스의 변수를 어떻게 가져오나?>
  6. Shop클래스에서 List를 이용하여 items를 만든다. displayItem 매서드를 만든다.
  7. 상점에서 물품을 구매하는 경우 items를 Player클래스의 playerItems에 해당 물품을 추가하고 isBuy를 true로 설정해준다.
  8. displayPlayerItem 매서드를 만들고 if문을 사용하여 isEquip이 true인 경우 [E]가 표시되게 한다. 장착 시 isWeapon 이 true인 경우 공격력를 더하고 false인경우 방어력을 더해준다.
  9. 나만의 아이템 추가는 Item클래스 생성자를 통해 쉽게 추가 가능.
  10. 판매하기 및 장착개선은 처음에는 쉽게 playerItems에서 선택된 장비를 판매하고 remove하면 될것이라고 생각했는데 isBuy를 false로 바꾸주는 부분에서 Index가 달라서 해결 방법을 찾아야 했다.
  11. 던전 입장 기능과 휴식기능은 과제에 표신된 내용 참조하여 쉽게 구현 가능.
  12. Player클래스의 Exp변수를 던전 클리어시 Exp++하여 Lv와 Exp가 같아지는 경우 Lv++하고 Exp는 0으로 만들어주는 매서드 추가.
  13. 게임 저장은 배운내용이 없어 검색을 통해 Json을 이용하기로 함.

문제점 및 해결방법

  1. 인터넷 강의 한번보고 만들다 보니 아직 기본지식이 부족하여 데이터가 이동하는 전체적인 흐름이 떠오르지 않음. 개인 프로젝트 제출을 목표로 일단은 만들어보자!!라는 생각으로 진행하였음.
  2. Class 내부에 생성된 매서드를 다른 Class에서도 Class이름.매서드 를 통해 사용이 가능할 줄 알았는데 사용이 안됨..(개인 프로젝트 제출 후 찾아보니 static으로 선언해야 사용가능)
  3. 결국 다른 Scene Class에 Player를 생성하고 Shop Class에서도 Player를 생성함 이렇게 작성하고 보니 두 객체가 다른 객체라서 데이터가 연동이 되지 않았음.
  4. 강의에 나와있는 다른 코드를 참고하여 메인 함수에서 Player를 생성하고 Scene과 Shop의 생성자에서 Player를 전달받는 형식으로 코드를 작성함

  5. Item을 판매하고 isBuy를 false로 만들기 위해 Items List에서 foreach문을 사용하여 item.Name이 playerItems.[selectNum-1].Name과 같은 경우 item.isBuy를 false로 바꾸는 방법을 사용하였으나 playerItems에서 remove를 하면 Null값이 되기 때문에 foreach문 내부에 remove를 작성 할 수 없었고 foreach문이 끝난 후에 다시 작성하면 else문에 밀려서 가독성이 떨어짐.
  6. for문을 playerItems.Count보다 작을때 까지 돌리고 items.Find(x=>x.Name==playerItems[selectNum-1].Name).isBuy=false 로 작성하여 해결
profile
초보개발자

0개의 댓글