Example #1
0
        private static async Task CreateToppings()
        {
            var logger = new NullLogger <ToppingData>();
            var data   = new ToppingData(logger);

            Console.Write("Adding toppings...");

            await data.AddAsync("cheese", "Cheese", 0.5m, 10000);

            await data.AddAsync("sauce", "Tomato Sauce", 0.5m, 10000);

            await data.AddAsync("pepperoni", "Pepperoni", 1m, 1000);

            await data.AddAsync("ham", "Ham", 1m, 1000);

            await data.AddAsync("mushroom", "Mushrooms", 0.75m, 1000);

            await data.AddAsync("pineapple", "Pineapple", 2m, 1000);

            await data.AddAsync("anchovies", "Anchovies", 1m, 1000);

            await data.AddAsync("peppers", "Peppers", 0.75m, 1000);

            await data.AddAsync("onion", "Onion", 0.75m, 1000);

            await data.AddAsync("olives", "Olives", 1m, 1000);

            await data.AddAsync("beef", "Beef", 1m, 1000);

            Console.WriteLine(" Done.");
        }
Example #2
0
 public void RemoveTopping(ToppingData topping)
 {
     if (!isFixed)
     {
         toppingList.Remove(topping);
     }
 }
Example #3
0
 public void AddTopping(ToppingData topping) //토핑을 추가합니다.
 {
     if (!isFixed)
     {
         toppingList.Add(topping);
     }
 }
Example #4
0
    public void SetAnswerTart(int tartCode) // 읽어온 csvData를 바탕으로 answerTart를 세팅합니다.
    {
        //임시로 쓰일 토핑 정보들
        int   nowVal = 0;
        int   nowCode;
        int   nowSize;
        int   nowNum;
        int   nowType;
        float nowScore;
        float nowPosX;
        float nowPosY;
        float nowPosZ;

        while (true)
        {
            if ((int)csvData[nowVal]["TOPPING_CODE"] == 25)
            {
                LogManager.Log("임시 타르트에 모든 토핑을 추가 완료 하였습니다.");
                break;
            }

            nowCode = (int)csvData[nowVal]["TOPPING_CODE"];
            nowSize = (int)csvData[nowVal]["TOPPING_SIZE"];
            nowNum  = (int)csvData[nowVal]["TOPPING_NUM"];
            nowType = (int)csvData[nowVal]["TOPPING_TYPE"];


            nowScore = (float)System.Convert.ToDouble(csvData[nowVal]["TOPPING_SCORE"]);
            nowPosX  = (float)System.Convert.ToDouble(csvData[nowVal]["TOPPING_POS_X"]);
            nowPosY  = (float)System.Convert.ToDouble(csvData[nowVal]["TOPPING_POS_Y"]);
            nowPosZ  = (float)System.Convert.ToDouble(csvData[nowVal]["TOPPING_POS_Z"]);
            //nowPosX = (float)csvData[nowVal]["TOPPING_POS_X"];
            //nowPosY = (float)csvData[nowVal]["TOPPING_POS_Y"];
            //nowPosZ = (float)csvData[nowVal]["TOPPING_POS_Z"];

            //Debug.Log("nowCode = " + nowCode + " | nowVal = " + nowVal);

            //Debug.Log("now어쩌고에 데이터 할당 완료. 임시 토핑에 세팅 시작!");
            ToppingData tempTopping = new ToppingData(); //임시로 쓰일 현재 토핑

            tempTopping.SetToppingInfo(nowCode, nowSize, nowNum, nowType, nowScore, nowPosX, nowPosY, nowPosZ);

            // Debug.Log("임시 토핑 세팅 완료. 임시 타르트에 임시 토핑 추가.");

            answerTart.AddTopping(tempTopping);
            answerTart.tartCode = tartCode;

            nowVal += 1;
        }
    }
    public float CheckScoreV2(Tart myTart)
    {
        Init();
        Tart answerTart = tartManager.answerTart; //정답 타르트를 가져왔다.

        if (answerTart == null)
        {
            LogManager.Log("앤서타르트 없음,");
        }
        else
        {
            for (int i = 0; i < answerTart.toppingList.Count; i++)
            {
                //1. 정답 타르트의 토핑 리스트에서 토핑 하나를 뽑아낸다.
                ToppingData answerTopping = answerTart.toppingList[i];
                log(i + "번째 정답 토핑을 채점을 시작합니다.");

                //2. 그리고 내 타르트에서 그것과 같은 사이즈, 넘버를 가진 녀석'들'을 뽑아낸다.
                //- 저번과 같이 그냥 배열에다가 인덱스를 저장하는 것으로 해도 될듯.
                int[] sameToppingIndex    = new int[24];
                int   sameToppingIndexVal = 0;


                for (int j = 0; j < myTart.toppingList.Count; j++)
                {
                    if (answerTopping.toppingSize == myTart.toppingList[j].toppingSize &&
                        answerTopping.toppingNum == myTart.toppingList[j].toppingNum)
                    {
                        if (myTart.toppingList[j].isCheck != true) //2-2.채점 완료한 녀석들은 같은 사이즈, 넘버를 가졌더라도 이 범위에서 제외한다.
                        {
                            sameToppingIndex[sameToppingIndexVal] = j;
                            log("내 타르트의 토핑 중 " + sameToppingIndex[sameToppingIndexVal] + "번째의 토핑인" + myTart.toppingList[j].thisObject.name + "과 비교하도록 합니다.");
                            sameToppingIndexVal += 1; //하나 추가하고.
                        }
                    }
                }

                log("현재 " + sameToppingIndexVal + "개의 토핑과 비교합니다.");
                //만약 같은 토핑이 발견되어지지 않았다면?
                //앞에서 다 찾았다는 뜻이기도 하니까, 위로 올려보낸다.
                if (sameToppingIndexVal == 0)
                {
                    log("비교할 토핑이 없습니다. 다음 정답 토핑 채점을 시작합니다.");
                    continue;
                }

                //이렇게 똑같은 녀석들을 뽑아왔다. 다음은...
                // 3. 정답 타르트의 한 토핑과, 내 타르트에서 뽑아낸 녀석들을 비교하여 가장 가까운 녀석을 찾아낸다.
                //'거리값이 가장 적은 녀석'을 찾아낸다.

                log("거리를 비교하여 가장 가까운 토핑을 찾아내겠습니다.");

                float minDis           = 25252;
                int   lastToppingIndex = 0; //마지막 최종 채점을 받을 토핑의 인덱스.
                for (int k = 0; k < sameToppingIndexVal; k++)
                {
                    float myPosX = myTart.toppingList[sameToppingIndex[k]].thisObject.transform.localPosition.x;
                    float myPosZ = myTart.toppingList[sameToppingIndex[k]].thisObject.transform.localPosition.z;

                    Vector2 tempMyPos = new Vector2(myPosX, myPosZ);
                    log("이 토핑의 위치는" + tempMyPos);
                    Vector2 tempAnswerPos = new Vector2(answerTopping.answerPosX, answerTopping.answerPosZ);
                    float   compareDis    = Vector2.Distance(tempAnswerPos, tempMyPos);
                    log("현재 가장 가까운 거리는 " + minDis + " 입니다.");
                    log(myTart.toppingList[sameToppingIndex[k]].thisObject.name + "의 거리는 " + compareDis + "입니다.");

                    if (minDis > compareDis)
                    {
                        log(myTart.toppingList[sameToppingIndex[k]].thisObject.name + "를 제일 가까운 토핑으로 등록합니다.");
                        minDis           = compareDis;
                        lastToppingIndex = sameToppingIndex[k];
                    }
                }
                log("가까운 토핑 등록이 끝났습니다. 가장 가까운 토핑은 " + myTart.toppingList[lastToppingIndex].thisObject.name + " 입니다.");
                //거리값이 작은 녀석을 찾았을 것이다. 그렇다면 이제
                // 4. 그 가장 가까운 녀석을 채점완료(isCheck)표시하고, 거리별 점수를 지급한다.
                myTart.toppingList[lastToppingIndex].Check(); //채점 완료 표시.
                if (minDis > lastCheckDis)                    //가장 작은 녀석이 채점 범위를 넘어섰을 때.
                {
                    log("정답 토핑에 비해 너무 멀리 있습니다. 0점을 지급합니다.");
                    myScore += 0; //0점 지급.
                }
                else //채점 범위 내에 있을 때.
                {
                    if (minDis <= allowDis) //이 정도는 만점으로 쳐주기.
                    {
                        float score = answerTopping.toppingScore;
                        log("거리가 매우 가깝기 때문에 만점을 지급합니다. : " + score);
                        myScore += (int)score;
                    }
                    else //아닐 때.
                    {
                        float temp  = minDis / lastCheckDis; //0~1의 값이 나온다.
                        float temp2 = answerTopping.toppingScore * temp;  //감점되어야 할 점수가 나온다.
                        float temp3 = answerTopping.toppingScore - temp2; //총 점수에서 감점한다.
                        log("거리가 애매하기 때문에 계산된 점수를 지급합니다." + temp3);
                        myScore += (int)temp3;                            //myScore에 추가.
                    }
                }
            }

            //마지막 감점 검사!
            for (int i = 0; i < myTart.toppingList.Count; i++)
            {
                if (myTart.toppingList[i].isCheck == false)
                {
                    log("상관없는 토핑이 있습니다. 감점합니다.");
                    switch (myTart.toppingList[i].toppingSize)
                    {
                    case 1:    //소형
                        myScore -= 1;
                        break;

                    case 2:
                        myScore -= 2;
                        break;

                    case 3:
                        myScore -= 4;
                        break;

                    default:
                        break;
                    }
                }
            }
        }

        if (myScore <= 0)
        {
            myScore = 0;
        }
        log("채점을 마쳤습니다. 총 점수는 " + myScore + "점 입니다.");
        return(myScore);
    }