gametrees.cpp
来自「游戏编程精髓里的人工智能源代码很好的源代码!」· C++ 代码 · 共 78 行
CPP
78 行
/* Copyright (C) Jan Svarovsky, 2000. * All rights reserved worldwide. * * This software is provided "as is" without express or implied * warranties. You may freely copy and compile this source into * applications you distribute provided that the copyright text * below is included in the resulting source code, for example: * "Portions Copyright (C) Jan Svarovsky, 2000" */int maximize(int ply){ if (ply == 0 || game_over()) return evaluate_current_board(); int best = -infinity; for (Move *m = first_available_move(); m != NULL; m = next_available_move()) { make_move(m); int new_value = minimize(ply - 1); unmake_move(m); if (new_value > best) best = new_value; } return best;}Move *which_move_shall_I_take(int ply){ Move* best_move; int best_value = -infinity; for (Move *m = first_available_move(); m != NULL; m = next_available_move()) { make_move(m); int new_value = maximize(ply); unmake_move(m); if (new_value > best_value) { best_value = new_value; best_move = m; } } return best_move;}int negamax(int ply){ if (ply == 0 || game_over()) return evaluate_current_board(); int best = -infinity; for (Move *m = first_available_move(); m != NULL; m = next_available_move()) { make_move(m); int new_value = -negamax(ply - 1); unmake_move(m); if (new_value < best) best = new_value; } return best;}int alphabeta(int ply, int alpha, int beta){ if (ply == 0 || game_over()) return evaluate_current_board(); for (Move *m = first_available_move(); m != NULL; m = next_available_move()) { make_move(m); int new_value = -alphabeta(ply - 1, -beta, -alpha); unmake_move(m); if (new_value > beta) return new_value; // prune if (new_value < alpha) alpha = new_value; // update our "best so far" } return alpha;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?