public void Update() { // see if we're mouseOver a valid move TinySpot spot = driver.GetHovered(); if(spot == null) { renderer.enabled = false; } else { if(driver.IsValidMove(spot)) { renderer.enabled = true; transform.position = spot.transform.position; if(currentTex != driver.CurrentTurn) { UpdateTexture(); } if(currentSpot != spot) { currentSpot = spot; AudioSource.PlayClipAtPoint(hoverSound, Camera.main.transform.position); } } else { renderer.enabled = false; currentSpot = null; } } }
public void MakeMove(TinySpot spot) { spot.MakeMark(currentTurn); spot.Board.MadeMove(spot); // check if this ends the game bigBoard.CheckWinner(); if(bigBoard.Winner != SpotValue.None) { switch(bigBoard.Winner) { case SpotValue.X: Debug.Log("Game Over, X won!"); break; case SpotValue.O: Debug.Log("Game Over, O won!"); break; case SpotValue.Tie: Debug.Log("Game Over, TIED!"); break; } isPlaying = false; } else { // find the next forced board int index = spot.Board.GetIndex(spot); TinyBoard targetBoard = bigBoard.GetSpot(index) as TinyBoard; forcedBoard = targetBoard; // but don't force it if it's already completed if(targetBoard.Winner != SpotValue.None) { forcedBoard = null; } highlight.Highlight(currentTurn, spot, targetBoard, targetBoard == forcedBoard); // next turn is opposite player's if(currentTurn == SpotValue.X) { currentTurn = SpotValue.O; } else { currentTurn = SpotValue.X; } } }
public bool IsValidMove(TinySpot spot) { // nothing's valid if we're not playing! if(!isPlaying) { return false; } // don't change if this spot has a value if(spot.GetValue() != SpotValue.None) { return false; } // don't change if the spot's board isn't the current forced one if(forcedBoard != null && forcedBoard != spot.Board) { return false; } //don't change if the board already has a winner if(spot.Board.Winner != SpotValue.None) { return false; } return true; }