¡¡Start ¥á¥½¥Ã¥É¤Ë»Ä¤Ã¤Æ¤¤¤ë TODO ¤Ë½èÍý¤ò¼ÂÁõ¤·¤Æ¤¤¤¤Þ¤¹¡£
GameData ¥¯¥é¥¹¤Ï¥·¥ó¥°¥ë¥È¥ó¥¯¥é¥¹¤Ç¤¹¤Î¤Ç¡¢ÊÑ¿ô¤òÍÑ°Õ¤·¤ÆÂåÆþ¤·¤Ê¤¯¤Æ¤â¡¢Ä¾Àܥ᥽¥Ã¥É¤Ø¤ÎÌ¿Î᤬²Äǽ¤Ç¤¹¡£
¡¡
¼«Ê¬¤Ç½èÍý¤ò¹Í¤¨¤Æ½ñ¤¹þ¤à¤È¤¤¤¦¤³¤È¤ÏÆñ¤·¤¯Ê£»¨¤Ç¤¹¡£¤½¤Î¤¿¤á¤Ë
TODO ¤òÍøÍѤ·¤Æ¡¢ÆüËܸì¤Çºî¤ê¤¿¤¤½èÍý¤ÎÌܰ¤òºî¤ë¤³¤È¤Ç¥¤¥á¡¼¥¸¤·¤ä¤¹¤¯¤·¤Æ¤¤¤Þ¤¹¡£
¤³¤ì¤Ï¶µºà¤À¤«¤é TODO ¤òÍÑ°Õ¤·¤Æ¤¤¤ëÌõ¤Ç¤Ï¤Ê¤¯¡¢½èÍý¤ò¼ÂºÝ¤ËÁȤßΩ¤Æ¤Æ¤¤¤¯ºÝ¤ËÍøÍѤ¹¤ë¼êË¡¤Î£±¤Ä¤Ç¤¹¡£
¡¡GameData ¥¯¥é¥¹¤Ë¿·¤·¤¯ÍÑ°Õ¤·¤¿¥á¥½¥Ã¥É¤ò¤É¤Î¤è¤¦¤Ê½çÈÖ¤äʬ´ôÀ©¸æ¤ò¹Ô¤¨¤Ð¡¢¥í¡¼¥É¤ò¤·¤Æ¡¢°ÊÁ°¤Î¥²¡¼¥à¤Î¾õÂ֤Ȥ·¤ÆÉü¸µ¤·¤ÆºÆ³«¤Ç¤¤ë¤Î¤«¡¢¤½¤Î¥í¥¸¥Ã¥¯¤ò¹Í¤¨¤Æ½ñ¤¤¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
¤½¤ì¤«¤é¶µºà¤ò³Îǧ¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
GameManager.cs
¡¡<=¡¡¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤¤Þ¤¹
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using System;
using System.Linq;
public class GameManager : MonoBehaviour
{
[SerializeField]
private List<TapPointDetail> tapPointDetailsList = new List<TapPointDetail>(); // ¥²¡¼¥àÆâ¤Ë¤¢¤ë¹ÔÀè¤ò«¤Í¤Æ´ÉÍý¤¹¤ë¤¿¤á¤ÎÊÑ¿ô
[SerializeField]
private Transform canvasTran;¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡// ¹Ô¤Àè³ÎǧÍѥݥåץ¢¥Ã¥×¤Ê¤É¤ÎÀ¸À®°ÌÃ֤λØÄê¤ÎÊÑ¿ô¡£TapPointDetail ¥¯¥é¥¹¤è¤ê°Ü´É
[SerializeField]
private JobsConfirmPopUp jobsConfirmPopUpPrefab; // ¹Ô¤Àè³Îǧ¥Ý¥Ã¥×¥¢¥Ã¥×¤Î¥×¥ì¥Õ¥¡¥Ö¤ò¥¢¥µ¥¤¥ó¤¹¤ëÊÑ¿ô¡£TapPointDetail ¥¯¥é¥¹¤è¤ê°Ü´É
[SerializeField]
private CharaDetail charaDetailsPrefab; // ¤ª»È¤¤´°Î»»þ¤ËÀ¸À®¤¹¤ë¥¥ã¥é¤Î¥×¥ì¥Õ¥¡¥Ö¤ò¥¢¥µ¥¤¥ó¤¹¤ëÊÑ¿ô¡£TapPointDetail ¥¯¥é¥¹¤è¤ê°Ü´É
[SerializeField]
private List<CharaDetail> charaDetailsList = new List<CharaDetail>(); // ¤ª»È¤¤´°Î»¤Î¥¥ã¥é¤ò«¤Í¤Æ´ÉÍý¤¹¤ë¤¿¤á¤ÎÊÑ¿ô
[SerializeField]
private RewardPopUp rewardPopUpPrefab;¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ //¡¡Ë«¾Þɽ¼¨ÍѤΥݥåץ¢¥Ã¥×¤Î¥×¥ì¥Õ¥¡¥Ö¤ò¥¢¥µ¥¤¥ó¤¹¤ëÊÑ¿ô
[SerializeField]
private RewardDataSO rewardDataSO;¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ //¡¡RewardDataSO ¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ò¥¢¥µ¥¤¥ó¤·¤Æ»²¾È¤¹¤ë¤¿¤á¤ÎÊÑ¿ô
[SerializeField]
private JobTypeRewardRatesDataSO JobTypeRewardRatesDataSO;¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ //¡¡JobTypeRewardRatesDataSO ¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ò¥¢¥µ¥¤¥ó¤·¤Æ»²¾È¤¹¤ë¤¿¤á¤ÎÊÑ¿ô
void Start() {
////*¤³¤³¤«¤é TODO ¤ò¼ÂÁõ *////
¡¡¡¡¡¡¡¡// Ë«¾Þ¥Ç¡¼¥¿¤ÎºÇÂç¿ô¤ò GameData ¥¯¥é¥¹¤ËÅÐÏ¿¡¡¡¡¡¡¡¡¡¡¡¡//¡¡<=¡¡¡ù¡¡¤³¤Î½èÍý¤¬É¬ÍפÊÍýͳ¤ò¹Í¤¨¤Æ¤ß¤Æ¤¯¤À¤µ¤¤
GameData.instance.GetMaxRewardDataCount(rewardDataSO.rewardDatasList.Count);
// ³ÍÆÀ¤·¤Æ¤¤¤ëË«¾Þ¥Ç¡¼¥¿¤Î³Îǧ¤È¥í¡¼¥É
GameData.instance.LoadEarnedRewardData();
// ³ÍÆÀ¤·¤Æ¤¤¤ëË«¾Þ¥Ç¡¼¥¿¤¬¤¢¤ë¾ì¹ç
if (GameData.instance.GetEarnedRewardsListCount() > 0) {
// Ë«¾Þ¥Ý¥¤¥ó¥È¤ò¥í¡¼¥É
GameData.instance.LoadTotalRewardPoint();
}
////*¤³¤³¤Þ¤Ç *////
// ¤ª»È¤¤¤Î»þ´Ö¥Ç¡¼¥¿¤Î³Îǧ¤È¥í¡¼¥É
¡¡¡¡¡¡¡¡OfflineTimeManager.instance.GetWorkingJobTimeDatasList(tapPointDetailsList);
// ³Æ TapPointDetail ¤ÎÀßÄê
TapPointSetUp();
}
/// <summary>
/// ³Æ TapPointDetail ¤ÎÀßÄê¡£¤ª»È¤¤¤Î¾õ¶·¤Ë¹ç¤ï¤»¤Æ¡¢»Å»öÃ椫»Å»ö½ªÎ»¤«¤òȽÃǤ·¤Æ¥¥ã¥é¤òÀ¸À®¤¹¤ë¤«¡¢¤ª»È¤¤¤òºÆ³«¤¹¤ë¤«·èÄê
/// </summary>
private void TapPointSetUp() {
¡¡¡¡¡¡¡¡// List ¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¤¹¤Ù¤Æ¤Î TapPointDetail ¥¯¥é¥¹¤ËÂФ·¤Æ£±²ó¤º¤Ä½èÍý¤ò¹Ô¤¦
for (int i = 0; i < tapPointDetailsList.Count; i++) {
¡¡¡¡¡¡¡¡¡¡¡¡// TapPointDetail ¥¯¥é¥¹¤ÎÀßÄê¤ò¹Ô¤¦
tapPointDetailsList[i].SetUpTapPointDetail(this);
// ³Æ TapPointDetail ¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë JobData ¤Ë³ºÅö¤¹¤ë JobTimeData ¤ò¼èÆÀ
OfflineTimeManager.JobTimeData jobTime = OfflineTimeManager.instance.workingJobTimeDatasList.Find((x) => x.jobNo == tapPointDetailsList[i].jobData.jobNo);
// ¤³¤Î¹Ô¤À褬¤ª»È¤¤Ãæ¤Ç¤Ê¤±¤ì¤Ð¼¡¤Î½èÍý¤Ø°Ü¤ë
if (jobTime == null) {
continue;
}
// ¤ª»È¤¤¤Î¾õÂ֤ȻĤê»þ´Ö¤ò¼èÆÀ
(bool isJobEnd, int remainingTime) = JudgeJobsEnd(jobTime);
// ¥í¡¼¥É¤·¤¿»þ´Ö¤È¥»¡¼¥Ö¤·¤¿»þ´Ö¤ò·×»»¤·¤Æ¡¢¤Þ¤À¤ª»È¤¤¤Î»þ´Ö¤¬·Ð²á¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢£¤ò¼Â¹Ô¤¹¤ë¡£¤ª»È¤¤¤¬´°Î»¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¤È¢¤ò¼Â¹Ô¤¹¤ë
if (isJobEnd) {
// ¡¤ª»È¤¤´°Î»¡£¤ª»È¤¤¤Î¥ê¥¹¥È¤È¥»¡¼¥Ö¥Ç¡¼¥¿¤òºï½ü¡¡¥¥ã¥é¤ò¥¿¥Ã¥×¤·¤Æ¤«¤é¾Ã¤¹
OfflineTimeManager.instance.RemoveWorkingJobTimeDatasList(jobTime.jobNo);
// ¢¥¥ã¥éÀ¸À®¤·¤Æ·ë²Ì¤ò³Îǧ
GenerateCharaDetail(tapPointDetailsList[i]);
} else {
// £¤ª»È¤¤Ì¤Î»¡£¹Ô¤Àè¤Î²èÁü¤ò¤ª»È¤¤Ãæ¤Î²èÁü¤ËÊѹ¹¤·¤Æ¡¢¤ª»È¤¤½èÍý¤òºÆ³«¡£
JudgeSubmitJob(true, tapPointDetailsList[i], remainingTime);
}
}
}
/// <summary>
/// TapPoint ¤ò¥¯¥ê¥Ã¥¯¤·¤¿ºÝ¤Ë¤ª»È¤¤³ÎǧÍѤΥݥåץ¢¥Ã¥×¤ò³«¤¯¡£TapPointDetail ¥¯¥é¥¹¤è¤ê°Ü´É
/// </summary>
/// <param name="tapPointDetail"></param>
public void GenerateJobsConfirmPopUp(TapPointDetail tapPointDetail) {
// ¤ª»È¤¤³ÎǧÍѤΥݥåץ¢¥Ã¥×¤òºîÀ®
JobsConfirmPopUp jobsConfirmPopUp = Instantiate(jobsConfirmPopUpPrefab, canvasTran, false);
// ¥Ý¥Ã¥×¥¢¥Ã¥×¤Î¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¡£¥á¥½¥Ã¥É¤Î°ú¿ô¤òÍøÍѤ·¤Æ¥Ý¥Ã¥×¥¢¥Ã¥×¤Ë TapPointDetail ¥¯¥é¥¹¤Î¾ðÊó¤òÁ÷¤ë¤³¤È¤Ç¡¢JobData ¤Î¾ðÊó¤ò³èÍѤǤ¤ë¤è¤¦¤Ë¤¹¤ë
jobsConfirmPopUp.OpenPopUp(tapPointDetail, this);
}
/// <summary>
/// ¤ª»È¤¤¤ò°ú¤¼õ¤±¤¿¤«³Îǧ
/// </summary>
/// <param name="isSubmit"></param>
public void JudgeSubmitJob(bool isSubmit, TapPointDetail tapPointDetail, int remainingTime = -1) {
if (isSubmit) {
// ¤ª»È¤¤¤ÎÅÐÏ¿
OfflineTimeManager.instance.CreateWorkingJobTimeDatasList(tapPointDetail, remainingTime);
// ¤ª»È¤¤¤Î½àÈ÷¤È¤ª»È¤¤¤Î³«»Ï
if (remainingTime == -1) {
// ¤¤¤Þ¤Þ¤Ç¤ª»È¤¤¤·¤Æ¤¤¤Ê¤¤¤Ê¤é¡¢¤ª»È¤¤¤´¤È¤Î½é´üÃͤΤª»È¤¤¤Î»þ´Ö¤òÀßÄê
tapPointDetail.PrapareteJobs(tapPointDetail.jobData.jobTime);
} else {
// ¤ª»È¤¤¤ÎÅÓÃæ¤Î¾ì¹ç¤Ë¤Ï¡¢»Ä¤ê¤Î¤ª»È¤¤¤Î»þ´Ö¤òÀßÄê
tapPointDetail.PrapareteJobs(remainingTime);
}
// ¤ª»È¤¤³«»Ï»þ´Ö¤Î¥»¡¼¥Ö
OfflineTimeManager.instance.SaveWorkingJobTimeData(tapPointDetail.jobData.jobNo);
} else {
Debug.Log("¤ª»È¤¤¤Ë¤Ï¹Ô¤«¤Ê¤¤");
}
}
/// <summary>
/// ¥¥ã¥éÀ¸À®
/// </summary>
public void GenerateCharaDetail(TapPointDetail tapPointDetail) {
tapPointDetail.SwtichActivateTapPoint(false);
// TODO ¤ª»È¤¤ÍѤΥ¥ã¥é¤ÎÀ¸À®
Debug.Log("¤ª»È¤¤ÍѤΥ¥ã¥é¤ÎÀ¸À®");
CharaDetail chara = Instantiate(charaDetailsPrefab, tapPointDetail.transform, false);
chara.SetUpCharaDetail(this, tapPointDetail);
}
¡¡¡¡/// <summary>
/// »þ´Ö¤Îº¹Ê¬¤è¤ê¡¢¤ª»È¤¤¤¬½ªÎ»¤·¤Æ¤¤¤ë¤«È½Äê
/// </summary>
/// <param name="jobTimeData"></param>
/// <returns></returns>
private (bool, int) JudgeJobsEnd(OfflineTimeManager.JobTimeData jobTimeData) {
¡¡¡¡¡¡¡¡// ¥²¡¼¥àµ¯Æ°»þ¤Î»þ´Ö¤È¤ª»È¤¤¤ò³«»Ï¤·¤¿»þ´Ö¤È¤Îº¹Ê¬Ãͤò»»½Ð
int elaspedTime = OfflineTimeManager.instance.CalculateOfflineDateTimeElasped(jobTimeData.GetDateTime()) * 100;
Debug.Log("¤ª»È¤¤»þ´Ö¤Îº¹Ê¬ : " + elaspedTime / 100 + " : ÉÃ");
// »Ä¤ê»þ´Ö»»½Ð
int remainingTime = jobTimeData.elaspedJobTime;
Debug.Log("remainingTime : " + remainingTime);
// ·Ð²á»þ´Ö¤¬¤ª»È¤¤¤Ë¤«¤«¤ë»þ´Ö¤è¤ê¤âƱ¤¸¤«Â¿¤¤¤Ê¤é
if (remainingTime <= elaspedTime) {
// ¤ª»È¤¤´°Î»
return (true, 0);
}
// ¤ª»È¤¤Ì¤Î»¡£»Ä¤ê»þ´Ö¤«¤é·Ð²á»þ´Ö¤ò¸º»»¤·¤Æ»Ä¤ê»þ´Ö¤Ë¤¹¤ë
return (false, remainingTime - elaspedTime);
}
/// <summary>
/// ¤ª»È¤¤¤ÎÀ®²Ìȯɽ
/// ¥¥ã¥é¤ò¥¿¥Ã¥×¤¹¤ë¤È¸Æ¤Ó½Ð¤¹
/// </summary>
public void ResultJobs(TapPointDetail tapPointDetail) {
¡¡¡¡¡¡¡¡Debug.Log("À®²Ì ȯɽ");
¡¡ // ¤ª»È¤¤¤ÎÆñ¤·¤µ¤«¤éË«¾Þ·èÄê
RewardData rewardData = GetLotteryForRewards(tapPointDetail.jobData.jobType);
Debug.Log("·èÄꤷ¤¿Ë«¾Þ¤ÎÄ̤·ÈÖ¹æ : " + rewardData.rewardNo);
// Ë«¾Þ¥Ý¥¤¥ó¥È¤ò·×»»
GameData.instance.CalulateTotalRewardPoint(rewardData.rewardPoint);
// ³ÍÆÀ¤·¤¿Ë«¾Þ¤ò³ÍÆÀºÑ¥ê¥¹¥È¤ËÅÐÏ¿¡£¤¹¤Ç¤Ë¤¢¤ë¾ì¹ç¤Ë¤Ï½ê»ý¿ô¤ò²Ã»»
GameData.instance.AddEarnedRewardsList(rewardData.rewardNo);
// ³ÍÆÀ¤·¤¿Ë«¾Þ¤Î¥»¡¼¥Ö
GameData.instance.SaveEarnedReward(rewardData.rewardNo);
// Ë«¾Þ¥Ý¥¤¥ó¥È¤Î¥»¡¼¥Ö
GameData.instance.SaveTotalRewardPoint();
// £Ë«¾Þɽ¼¨Íѥݥåץ¢¥Ã¥×À¸À®¤·¡¢RewardPopUp ¥¹¥¯¥ê¥×¥È¤Î¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Æ¡¢Ë«¾Þ¤Î¥Ç¡¼¥¿¤ò°ú¿ô¤È¤·¤ÆÅϤ¹
¡¡¡¡¡¡¡¡Instantiate(rewardPopUpPrefab, canvasTran, false).SetUpRewardPopUp(rewardData);
// ¤ª»È¤¤¤Î¥ê¥¹¥È¤È¤ª»È¤¤¤Î¥»¡¼¥Ö¥Ç¡¼¥¿¤òºï½ü
¡¡¡¡¡¡¡¡OfflineTimeManager.instance.RemoveWorkingJobTimeDatasList(tapPointDetail.jobData.jobNo);
}
¡¡¡¡/// <summary>
/// ¤ª»È¤¤¤ÎË«¾Þ¤ÎÃêÁª
/// </summary>
private RewardData GetLotteryForRewards(JobType jobType) {
// Æñ°×Å٤ˤè¤ë´õ¾¯Å٤ιç·×Ãͤò»»½Ð¤·¤Æ¡¢¥é¥ó¥À¥à¤ÊÃͤòÃê½Ð
int randomRarityValue = UnityEngine.Random.Range(0, JobTypeRewardRatesDataSO.jobTypeRewardRatesDataList[(int)jobType].rewardRates.Sum());
Debug.Log("º£²ó¤Î¤ª»È¤¤¤ÎÆñ°×ÅÙ : " + jobType + " / Æñ°×Å٤ˤè¤ë´õ¾¯Å٤ιç·×ÃÍ : " + JobTypeRewardRatesDataSO.jobTypeRewardRatesDataList[(int)jobType].rewardRates.Sum());
Debug.Log("´õ¾¯ÅÙ¤ò·èÄꤹ¤ë¤¿¤á¤Î¥é¥ó¥À¥à¤ÊÃÍ : " + randomRarityValue);
¡¡¡¡¡¡¡¡// ÃêÁªÍѤνé´üÃͤòÀßÄê
RarityType rarityType = RarityType.Common;
int total = 0;
// Ãê½Ð¤·¤¿Ãͤ¬¤É¤Î´õ¾¯Å٤ˤʤ뤫³Îǧ
for (int i = 0; i < JobTypeRewardRatesDataSO.jobTypeRewardRatesDataList.Count; i++) {
¡¡¡¡¡¡¡¡¡¡¡¡// ´õ¾¯Å٤νŤßÉÕ¤±¹Ô¤¦¤¿¤á¤Ë²Ã»»
total += JobTypeRewardRatesDataSO.jobTypeRewardRatesDataList[(int)jobType].rewardRates[i];
¡¡¡¡¡¡¡¡¡¡¡¡Debug.Log("´õ¾¯ÅÙ¤ò·èÄꤹ¤ë¤¿¤á¤Î¥é¥ó¥À¥à¤ÊÃÍ : " + randomRarityValue + " <= " + " ´õ¾¯Å٤νŤßÉÕ¤±¤Î¹ç·×ÃÍ : " + total);
// total ¤ÎÃͤ¬¤É¤Î´õ¾¯Å٤˳ºÅö¤¹¤ë¤«¤ò½çÈ֤˳Îǧ
if (randomRarityValue <= total) {
// ´õ¾¯ÅÙ¤ò·èÄê
rarityType = (RarityType)i;
break;
}
}
Debug.Log("º£²ó¤Î´õ¾¯ÅÙ : " + rarityType);
// º£²óÂоݤȤʤë´õ¾¯Å٤Υǡ¼¥¿¤À¤±¤Î¥ê¥¹¥È¤òºîÀ®
List<RewardData> rewardDatas = new List<RewardData>(rewardDataSO.rewardDatasList.Where(x => x.rarityType == rarityType).ToList());
// Ʊ¤¸´õ¾¯ÅÙ¤ÎË«¾Þ¤ÎÄ󶡳ä¹ç¤ÎÃͤιç·×Ãͤò»»½Ð¤·¤Æ¡¢¥é¥ó¥À¥à¤ÊÃͤòÃê½Ð
int randomRewardValue = UnityEngine.Random.Range(0, rewardDatas.Select(x => x.rarityRate).ToArray().Sum());
Debug.Log("´õ¾¯ÅÙÆâ¤ÎË«¾ÞÍѤΥé¥ó¥À¥à¤ÊÃÍ : " + randomRewardValue);
total = 0;
// Ãê½Ð¤·¤¿Ãͤ¬¤É¤ÎË«¾Þ¤Ë¤Ê¤ë¤«³Îǧ
for (int i = 0; i < rewardDatas.Count; i++) {
¡¡¡¡¡¡¡¡¡¡¡¡// // total ¤ÎÃͤ¬Ë«¾Þ¤Ë³ºÅö¤¹¤ë¤Þ¤Ç²Ã»»
total += rewardDatas[i].rarityRate;
Debug.Log("´õ¾¯ÅÙÆâ¤ÎË«¾ÞÍѤΥé¥ó¥À¥à¤ÊÃÍ : " + randomRewardValue + " <= " + " Ë«¾Þ¤Î½Å¤ßÉÕ¤±¤Î¹ç·×ÃÍ : " + total);
if (randomRewardValue <= total) {
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡// Ë«¾Þ³ÎÄê
return rewardDatas[i];
}
}
return null;
}
}
¡¡¥¹¥¯¥ê¥×¥È¤ò½¤Àµ¤·¤¿¤é¥»¡¼¥Ö¤·¤Þ¤¹¡£
¥³¥á¥ó¥È¤ò¤«¤¯