본문 바로가기

TIL

[TIL]2024-2-08 / 34일차 - 숙련 주차 팀 과제 시작

1. 오늘의 알고리즘 코드카타 - 삼총사

슬슬 문제가 서론이 길어지기 시작하니 벌써부터 싸하다

답안 :

//배열 자체에 이를 위한 기능은 없을까?
//3중 for문으로 배열에 0, 1, 2 번째 부터 확인하면서
//if 조건문으로 i+j+K == 0 이 되는 상황을 찾는 것으로 가능할까
using System;

public class Solution {
    public int solution(int[] number) {
        int answer = 0;
        
        for(int i = 0; i < number.Length; i++)
            for(int j = i + 1; j < number.Length; j++)
                for(int k = j + 1; k < number.Length; k++)
                    if((number[i] + number[j] + number[k]) == 0)
                        answer++;
        
        return answer;
    }
}

 

주석에 써둔 것처럼 하니 실제로 가능했다. for문안에 계속 무언가 조건문 등 추가적으로 넣는 것이 무언가 꺼려지지만, 이거 이상 간단하게 구현하는 방법은 생각나지 않았다. 지식의 한계이거나 문제 의도가 아닐까.

 


 

2. 대망의 팀플 시작

 

명절을 앞두고 바로 전날부터. 가시방석에 앉아서 쉬란 의미일까, 팀플의 발제가 시행됐다.

크아아아악

 

아무튼 주제는 타워 디펜스 / 2D 로그라이크 / 3D 퍼즐 플랫포머 / 3D 서바이벌 게임 이었다.

 

우리 조는 퍼즐 플랫포머는 노동이 많이 들어가며 3D는 그림이 취미인 사람과 픽셀 찍은 경험이 풍부한 사람이 있는 우리의 장점을 살리기 힘들기에 2D로 만들기로 정했다. 2D 서바이벌 게임이 가능할지 물어보려고 했으나 로그라이크에서 좋은 아이디어가 많이 나와서 로그라이크로 확실하게 방향이 정해졌다.

 

그렇게 준비된 기획은 생각보다 기발하고 재밌는 내용이 많이 나오게 되었고 그래서 여태 팀프로젝트 중에서 가장 기대되는 기획물이 나왔다.

 

재밌게도 저번 팀플처럼 이번에도 레퍼런스 게임은 '아이작의 번제' 이다.

재미난 컨셉이 나와 전투부분을 제외하면 다른 게임이긴 하지만,

하지만 저번에는 인원이 중도에 빠지게 되며 작업속도가 떨어지고 내가 랜덤맵 제작에 실패하면서 많이 먼 무언가가 되었기에 이번에는 실력자들이 많아 이전에 실력 부족으로 생각만 하고 구현을 못하던 기능들을 구현할 생각에 기대가 된다.

 

  • 프로젝트 명 : 두근두근 내배캠
  • 프로젝트 소개 : 악몽 속에서 12시간 캠프 일정을 소화하며 코드 조각을 모으고, 퇴실 버튼을 찾아 던전을 클리어 해 나가자!

 

 

기본적인 게임 흐름

 

 

기본 적으로는 플레이어는 에서 깨어나게 되며 방에서는 포인트 앤 클릭 어드밴처 처럼 사물들과 인터렉트 하게 된다.

이곳에서 플레이어는 침대를 눌러 잠을 자게 되면 악몽을 상징하는 던전으로 넘어가게 되어 아이작과 같은 방식으로 싸우게 되는 것.

이외에도 컴퓨터를 눌러 악몽에서 벌어 들인 재화로 아이템을 구매할 수 있으며 아이템을 구매하는 기능에서 재밌는 기획이 준비되어 있다.

 

이제는 쌈마이한 기획 그림을 그려주는 것이 전통이 아닐까

그렇게 던전으로 넘어가게 되면 랜덤으로 생성되는 던전에서 적을 해치우며 재화를 획득하고 탈출하는 것이 주요 목적으로 최종 일차가 되면 보스와 싸울 준비를 해야 한다.

 

 

작업의 편의성을 위해 이전에 만든 것처럼 칸반 보드를 만들어 사용하고 있다.

 

 

오늘은 각종 2가지 특강과 추가로 발제 세션이 있었기 때문에 절대적인 작업 시간이 부족하였다.

그래서 크게 작업은 못했고 내일 짬을 내서 작업을 하고자 한다.

 

플레이어 무브먼트와 공격기능을 우선 맡게 되어 있기에 플레이어 무브먼트를 내일 중에 끝내보려고 한다.

 

우선 기본적인 WASD무빙만 있으면 되기에 Input System에 Invoke Unity Event 속성을 이용해서 구현해 두었고

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    [Header("Movement")]
    public float moveSpeed;
    private Vector2 curMovementInput;

    private Rigidbody2D _rigidbody;

    public static PlayerController instance;

    private void Awake()
    {
        instance = this;
        _rigidbody = GetComponent<Rigidbody2D>();
    }

    private void FixedUpdate()
    {
        Move();
    }

    private void Move()
    {
        Vector3 dir = transform.up * curMovementInput + transform.right * curMovementInput;
        dir *= moveSpeed;

        _rigidbody.velocity = dir;
    }

    public void OnMoveInput(InputAction.CallbackContext context)
    {
        if (context.phase == InputActionPhase.Performed)
        {
            curMovementInput = context.ReadValue<Vector2>();
        }
        else if (context.phase == InputActionPhase.Canceled)
        {
            curMovementInput = Vector2.zero;
        }
    }
}

 

코드는 다음과 같다.

 

하지만 아이작의 번제를 보게 되면 플레이어의 머리가 몸과 따로 돌지 않던가?

이는 플레이어의 사격 방향으로 방향키를 지정하면 움직이는 기능이었지만

우리는 기획 과정에서 우선 플레이어의 이동 방향과 공격 방향을 고정하기로 결정하였다.

그래서 몸통과 머리의 스프라이트를 구분하여 플레이어가 가는 방향으로 시각적으로도 머리를 틀어주고 공격 방향으로 설정되도록 해주고자 한다.

 

이는 다음에 연휴에 하도록 하고 우선은 좀 쉬고자 한다.