오랜만에 1레벨쪽을 보니까 4 문제가 추가되어 있어서 풀어보았습니다.

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

1. Map을 이용해 각 컬럼 명을 Key, 인덱스를 Value로 하여 매핑

2. 범위 기반 for문을 이용해 조건(ext 컬럼의 값이 val_ext보다 작은)에 맞는 데이터를 answer 벡터에 추가

3. sort_by 컬럼에 해당하는 인덱스의 값을 기준으로 answer 벡터를 오름차순으로 정렬

#include <string>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

map<string, int> m = {{"code", 0}, {"date", 1}, {"maximum", 2}, {"remain", 3}};

int idx;

bool cmp(const vector<int> &a, const vector<int> &b) {
    return a[idx] < b[idx];
}

vector<vector<int>> solution(vector<vector<int>> data, string ext, int val_ext, string sort_by) {
    vector<vector<int>> answer;
    
    for(auto d : data) {
        if(data[m[ext]] < val_ext)
            answer.push_back(d);
    }
    
    idx = m[sort_by];
    
    sort(answer.begin(), answer.end(), cmp);
    
    return answer;
}

이번에는 플레이어의 사격에 장탄수, 재장전, 사격 간 쿨타임을 넣어보았습니다.

 

 

 

화면 우측 하단에 위 사진처럼 생긴 탄 UI를 만들었습니다.

 

숫자로 표기되는건 좀 흔하기도 해서 최대 탄창 수에 따라 UI를 동적으로 생성하고

사격 후 몇 발이 남았는지를 가시적으로 알 수 있도록 하였습니다.

 

사격 시

 

 

재장전

 

 

탄창 최대치 증가

 

 

다음에는 적이 스폰되고 적들이 목표로하는 오브젝트를 향해 이동하는 기능을 만들어 보겠습니다.

 

빨리 끝내고 언리얼도 만져봐야하는데...

'과제 및 프로젝트 > Unity 2D 슈팅' 카테고리의 다른 글

Unity 2D 슈팅 - 06  (0) 2024.01.22
Unity 2D 슈팅 - 05  (0) 2024.01.12
Unity 2D 슈팅 - 04  (0) 2024.01.10
Unity 2D 슈팅 - 02  (2) 2023.12.27
Unity 2D 슈팅 - 01  (1) 2023.12.27

원래 저번주에 올라왔어야하는데... 

신정부터 독감 걸려가지고 새벽 내내 토하고 몸살 기운 있고 난리도 아니었네요...

이 포스트를 읽으시는 분들은 건강에 유의하시기 바랍니다...

 

 

지난 포스트의 마을

 

일단 지난 포스트에선 바닥을 깔고 대충 플레이어가 이동만 할 수 있도록 되어있었습니다.

 

이번엔 여기에 배경과 마을 구조물, 그리고 플레이어의 액션을 추가해보도록 할 것입니다.

 

 

 

뭔가 마을 느낌이 나도록 구조물을 추가하였습니다.

 

배경은 무료 에셋

 

 

배경도 추가해보았는데 이게 가만히 있으면 너무 심심하겠다 싶어서

배경을 계속해서 왼쪽으로 스크롤링 해주는 스크립트도 작성했습니다.

BackGroundScroller
좀 마을 느낌이 나나..?

 

이걸로 대충 마을이 완성이 되었습니다.

 

이제 플레이어의 행동을 추가해볼건데 구상해둔 행동들은 대기, 걷기, 달리기, 점프, 회피, 공격, 스킬의 총 7가지입니다.

 

애니메이터 창

 

위와 같이 해당 행동들 간의 전이를 설정해주었습니다.

 

시연 영상

 

 

 

 

이것으로 이번 포스트를 마치고 다음 포스트에서는 던전을 만들어보겠습니다.

'과제 및 프로젝트 > Unity 2D 로그라이크' 카테고리의 다른 글

Unity 2D 로그라이크 - 04  (1) 2024.01.09
Unity 2D 로그라이크 - 02  (1) 2023.12.27
Unity 2D 로그라이크 - 01  (0) 2023.12.27

일단 인게임 씬을 전 글의

이 그림처럼 빠르게 구성할 계획입니다.

 

 

 

빠르게 바닥과 플레이어를 만들고 대충 위 아래로 움직이게 해놓았습니다.

 

너무 대충이지 않냐 싶지만 이 전 로그라이크 프로젝트에서

스프라이트 찍다가 시간 다 간 경험이 있어 이번에는 틀부터 빠르게 만들 생각입니다.

 

 

 

히히 발싸

중심점(Pivot)을 기준으로 스프라이트가 정렬되게 만들어주고

플레이어를 기준으로 마우스 커서를 향해 총알도 쏘게 만들었습니다.

 

여러발씩 나가는거는 아직 총알 발사에 쿨타임을 안만들어서...

 

그리고 날아간 총알 오브젝트가 파괴되는 기능이 아직 없는 것이 쿨타임이 없는 것과 시너지를 일으켜

총알이 미친듯이 생성되어 쌓입니다. 

 

 

 

 

아무것도 못하는 허수아비에 가깝지만 적을 만들었습니다.

 

 

 

이제 틀은 대충 만들어졌으니 퀄리티도 조금씩 높여 가며 기능도 추가해 나갈 예정입니다.

 

다음에는 플레이어의 발사 기능에 장탄수하고 사격 간 쿨타임, 재장전을 추가해보도록 하겠습니다.

'과제 및 프로젝트 > Unity 2D 슈팅' 카테고리의 다른 글

Unity 2D 슈팅 - 06  (0) 2024.01.22
Unity 2D 슈팅 - 05  (0) 2024.01.12
Unity 2D 슈팅 - 04  (0) 2024.01.10
Unity 2D 슈팅 - 03  (1) 2024.01.08
Unity 2D 슈팅 - 01  (1) 2023.12.27

24년도 초에 짧은 기간 내에 모바일용으로 만들어볼 슈팅 게임 프로젝트를 계획하게 되었습니다.

 

구상 중인 게임 흐름은 게임 시작 후 중앙에 있는 오브젝트를 최대한 오랫동안 지켜내는 형태가 될 것 같습니다.

 

어...대충 이런 느낌?

 

이번 프로젝트의 최종 목표는 구글 플레이 스토어에 무료 게임으로 출시해보는 것을 목표로 하고 있습니다.

'과제 및 프로젝트 > Unity 2D 슈팅' 카테고리의 다른 글

Unity 2D 슈팅 - 06  (0) 2024.01.22
Unity 2D 슈팅 - 05  (0) 2024.01.12
Unity 2D 슈팅 - 04  (0) 2024.01.10
Unity 2D 슈팅 - 03  (1) 2024.01.08
Unity 2D 슈팅 - 02  (2) 2023.12.27

아래와 같은 타일셋을 만들어 마을의 틀을 구성하였습니다.

마을의 바닥 타일과 벽
마을 씬

 

 

그리고 플레이어 캐릭터를 만들고 간단한 움직임을 구현하였습니다.

Player_Idle, 작아서 잘 안보이지만 대충 이런 구조로 되어있다...

 

간단한 이동 구현

 

다음은 목표는 마을 구성 추가와 플레이어 기능 추가입니다. 

'과제 및 프로젝트 > Unity 2D 로그라이크' 카테고리의 다른 글

Unity 2D 로그라이크 - 04  (1) 2024.01.09
Unity 2D 로그라이크 - 03  (0) 2024.01.08
Unity 2D 로그라이크 - 01  (0) 2023.12.27

올해 초 캡스톤 디자인 수업에서 2D 로그라이크 RPG를 만들어보기로 하였습니다.

 

던그리드나 문라이터, 데드 셀 등의 로그라이크 게임들로부터 영감을 받았습니다.

던그리드와 데드셀

 

목표는 적어도 한 개의 던전을 완성하고 아래 그림처럼으로 게임이 진행되도록 할 예정입니다.

마을에서 던전으로 출발하며 클리어 또는 사망 시 마을로 귀환

 

또한 던전은 여러 형태의 방들의 집합이며 매 진입시마다 구조가 섞이도록 할 것입니다.

 

 

 

'과제 및 프로젝트 > Unity 2D 로그라이크' 카테고리의 다른 글

Unity 2D 로그라이크 - 04  (1) 2024.01.09
Unity 2D 로그라이크 - 03  (0) 2024.01.08
Unity 2D 로그라이크 - 02  (1) 2023.12.27

UDP는 데이터의 경계가 존재하는 프로토콜

→입력함수의 호출 횟수와 출력함수의 호출 횟수가 완벽히 일치해야 송신된 데이터 전부를 수신 가능

→데이터 수신에 딜레이를 주더라도 TCP와 달리 한 번에 하나씩 읽어들임

 

Connected UDP 소켓

  • UDP 소켓은 TCP와 달리 연결이 없음

데이터 전송(sendto)의 단계

  • UDP 소켓에 목적지의 IP와 PORT 번호 등록
  • 데이터 전송
  • UDP 소켓에 등록된 목적지 정보 삭제

 

위와 같이 목적지의 정보가 등록되어 있지 않은 소켓을 unconnected 소켓이라 함

→같은 목적지로 데이터를 3번 여러 번 보낼 때 목적지 정보의 등록과 삭제를 3번 반복하니 비효율적

→Connected 소켓으로 만들면 성능 향상을 기대할 수 있음

 

UDP에서 connect는 TCP와 같이 상대방과의 연결은 아니지만 소켓에 목적지 정보를 등록

→송수신의 대상이 정해졌기 때문에 sendto, recvfrom이 아닌 write, read를 통해 데이터 송수신 가능

UDP에서 서버와 클라이언트는 연결되어 있지 않음

  • UDP 서버, 클라이언트는 TCP와 같이 연결된 상태로 데이터를 송수신하지 않음
    →연결 설정 과정이 필요치 않음
  • 하나의 소켓으로 둘 이상의 호스트와 통신이 가능

 

UDP 기반의 데이터 입출력 함수

  • TCP와 달리 데이터를 전송할 때마다 목적지의 주소정보를 추가해야함

 

sendto

ssize_t sendto(int sock, void *buff, size_t nbytes, int flags,
			   struct sockaddr *to, socklen_t addrlen);
// 성공 시 전송된 바이트 수, 실패 시 -1 리턴
  • to: 목적지 주소정보를 담은 구조체 변수
  • addrlen: 매개변수 to로 전달된 주소 값의 구조체 변수 크기

 

recvfrom

ssize_t recvfrom(int sock, void *buff, size_t nbytes, int flags,
                 struct sockaddr *from, socklen_t *addrlen);
// 성공 시 수신한 바이트 수, 실패 시 -1 리턴
  • from: 발신지 주소정보를 담은 구조체 변수
  • addr: from으로 전달된 구조체 변수의 크기

 

UDP 소켓의 특성

  • 신뢰할 수 없는 전송방법
  • 신뢰성보다 속도가 중요할 시 사용
  • TCP보다 간결하며 상황에 따라 TCP보다 좋은 성능을 내기도 함
  • TCP의 신뢰성 있는 데이터 통신을 위한 흐름제어가 UDP에서는 존재하지 않음
    →확인 응답 과정 없음
    →연결 설정과 연결 해제 과정 같은 것이 업음

 

UDP의 내부 동작원리

  • UDP 패킷이 호스트B에서 A로 전달되도록 하는 것은 IP의 역할
  • 수신된 패킷을 PORT 정보를 참조하여 UDP 소켓에 전달하는 것은 UDP의 역할

 

UDP의 효율적 사용

  • 일부가 손실되어도 크게 문제가 생기지 않는 데이터의 전송
  • 송수신하는 데이터의 양은 적지만 잦은 연결이 필요한 경우
  • 멀티미디어 데이터, 게임에서의 방향키 입력 등

+ Recent posts