Plan.it 디자인 2 - 게임 세팅

처음에 구현한 내용은 플레이어가 계획을 짜 주어야 할 '고객'의 랜덤 생성이었다.

기획서에 자세한 내용이 적혀있지만, 간단히 설명하자면 

1. 플레이어는 랜덤하게 생성된 고객의 조건에 맞춰 최고의 계획을 짜야 한다.
2. 고객이 랜덤하게 가지는 정보는 예산, 나이, 최대 여행일수, 요구조건 이다.
3. 고객의 조건에 맞추지 못하면 점수에서 페널티를 받는다.

라는 명제가 있다.

여기서 요구조건은 여행에 있어 개인적으로 선호하거나 선호하지 않는 선택지를 말한다. 
선택지에는 도시, 도시간 이동수단, 도시 내 숙박, 이동, 유흥시설이 있는데, 고객마다 랜덤하게 생성된 요구조건이 이들 선택지 중에 좋아하는 것 또는 싫어하는 것을 명시해 주는 것이다.

이 스크린샷을 보면 개발 중인 예를 볼 수 있다.

왼쪽에는 고객의 기본 정보가 있고, 오른쪽에는 랜덤하게 생성된 요구조건들이 보인다.

요구조건은 '타입, 데이터, T/F'로 구성되어 있다. 타입은 교통수단인지, 유흥시설인지 등등을 정하는 조건의 타입이며, 데이터는 해당 타입에서 어떤 요구를 할지(ex : 교통수단이라면 버스, 택시, 지하철 중 어떤 것을 요구할지)를 정하며, 마지막으로 T/F는 해당 조건을 선호하는 조건으로 할지 선호하지 않는 조건으로 할지를 정한다.

한 예로, 스크린샷에 나와있는 entertainment stadium true 는 '유흥시설로 경기장에 가는 것을 선호함' 이며, 'transport bus false'는 도시 내에서 교통수단으로 버스를 이용하는 것을 싫어한다는 뜻이다.

소스코드는 다음과 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public void Gen()
    {
        string tmpName = Utils.RandomName();
        Name.text = "Name : " + tmpName;
        int tmpAge = Random.Range(1973);
        Age.text = "Age : " + tmpAge.ToString();
 
 
        int tmpTime = Mathf.RoundToInt(Random.Range(1080));
        Time.text = "Schedule : " + tmpTime.ToString() + "days";
        int tmpBudget = Mathf.FloorToInt((Random.Range(5001000* tmpAge / 10* tmpTime / 18/ 10 * 10;
        Budget.text = "Budget : " + tmpBudget.ToString() + "$";
        int tmpNature = Random.Range(05);
        Nature.text = tmpNature.ToString();
 
 
        CustomerInfo.Name = tmpName;
        CustomerInfo.Age = tmpAge;
        CustomerInfo.Budget = tmpBudget;
        CustomerInfo.Time = tmpTime;
        CustomerInfo.nature = tmpNature;
 
        ////////////////////////////////////////////////////////////
 
        int DemandIndex = Random.Range(06+ CustomerInfo.nature;  //랜덤한 요구사항의 갯수 생성, 캐릭터의 성향에 따라 갯수가 달라짐.
        test.text = DemandIndex.ToString();
        CustomerInfo.Demands = new List<Demand>();
        DemandText.text = "";
        for (int i = 0; i < DemandIndex; i++)
        {
            Demand currentDemand = GenerateDemand(Random.Range(15));
            if (currentDemand.type != null)
            {
                CustomerInfo.Demands.Add(currentDemand);
                int count = CustomerInfo.Demands.Count - 1;
                DemandText.text += CustomerInfo.Demands[count].type + " " + CustomerInfo.Demands[count].demand + " " + CustomerInfo.Demands[count].IsPositive + "\n";
            }
        }
    }
cs


여기서 GenerateDemand()는 따로 코드를 올리진 않겠지만(너무 난잡하다...) 파라미터로 넘겨주는 랜덤한 숫자 1~5에 따라 어떤 타입의 요구조건을 만들 것인지를 정하는 switch함수이다. 유의해야 했던 점은 랜덤하게 생성될 때 한 타입의 모든 선택지를 싫어하게 되는 상황 등의 예외처리였다. 

지금은 알파버전이라고도 할 수 없는, 개발 도중의 모습이라 하나도 예쁘지 않고 디버깅용 출력도 보인다. 그리고 주석을 좀 꼼꼼히 달아야 겠다는 생각도 든다...

댓글