void Start() { ActionLogPresenter.CreateInstance(); ItemData.Load(); EnemyData.Load(); PlayerData.Load(); //map 生成 mapPresenter.Generate(); //enemy生成 List <UserModel> enemies = EnemyData.GetRandoms(50); enemies.ForEach(enemy => { Vector2Int _pos = mapPresenter.GetPopPoint(); UserModel _model = characterListPresenter.Generate(_pos, mapPresenter.GetTileModel(_pos.x, _pos.y).floorId, enemy); mapPresenter.SetUserModel(_pos, _model); }); //player生成 UserModel player = PlayerData.GetRandom(); player.isOwn = true; Vector2Int position = mapPresenter.GetPopPoint(); UserModel model = characterListPresenter.Generate(position, mapPresenter.GetTileModel(position.x, position.y).floorId, player); mapPresenter.SetUserModel(position, model); gameStatus = new GameStatusModel(); //item 配置 List <ItemModel> items = ItemData.GetRandoms(50); items.ForEach(item => itemsListPresenter.Generate(mapPresenter, item)); //階段配置 stairsListPresenter.Generate(mapPresenter); //dummy エネミー配置 //enemiesListPresenter.DummyGenerate(mapPresenter, mapPresenter.CanSetObject(pos)); //dummy 階段配置 Vector2Int pos = mapPresenter.GetPopPoint(); stairsListPresenter.DummyGenerate(mapPresenter, mapPresenter.CanSetObject(pos)); CharacterPresenter characterPresenter = characterListPresenter.GetOwnCharacterPresenter(); characterPresenter.characterView.Equip(""); menuPresenter.itemMenuPresenter.Initialize(characterPresenter.itemModels); //Create Hud GameObject res = Resources.Load("Object/Hud") as GameObject; GameObject obj = UnityEngine.Object.Instantiate(res, new Vector3(0, 0, 0), Quaternion.identity) as GameObject; hudPresenter = obj.GetComponent <HudPresenter>(); hudPresenter.UpdateHud(characterPresenter.status); }
private void Update() { switch (nextState) { case NextState.Wait: return; case NextState.Draw: if (history.horizontalDominoes.Count > 0) { placesToPlay = PlacesToPlay(); if (placesToPlay.Count == 0) { base.DrawDomino(); placesToPlay = PlacesToPlay(); if (placesToPlay.Count == 0) { nextState = NextState.Wait; gameController.PlayerIsBlocked(this); return; } } } nextState = NextState.Play; break; case NextState.Play: List <ChosenWayToPlay> waysToPlay = new List <ChosenWayToPlay>(); if (history.horizontalDominoes.Count == 0) { foreach (DominoController domino in dominoControllers) { waysToPlay.Add(new ChosenWayToPlay(domino, null)); } } else { foreach (KeyValuePair <DominoController, List <DominoController> > entry in placesToPlay) { List <DominoController> list = entry.Value; foreach (DominoController chosenPlace in list) { ChosenWayToPlay chosenWayToPlay = new ChosenWayToPlay(entry.Key, chosenPlace); waysToPlay.Add(chosenWayToPlay); } } } int historyDominoesNum = history.horizontalDominoes.Count + history.verticalDominoes.Count - (history.spinner == null ? 0 : 1); GameStatusModel gameStatus = GetGameStatus(); // From small to large waysToPlay.Sort(delegate(ChosenWayToPlay x, ChosenWayToPlay y) { if (historyDominoesNum <= 18) { int xScore = GetScoreOfChosenWay(x); int yScore = GetScoreOfChosenWay(y); return(xScore - yScore); } ChosenWayToPlayModel xModel = new ChosenWayToPlayModel(Utility.DominoControllerToDominoModel(x.chosenDomino), Utility.DominoControllerToDominoModel(x.chosenPlace)); PlayActionModel xPlayActionModel = new PlayActionModel(gameStatus, xModel); WinLoseStatusModel xWinLoseStatus; if (winLoseDict.ContainsKey(xPlayActionModel)) { xWinLoseStatus = winLoseDict[xPlayActionModel]; } else { xWinLoseStatus = new WinLoseStatusModel(); xWinLoseStatus.wins = 1; xWinLoseStatus.loses = 1; } double xWinRate = (double)xWinLoseStatus.wins / (xWinLoseStatus.wins + xWinLoseStatus.loses); ChosenWayToPlayModel yModel = new ChosenWayToPlayModel(Utility.DominoControllerToDominoModel(y.chosenDomino), Utility.DominoControllerToDominoModel(y.chosenPlace)); PlayActionModel yPlayActionModel = new PlayActionModel(gameStatus, yModel); WinLoseStatusModel yWinLoseStatus; if (winLoseDict.ContainsKey(yPlayActionModel)) { yWinLoseStatus = winLoseDict[xPlayActionModel]; } else { yWinLoseStatus = new WinLoseStatusModel(); yWinLoseStatus.wins = 1; yWinLoseStatus.loses = 1; } double yWinRate = (double)yWinLoseStatus.wins / (yWinLoseStatus.wins + yWinLoseStatus.loses); if (xWinRate < yWinRate) { return(-1); } else if (xWinRate == yWinRate) { return(0); } return(1); }); ChosenWayToPlay bestWayToPlay = waysToPlay[waysToPlay.Count - 1]; PlaceDomino(bestWayToPlay.chosenDomino, bestWayToPlay.chosenPlace, history); dominoControllers.Remove(bestWayToPlay.chosenDomino); if (historyDominoesNum > 18) { ChosenWayToPlayModel bestPlayModel = new ChosenWayToPlayModel(Utility.DominoControllerToDominoModel(bestWayToPlay.chosenDomino), Utility.DominoControllerToDominoModel(bestWayToPlay.chosenPlace)); PlayActionModel bestPlayActionModel = new PlayActionModel(gameStatus, bestPlayModel); if (winLoseDict.ContainsKey(bestPlayActionModel)) { winLoseStatusList.Add(winLoseDict[bestPlayActionModel]); } else { WinLoseStatusModel winLoseStatus = new WinLoseStatusModel(); winLoseStatus.wins = 1; winLoseStatus.loses = 1; winLoseDict.Add(bestPlayActionModel, winLoseStatus); winLoseStatusList.Add(winLoseStatus); } } // Debug Debug.Log("Chosen Domino: " + bestWayToPlay.chosenDomino.leftValue + ", " + bestWayToPlay.chosenDomino.rightValue + ", " + bestWayToPlay.chosenDomino.upperValue + ", " + bestWayToPlay.chosenDomino.lowerValue); if (bestWayToPlay.chosenPlace != null) { Debug.Log("Chosen Place: " + bestWayToPlay.chosenPlace.leftValue + ", " + bestWayToPlay.chosenPlace.rightValue + ", " + bestWayToPlay.chosenPlace.upperValue + ", " + bestWayToPlay.chosenPlace.lowerValue); } Debug.Log(Environment.StackTrace); nextState = NextState.Wait; gameController.PlayerPlayDomino(this, bestWayToPlay.chosenDomino, bestWayToPlay.chosenPlace); break; } }