private List <UnpreparedTrainingsset> getUnpreparedTrainingssets(Game i_game, List <String> lstr, AlgoBot algobot) { List <UnpreparedTrainingsset> result = new List <UnpreparedTrainingsset>(); Game n_game; if (!lstr.Contains(Game.BoardToString(i_game.Gameboard, i_game.turn))) { if (!i_game.over)//only save anything if there is a playble move afterwards { int[] bestmove = algobot.findBestMove(i_game, i_game.turn); UnpreparedTrainingsset ut = new UnpreparedTrainingsset(); ut.inputGame = i_game.Gameboard; ut.turn = i_game.turn; ut.outputMove = bestmove; result.Add(ut); List <int[]> possibleMove = this.PossibleMoves(i_game); for (int i = 0; i < possibleMove.Count; i++) { n_game = i_game.copy(); bool b = n_game.MakeMove(possibleMove[i][0], possibleMove[i][1], n_game.turn); if (!b) { throw new Exception("nana"); } List <UnpreparedTrainingsset> lst = getUnpreparedTrainingssets(n_game, lstr, algobot); foreach (UnpreparedTrainingsset l in lst) { result.Add(l); lstr.Add(Game.BoardToString(l.inputGame, i_game.turn)); } } } } return(result); }