private ScoreAndMove Negamax(SimpleBoard simp, int currentDepth) { if (simp.state == SimpleBoard.State.DRAW) { return(new ScoreAndMove(0, -1)); } else if (simp.state == SimpleBoard.State.XWON || simp.state == SimpleBoard.State.OWON) { return(new ScoreAndMove(10 - currentDepth, -1)); } ScoreAndMove worst = new ScoreAndMove(1000, -1); foreach (int move in simp.GetMoves()) { simp.MakeMove(move); ScoreAndMove sam = Negamax(simp, currentDepth + 1); simp.UnDoMove(move); sam.score = -sam.score; if (sam.score < worst.score) { worst.score = sam.score; worst.move = move; } } return(worst); }
private void Update() { if (Input.GetKeyDown(KeyCode.Keypad1)) { ExecuteMove(0); } if (Input.GetKeyDown(KeyCode.Keypad2)) { ExecuteMove(1); } if (Input.GetKeyDown(KeyCode.Keypad3)) { ExecuteMove(2); } if (Input.GetKeyDown(KeyCode.Keypad4)) { ExecuteMove(3); } if (Input.GetKeyDown(KeyCode.Keypad5)) { ExecuteMove(4); } if (Input.GetKeyDown(KeyCode.Keypad6)) { ExecuteMove(5); } if (Input.GetKeyDown(KeyCode.Keypad7)) { ExecuteMove(6); } if (Input.GetKeyDown(KeyCode.Keypad8)) { ExecuteMove(7); } if (Input.GetKeyDown(KeyCode.Keypad9)) { ExecuteMove(8); } if (Input.GetKeyDown(KeyCode.Space) && ((mainBoard.turn && xIsAi) || (!mainBoard.turn && oIsAi))) { if (!mainBoard.IsEnd()) { ScoreAndMove sam = Negamax(mainBoard, 0); int move = sam.move; if (!mainBoard.turn) { ChangeSprite(move, o); currentPlayerImage.GetComponent <Image>().sprite = x; } else { ChangeSprite(move, x); currentPlayerImage.GetComponent <Image>().sprite = o; } mainBoard.MakeMove(move); } else { if (mainBoard.state == SimpleBoard.State.DRAW) { currentPlayerText.text = "IT IS A DRAW!"; } else if (mainBoard.state == SimpleBoard.State.XWON) { currentPlayerText.text = "X HAS WON!"; } else if (mainBoard.state == SimpleBoard.State.OWON) { currentPlayerText.text = "O HAS WON!"; } } } }