스크린샷

구현/개선한 사항

  • 아이템 바 UI 추가
    • 현재 선택된 아이템은 하이라이트 처리되도록
  • 플레이어캐릭터 3D 모델로 교체 및 애니메이션 적용
  • 기타 버그 수정
    • 애니메이션 재생 중 피격시 애니메이션 재생이 멈추는 현상 수정
  • 아이템 박스 추가
    • 플레이어 캐릭터가 가까이 갈 시 아이템 습득, 자체적으로 계속해서 회전

 

  • 진행중 : 캐릭터/Gun Enemy 3D 모델 애니메이션에 총기 모델 Binding하기

추후 개선 사항

  • 계속 진행 : 캐릭터/Gun Enemy 3D 모델 애니메이션에 총기 모델 Binding하기
  • Object Pooling 적용
    • ItemBox, Bullet, Enemy 등
  • Item Drop Table 구현
    • Enemy 사망시 확률 적용
  • 피격 파티클 이펙트 적용
  • 아이템 바 UI 수정
    • 현재는 미리 Sprite를 받아와 처리하는데, 스프라이트 정보를 별도 클래스에서 관리하고, 아이템 정보로부터 스프라이트명을 받아와서 참조할 수 있도록(Key-Value Table)

'게임개발 > ShootingDefence' 카테고리의 다른 글

[ShootingDefence] 개발 일지 - 2022.06.05  (0) 2022.06.05

스크린샷

구현/개선한 사항

적 캐릭터 개선

  • Mixamo에서 3D 모델 및 애니메이션을 다운받아 적용함

  • Coroutine 사용 방식 개선
//실제 코드는 아닌, 동작 방식을 설명하기 위한 간이 코드임
	private void ChangeCoroutine(IEnumerator nextCoroutine)
    {
        if (currentCoroutine != null)
            StopCoroutine(currentCoroutine);
        currentCoroutine = StartCoroutine(nextCoroutine);
    }
    
    Start()
    {
     StartCoroutine(CoroutineIDLE());
    }
    
    CoroutineIDLE()
    {
     //.....
    StartCorutine(CoroutineRun());
    }
    
    CoroutineRun()
    {
     //.....
     StartCorutine(CoroutineAttack());
    }
    ...
  • 근접 공격형 적 유형 추가
  • Enemy Spanwer 추가

커스텀 마우스 포인터 구현

  • 기존 마우스 포인터 대신, Texture2D 기반의 마우스 포인터로 교체
  • 마우스포인터를 이용하여 사격가능/재장전 중 상태를 구분할 수 있도록 함

 

기타 플레이 개선

  • 마우스를 캐릭터와 겹쳐서 댈 경우, 플레이어 캐릭터가 기울어지던 현상 수정
    IEnumerator CharacterMoveMent()
    {
        while(true)
        {
            float horizon = Input.GetAxis("Horizontal");
            float vertical = Input.GetAxis("Vertical");

            Vector3 Movement = new Vector3(horizon, 0.0f - transform.position.y, vertical) * pSpeed;

            charController.Move(Movement);

            // 마우스가 향하는 방향으로 캐릭터 회전
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit))
            {
                Vector3 targetPosition = new Vector3(hit.point.x, 1.0f, hit.point.z);

                Quaternion rotation = Quaternion.LookRotation(targetPosition - transform.position);

                transform.rotation = Quaternion.Lerp(transform.rotation, rotation, Time.deltaTime * 10.0f);
                //Fix : X축 회전을 고정하여 마우스포인터가 캐릭터와 근접할시 캐릭터가 상하로 기울어지는 현상 해결
                Vector3 euler = transform.rotation.eulerAngles;
                euler.x = 0;
                transform.rotation = Quaternion.Euler(euler);

            }
            yield return new WaitForSeconds(0.01f);
        }
    }

 

추후 구현/개선 사항

  • 무기 UI 수정 및 인벤토리 기능 구현
  • 아이템 엔티티 구현 / 아이템 습득 기능 구현
  • Player Character도 기존 임시 모델에서 3D 모델로 변경할 것

'게임개발 > ShootingDefence' 카테고리의 다른 글

[ShootingDefence] 개발 일지 - 2022.06.08  (0) 2022.06.09

문제

 

2467번: 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -

www.acmicpc.net

풀이 전략

  • 2중 for문을 사용할 경우에는 O(N^N)이 되게 되어 시간 초과에 걸리게 된다.
  • 입력값이 오름차순으로 입력되는것을 이용하여, 인덱스 두개를 사용하여 계산한다.
  • 양쪽 끝에 각 인덱스를 둔 다음, 두 용액의 합이 양수라면 오른쪽 인덱스를, 음수라면 왼쪽 인덱스를 한 칸 중앙으로 당긴다.
  • 해당 계산은 두 인덱스가 겹치거나, 두 용액의 합이 0이 될 경우 종료한다.
  • 0에 가장 가까운 용액합이 나왔을 경우 인덱스를 저장해뒀다가, 정답으로 출력한다.

EX)

-7 -4 3 6 9   -> -7 + 9 = 4 < 0 : 9를 6으로 옮긴다

-7 -4 3 6 9   -> -7 + 6 = -1 > 0 : -7를 -4으로 옮긴다

 

전체 소스 코드

더보기
//Backjoon Problem No.2467
//https://www.acmicpc.net/problem/2467

#include <iostream>

using namespace std;

int main()
{
	int N;
	int liquids[100000] = { 0, };
	int idxA, idxB;
	int minValue = 2000000001;
	int answerA, answerB;
	//입출력 속도 증가
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> N;

	for (int i = 0; i < N; i++)
		cin >> liquids[i];

	idxA = 0;
	idxB = N - 1;

	while (idxA != idxB)
	{
		int temp;
		temp = liquids[idxA] + liquids[idxB];
		if (temp > 0)
		{
			if (temp < minValue)
			{
				minValue = temp;
				answerA = liquids[idxA];
				answerB = liquids[idxB];
			}
			idxB--;
		}
		else if (temp < 0)
		{
			temp = temp * -1;
			if (temp < minValue)
			{
				minValue = temp;
				answerA = liquids[idxA];
				answerB = liquids[idxB];
			}
			idxA++;
		}
		else
		{
			minValue = 0;
			answerA = liquids[idxA];
			answerB = liquids[idxB];
			break;
		}
	}

	cout << answerA << " " << answerB;

	return 0;
}

 

'Problem Solving > Backjoon' 카테고리의 다른 글

[백준][C++]9465 - 스티커  (0) 2022.03.14
[백준][C++]1036 - 36진수  (0) 2022.03.08
[백준][C++]1562 - 계단 수  (0) 2022.03.08
[백준][C++]1043 - 거짓말  (0) 2022.03.03
[백준][C++]9663 - N-Queen  (0) 2022.03.02

골드3을 찍은 것 자체보다는, 꾸준히 문제를 풀고 있었다는게 더 마음에 든다.

어려운 문제도 더 풀어가면서, CLASS 5 따고 나면 플래티넘도 가시권에 보일 듯.

'잡담' 카테고리의 다른 글

프로그래머스 레벨 4 첫 시도, 절반은 했다.  (0) 2022.02.27
백준 골드 5 달성  (0) 2022.02.10

플레이 영상

 

구현/개선한 사항

스테이지 종료 목표 구현

  • 종료 조건(스코어, 특정블럭제거) 달성시 Game Clear 처리하도록 함
  • 기존의 종료 조건(블럭이동 횟수 사용) 달성 시에는 Game Over 화면으로

로딩 화면 추가

  • Coroutine을 사용하여, 현재 로딩 퍼센트를 화면에 표시

게임 플레이 개선

  • 가로줄 블럭 제거, 세로줄 블럭 제거, 폭탄 아이템 구현
    • 아이템은 이동/3-Match시 발동함
    • 아이템으로 블록 제거시 이펙트 추가
  • 블록의 떨어짐을 개선
    • 기존에는 1블럭을 떨어질때나, 3블럭을 떨어질때나 같은 속도
      • 많은 블럭을 떨어질 경우, 그만큼 빠르게 떨어지도록 수정
    • 블럭이 1단계 떨어진 후, 잠깐 멈췄다가 다시 떨어지는 현상을 수정
      • 부드럽게 한번에 떨어지도록.

최적화 및 개선

  •   메인 루프를 Update -> Coroutine상에서 동작하도록 수정

 

앞으로 구현할 사항

  • 스테이지 정보 저장/불러오기(JSON)
  • Map editor
  •  

앞으로 개선할 사항

이제 새 포트폴리오를 만들면서, 남는 시간에 진행할 것

github 링크

https://github.com/mistsixteen/RestaurantCrush

https://youtu.be/3L4GHkTTcVQ

 

구현/개선한 사항

  • 새로운 종류의 노드 구현
    • 이동불가능 노드, 얼어있는 노드 추가
      • 얼어있는 노드의 경우, 주변 블럭의 매칭을 감지하여 원래 노드로 돌아가게끔 설계함.
  • 최적화
    • GameBoard에서 저장하던 Node의 정보들을 Node 클래스 안으로 내제화
    • 프로퍼티를 적용하여 노드 상태에 따라 다른 값을 얻을 수 있도록 수정
    private NodeType nodeType;

    public NodeType NodeType
    {
        get
        {
            if (isIced == true)
                return NodeType.None;
            else
                return nodeType;
        }
        set
        {
            nodeType = value;
        }
    }
  • 기타 개선 사항
    • UI 버튼의 작동조건을 OnMouseDown -> OnMouseUP으로 변경하여, 
    • 기타 버그 수정

 

앞으로 개선할 사항

  • 스테이지 종료 목표 구현(타겟 제거 / 스코어링)
  • 스테이지 정보 불러오기 기능 구현(JSON)
  • UI 개선
  • 최적화 
    • GameManager 클래스의 진행 방식 수정(FixedUpdate -> Coroutine)

GItHub 링크

https://github.com/mistsixteen/RestaurantCrush

 

GitHub - mistsixteen/RestaurantCrush: Unity 2D Puzzle Game project

Unity 2D Puzzle Game project. Contribute to mistsixteen/RestaurantCrush development by creating an account on GitHub.

github.com

 

 

 

구현/개선한 사항

  • 스테이지 정보를 별도 클래스로 분리.
  • 위의 스테이지정보 클래스를 로드하는 클래스 구현.
  • GM, 효과음 추가

 

앞으로 개선할 사항

  • 스테이지정보 로드를 json을 사용하도록 수정
  • 컨텐츠 추가
    • 다양한 블럭/스테이지 추가할 수 있도록
  • UI 개선
  • GameManager 클래스의 진행 방식 수정
    • State에 따른 switch문 -> Coroutine 사용

 

메모

  • 이것저것 동시에 할 게 많지만, 이쪽도 꾸준히 개선해나갈 것

컬렉션이란?

프로그래밍을 통하여 어플리케이션을 제작할 때, 대부분의 경우 특정 개체나, 값의 그룹을 만들고 관리하여야 할 필요가 있다. 개체의 그룹을 만들고 관리하는 방법에는 배열을 만들거나 컬렉션을 만드는 두 가지 방법이 있다.

C#의 기본 배열은 크기가 고정된 배열을 만들어 관리하는데 유리하지만, 크기를 변경하려면 새로운 배열을 재할당하여야 한다.

컬렉션은 개체 그룹에 대해 작업하는 보다 유연한 방법을 제공한다. 그룹의 크기를 동적으로 확장/축소할 수 있으며, 일부 그룹의 경우 컬렉션에 들어가는 개체에 키를 할당하여 개체를 신속하게 검색할 수 있다.

 

컬렉션의 종류

닷넷에서 사용하는 컬렉션들은 여러 네임스페이스에 분산되어 있다.

System.Collection.Generic

  • Dictionary<Tkey, TValue>
    • Tkey 값을 해시 함수로 해싱하여 해시테이블을 구현한 키/값 쌍의 컬렉션이다.
  • List<T>
    • 인덱스로 엑세스할 수 있는 개체 목록을 나타낸다.
    • 제공된 다양한 메서드를 사용하여 목록의 검색/정렬/수정을 진행할 수 있다.
  • Queue<T>
    • 선입선출 방식의 개체 컬렉션을 나타낸다.
  • Stack<T>
    • 후입선출 방식의 개체 컬렉션을 나타낸다.
  • SortedList<TKey,TValue>
    • IComparer<T> 구현을 기반으로 한, 키에 따라 정렬된 키/값 쌍의 컬렉션을 나타낸다.

 

System.Collections

System.Collections 네임스페이스의 클래스는 제네릭 타입이 아닌 Object 형식의 개체로 요소를 저장하기때문에,

가능하면, 해당 네임스페이스의 레거시 형식 대신 System.Collection.Generic의 제네릭 컬렉션을 사용하여야한다.

  • ArrayList : 필요에 따라 크기가 동적으로 증가하는 개체 배열
  • Hashtable : 키의 해시 코드에 따라 구성괸 키/값 쌍의 컬렉션
  • Queue : 선입선출 방식의 큐 컬렉션
  • Stack : 선입선출 방식의 스택 컬렉션

System.Collections.Concurrent

.Net Framework 4 이상 버전에서 사용가능한 System.Collections.Concurrent 네임스페이스의 컬렉션은. 멀티스레드 연산에서 안전하게 엑세스할 수 있는 컬렉션들을 제공한다.

  • BlockingCollection<T>
  • ConcurrentDictionary<TKey, TValue>
  • ConcurrentQueue<T>
  • ConcurrentStack<T>

등의 컬렉션이 있다.

같이 보기

https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/concepts/collections#BKMK_Concurrent

 

컬렉션(C#)

개체 그룹 작업에 사용되는 C#의 컬렉션에 대해 알아봅니다. 애플리케이션의 요구가 변경됨에 따라 컬렉션이 동적으로 확장되거나 축소될 수 있습니다.

docs.microsoft.com

 

+ Recent posts