public void Update() { // LOGIC int Frames = _Controller == Control.NEURAL_NETWORL ? GameplayManager.GetInstance().UpdatesPerFrame : 1; // if (Input.GetKeyDown(KeyCode.LeftControl)) // UpdateOverclock = !UpdateOverclock; for (int i = 0; i < Frames; i++) { UpdateMovement(); Tick(); } // Update Histogram if (OPH != null) { float[] Outputs = TetrisPerceptronManager.GetEpochManager().GetCurrentEpoch().CurrentOutputs; if (Outputs != null && Outputs.Length == (int)Tetris.Move.TOTAL) { for (int i = 0; i < Outputs.Length; i++) { OPH.UpdateOutput(i, Outputs[i]); } } } // GRAPHICS TetrisBoardColors.UpdateColors(); }
public static TetrisPerceptronManager GetInstance() { if (_instance == null) { _instance = new TetrisPerceptronManager(); } return(_instance); }
// End Current Game private void EndGame() { //Debug.Log("GAMEOVER"); if (_Controller == Control.NEURAL_NETWORL) { // Count total empty spaces float empty_slots = TetrisBoard._TotalCells - TetrisBoard.CountSolidsInBoard(); IncreaseFitness(ScoreSystemManager.GetCurrent().GameOver_EmptySlots *empty_slots); // Increase Fitness by the IncreaseFitness(ScoreSystemManager.GetCurrent().Per_Piece_Placed *(float)_PiecesUsed); // Calculate Fitness from Heuristics TetrisPerceptronManager.GetInstance().FinishCurrentAI(_Fitness); GameplayManager.GetInstance()._Histogram.AddValue(_Fitness); } ResetGame(); }
// Update Text private void UpdateText() { // Objects Tetris T = Tetris.GetInstance(); TetrisPerceptronManager TPM = TetrisPerceptronManager.GetInstance(); // Text setters _TickText.text = T.GetTickCounter().ToString(); _CurrentPiece.text = Tetris._Piece._Type.ToString(); _NextPiece.text = Tetris._Piece._NextType.ToString(); _GenerationText.text = TetrisPerceptronManager.GetEpochManager().GetGeneration().ToString(); _EpochText.text = (TetrisPerceptronManager.GetEpochManager().GetEpochIndex().ToString() + "/" + TetrisPerceptronManager.GetEpochManager().GetMaxEpochs().ToString()); _LinesText.text = Tetris._Lines.ToString(); _TotalLinesText.text = Tetris._TotalLines.ToString(); _FitnessText.text = Tetris._Fitness.ToString(); // Move Text is updated internally if (LimitPieces <= 0) { _PiecesUsedText.text = Tetris._PiecesUsed.ToString(); } else { _PiecesUsedText.text = Tetris._PiecesUsed.ToString() + '/' + LimitPieces.ToString(); } _BestSoFar.text = _Histogram.GetMaxValue().ToString(); _SimulationSpeed.text = UpdatesPerFrame.ToString(); if (!PauseMenu.GetInstance().getActive()) { int time = (int)(Time.time - PauseMenu.GetInstance()._PauseTime); string seconds = (time % 60).ToString("00"); string minutes = (time / 60 % 60).ToString("00"); string hours = (time / 3600).ToString("0000"); _TimeText.text = hours + ':' + minutes + ':' + seconds; } }
// Movement private void UpdateMovement() { // Set Move if (_Controller == Control.PLAYER) { if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A)) { SetMove(Move.MOVE_LEFT); } else if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D)) { SetMove(Move.MOVE_RIGHT); } else if (Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S)) { SetMove(Move.MOVE_DOWN); } else if (Input.GetKeyDown(KeyCode.Space)) { SetMove(Move.COLLAPSE); } else if (Input.GetKeyDown(KeyCode.Z) || Input.GetKeyDown(KeyCode.Comma)) { SetMove(Move.ROTATE_CCW); } else if (Input.GetKeyDown(KeyCode.X) || Input.GetKeyDown(KeyCode.Period)) { SetMove(Move.ROTATE_CW); } } else if (_Controller == Control.NEURAL_NETWORL) { // Update Neurons TetrisPerceptronManager.GetInstance().UpdateAI(); // Set Move to its selected move SetMove(TetrisPerceptronManager._AI_Move); } }
private void Update() { if (Input.GetKeyDown(KeyCode.P) || Input.GetKeyDown(KeyCode.Escape)) { // Can only unpause if not saving if (SavingThread.GetInstance().checkThreadRunning() == false) { ToggleActive(); } } if (_Active) { // Saving Effect bool CheckSaving = SavingThread.GetInstance().checkThreadRunning(); PauseMenu.GetInstance()._LoadingText.enabled = CheckSaving; if (CheckSaving) { PauseMenu.GetInstance()._LoadingText.text = "Loading... (" + SavingThread.m_Saving_Layer.ToString() + "-" + SavingThread.m_Saving_Perceptron.ToString() + "-" + SavingThread.m_Saving_Weight.ToString() + ")"; } // _Parent.SetActive(true); Vector3 Position = _FancyBar.GetComponent <RectTransform>().position; Position.y = Mathf.Lerp(Position.y, getItem(_MenuIndex)._Text.GetComponent <RectTransform>().position.y, 0.3f); _FancyBar.GetComponent <RectTransform>().position = Position; if (Input.GetKeyDown(KeyCode.DownArrow) || Input.GetKeyDown(KeyCode.S)) { _MenuIndex++; if (_MenuIndex > _Items.Length - 1) { _MenuIndex = 0; } } if (Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.W)) { _MenuIndex--; if (_MenuIndex < 0) { _MenuIndex = _Items.Length - 1; } } for (int i = 0; i < _Items.Length; i++) { if (i != _MenuIndex) { _Items[i]._Text.color = Color.Lerp(_Items[i]._Text.color, _UnselectedColor, 0.25f); } } _Items[_MenuIndex]._Text.color = Color.Lerp(_Items[_MenuIndex]._Text.color, _SelectedColor, 0.4f); // API for File Browser // https://github.com/gkngkc/UnityStandaloneFileBrowser // if (Input.GetKeyDown(KeyCode.Space) || Input.GetKeyDown(KeyCode.KeypadEnter) || Input.GetKeyDown(KeyCode.Return)) { switch (_Items[_MenuIndex]._type) { case PauseItem.Type.RESUME: { // Can only unpause if not saving if (SavingThread.GetInstance().checkThreadRunning() == false) { ToggleActive(); } } break; case PauseItem.Type.SAVE_EPOCH: { // Get Current Epoch Epoch epoch = TetrisPerceptronManager.GetEpochManager().GetCurrentEpoch(); if (epoch == null) { Debug.LogError("No Current Epoch"); return; } string Directory = SimpleFileDialog.SelectFile(); if (Directory == "") { Debug.LogError("Directory Not Selected"); return; } SavingThread.GetInstance().SaveEpoch(epoch, Directory); } break; case PauseItem.Type.SAVE_BEST_EPOCH: { // Get Best Epoch Epoch epoch = TetrisPerceptronManager.GetEpochManager().GetBestEpochAcrossGeneration(); if (epoch == null) { Debug.LogError("No Current Epoch"); return; } string Directory = SimpleFileDialog.SelectFile(); if (Directory == "") { Debug.LogError("Directory Not Selected"); return; } SavingThread.GetInstance().SaveEpoch(epoch, Directory); } break; case PauseItem.Type.LOAD_EPOCH: { // Read Data File as String string Data = SimpleFileDialog.OpenFile(); if (Data.Length == 0) { return; } // Read File Epoch Result = EpochParser.LoadFile(Data); if (Result == null) { return; } // Set To Current Epoch TetrisPerceptronManager.GetEpochManager().OverrideCurrentEpoch(Result); // Reset Game Tetris.GetInstance().ResetGame(); } break; } } } else { _Parent.SetActive(false); } }