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."); }
public void RemoveTopping(ToppingData topping) { if (!isFixed) { toppingList.Remove(topping); } }
public void AddTopping(ToppingData topping) //토핑을 추가합니다. { if (!isFixed) { toppingList.Add(topping); } }
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); }