【공모전】 : LEGO x Unity Micro Game

【프로젝트명】 : Blockfall

  • Waterfall(폭포)와 비슷한 어감

【게임】 : 하러가기

 

【목표】 : 최우수상

【결과】 : 진행중

 

【간단 설명】 : 연동되어 떨어지는 블록을 넘어 닭을 구출

【컨셉】

  • 고전 레고
  • 구출 스토리
  • 최대한 자극적, 폭력적, 경쟁적이지 않을 것
  • 난이도 하 ⇒ 난이도 중

【레퍼런스 게임】 : 없음

 

【현 상황:2020-11-16】 : 완료

youtu.be/IV6Fteb04gE

 

【리미트 설정】

  1. 레고 스크립트의 수정 없음
  2. 타 에셋 사용 없음

【구현 설계】

  1. 2차원 [2][2] 블록 맵 작성 : 완료
  2. [0][0]을 스타트 지점으로 [1][1]을 트로피 지점으로 작성 : 완료
  3. PlayerPrefs에 현재 스테이지를 저장, 트로피를 얻으면 승리 화면 : 완료
    1. 기존 튜토리얼 Scene을 수정해서 사용 : 완료
  4. 승리 화면에서 NextStage 버튼을 누르면 현재 스테이지 +1 상승 후 다시 Main 씬 로드 : 완료
  5. 현재 스테이지에 맞춰서 2차원 블록 맵이 확장 : 완료
  6. 밟으면 블록이 떨어져 제거
    1. 밟은 블록 확인 : 완료
    2. (테스트) 밟은 블록 색깔 변화 : 완료
    3. 새로이 색깔 변화 스크립트를 만들어서 블록에 붙임 : 완료
    4. 블록이 떨어져 제거 : 완료
  7. 2개의 블록 링크 및 링크된 블록 색깔 변화 : 완료
  8. :: [BUG] : 스테이지 재 로드 시 블록이 분해되어 작동 안함 : 해결 완료
    1. 블록 스크립트를 만들어서 Prefab에 저장? or Touch 블록을 사용해서 스크립트 실행이 되나 확인? : 실패
    2. Prefab에 LEGO Behaviour Block을 붙임 : 성공
      1. 해결 과정 : Behaviour Block이 붙어있는 것은 재 로드시 분해되지 않는 결과가 있었기에 그것을 활용
  9. 스타트 블록과 마지막 블록을 제외하고 모든 블록 링크 : 완료
  10. 링크 블록 같이 떨어져 제거 : 완료
  11. 최종 스코어 저장 : 완료
  12. 실패 시 PlayerPrefs 초기화 및 첫 스테이지부터 시작 : 완료
    1. :: [방향 수정] 하드코어 스테이지 작성, 하드코어 스테이지 이상일 시 다시 하드코어 스테이지 처음으로 초기화 : 완료
  13. 난이도 조절
    1. Enemy Low : 완료
    2. Enemy Mid : 완료
    3. Stage 7 이후 대각선 제거 : 완료
    4. Enemy High : 완료
      1. 닿으면 플레이어를 부수는 레고 캐릭터(하자드) : 완료
    5. BOSS, 거대 보스, 3개의 트로피도 모두 획득하라? : 완료
      1. :: [방향 수정] 보스만 존재 : 난이도 중하 : 완료
  14. 프로젝트 정리 및 코드 정리 : 완료
    1. In Game의 Touch the object를 Touch & Save the Chicken으로 변경 : 완료
    2. 한글화 : 완료
  15. <I want Elsa Lego!!!>가 들어간 Credit 만들기 : 스킵
  16. 승리 / 패배 씬 작성 : 완료
    1. :: [컨셉] 친구 닭들을 구하는 기사
  17. 레고를 사용한 심플 이펙트 설치 : 완료
  18. 4.11f로 다운그레이드 : 완료
  19. BGM  : 완료
  20. QA : 완료
  21. 빌드 및 제출 : 완료

 

【스크립트 구조】

Scripts.zip
0.03MB

 

 

Dictator(총괄)
: 사라지지 않음, 중복 불가
: 씬의 이동과 초기화를 관리

[Scene]_Ruler
: 씬의 지배자
: 기본적인 움직임과 시나리오, 각 치프들은 룰러가 지배함

[Scene]_GOCheif
: 씬의 UI를 제외한 것들의 움직임을 관리하는 팀장
: 다만 움직임을 설정만 해서 룰러에게 제공할 뿐, 실제로 움직이는 것은 룰러의 일

[Scene]_GOHolder
: 씬의 UI를 제외한 것들의 GameObject를 보관하고 있는 홀더

[Scene]_UIChief
: 씬의 UI의 움직임을 관리하는 팀장
: GOChief랑 거의 하는 일은 같음

[Scene]_UIHolder
: 씬의 UI GameObject를 보관하는 홀더

// [그 외 스크립트]
: 각 독립 오브젝트들의 움직임을 관리 : 룰러의 지배를 받지 않음 : 효용성과 구조에 대한 고찰 필요

【해당 프로젝트로 학습한 사항】

  • 스크립트 구조에 대한 설계
    • 움직이는 관리자(치프)와 갖고 있는 홀더를 나누고, 그 관리자를 지배하는 시나리오 메이커(룰러)와 모든 씬을 총괄하는 총괄(딕테이터)을 놓아 두는 구조
    • 장점 : 어디서 문제가 생기는 지, 코드를 다시 보았을 때 구조에 대한 이해가 빠름
    • 현재 개선점 : 독립적인 부분 등에 대한 관리가 필요
  • 작성한 스크립트가 아닌 타 스크립트와의 연계
블로그 이미지

RIsN

,

>> 캐릭터 Citizen을 사용해서 Lego 움직임과 비슷하게 하기

:: 우선 정리 필요

블로그 이미지

RIsN

,

세계는 균형이 잘 잡혀있어야 한다. 양과 음, 빛과 어둠 그리고 왼쪽 괄호와 오른쪽 괄호처럼 말이다.

정민이의 임무는 어떤 문자열이 주어졌을 때, 괄호들의 균형이 잘 맞춰져 있는지 판단하는 프로그램을 짜는 것이다.

문자열에 포함되는 괄호는 소괄호("()") 와 대괄호("[]")로 2종류이고, 문자열이 균형을 이루는 조건은 아래와 같다.

  • 모든 왼쪽 소괄호("(")는 오른쪽 소괄호(")")와만 짝을 이뤄야 한다.
  • 모든 왼쪽 대괄호("[")는 오른쪽 대괄호("]")와만 짝을 이뤄야 한다.
  • 모든 오른쪽 괄호들은 자신과 짝을 이룰 수 있는 왼쪽 괄호가 존재한다.
  • 모든 괄호들의 짝은 1:1 매칭만 가능하다. 즉, 괄호 하나가 둘 이상의 괄호와 짝지어지지 않는다.
  • 짝을 이루는 두 괄호가 있을 때, 그 사이에 있는 문자열도 균형이 잡혀야 한다.

정민이를 도와 문자열이 주어졌을 때 균형잡힌 문자열인지 아닌지를 판단해보자.

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다.

입력의 종료조건으로 맨 마지막에 점 하나(".")가 들어온다.

:: 성공

: 요점은 좀 더 줄이는 방법이 없을까?

: Dictionary?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Stack04
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "";
            while(true)
            {
                // :: Input
                input = Console.ReadLine();

                // :: End
                if (input == ".")
                    break;

                // :: Initialise
                Stack<String> bracketA = new Stack<String>();
                bool isError = false; // ::: Check Error

                // :: Check String
                foreach(var itm in input)
                {
                    // :: Input "(" or "[" in Stack
                    if(itm.ToString() == "(" || itm.ToString() == "[")
                    {
                        bracketA.Push(itm.ToString());
                    }
                    // :: Take "(" or "[" when ")" or "]"
                    else if(itm.ToString() == ")" || itm.ToString() == "]")
                    {
                        // :: Stack has something
                        if(bracketA.Count > 0)
                        {
                            // :: When Peek is "("
                            if(bracketA.Peek() == "(")
                            {
                                // :: Matched and Pop it
                                if (itm.ToString() == ")")
                                {
                                    bracketA.Pop();
                                }
                                // :: Not matched
                                else
                                {
                                    isError = true;
                                }
                            }
                            // :: When Peek is "["
                            else if (bracketA.Peek() == "[")
                            {
                                // :: Matched and Pop it
                                if(itm.ToString() == "]")
                                {
                                    bracketA.Pop();
                                }
                                // :: Not matched
                                else
                                {
                                    isError = true;
                                }
                            }
                        }
                        // :: Stack has nothing
                        else
                        {
                            isError = true;
                        }
                    }
                }

                // :: When isError or Stack has remains
                if (bracketA.Count > 0 || isError == true)
                {
                    Console.WriteLine("no");
                }
                // :: Success : Stack has nothing and isError = false
                else
                {
                    Console.WriteLine("yes");
                }
            }
        }
    }
}

'C#' 카테고리의 다른 글

백준 1874 : 스택 수열 // 실패  (0) 2020.11.05
백준 10828 : 스택 // 실패  (0) 2020.11.04
백준 9012 : 괄호 // 성공  (0) 2020.10.31
백준 10773 : 제로 // 성공  (0) 2020.10.30
Study : Quick Sort  (0) 2020.10.26
블로그 이미지

RIsN

,