Intelligent player is semi-working, where evaluate_moves is merely a stub (same behavior as naive player actually), now the hard part