Bonjour tout le monde !

Je n'arrive pas à appliquer le principe du minimax pour un jeu de puissance 4. J'ai tenté d'implémenter l'algorithme tel qu'il est présenté sur ce site (qui l'st pour un morpion) mais il ne fonctionne pas.
Voici mon code commenté, j'espère que vous pourrez m'aider à trouver la solution (la partie non commentée fonctionne parfaitement, le joueur humain est le joueur 1 et le joueur IA est le joueur 2).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
#include <iostream>
#include <vector>
 
using namespace std;
 
void printGame(vector< vector<int> > game);
char coin(int player)    {return (player == 1 ? '1' : (player == 2 ? '2' : ' '));}
int checkEnded(vector< vector<int> > game);
bool play(vector< vector<int> > game, int column, int player);
int robotGo(vector< vector<int> > game);
int calcMax(vector< vector<int> > game, int depth);
int calcMin(vector< vector<int> > game, int depth);
 
int main()
{
    vector< vector<int> > game(7, vector<int>(6, 0));
    printGame(game);
 
    int winner;
    bool robot = false;
 
    while((winner = checkEnded(game)) < 0)
    {
        int column = 0;
        if(robot)    column = robotGo(game);
        else    cout << endl << "Where play ? ", cin >> column, column--;
 
        for(int i = 0; i < 6; i++)    if(game[column][i] == 0)    { game[column][i] = (robot ? 2 : 1); break; }
 
        printGame(game);
 
        robot = !robot;
    }
 
    switch(winner)
    {
        case 0 : cout << endl << "Match nul" << endl; break;
        case 1 : cout << endl << "Gagne !!!" << endl; break;
        case 2 : cout << endl << "Perdu !!!" << endl; break;
    }
 
    cin.get();
    return 0;
}
 
void printGame(vector< vector<int> > game)
{
    system("cls"), cout << "  1   2   3   4   5   6   7" << endl << endl;
    for(int i = 5; i >= 0; i--)
    {
        cout << "| " << coin(game[0][i]) << " | " << coin(game[1][i]) << " | " << coin(game[2][i]) << " | " << coin(game[3][i]) << " | "
        << coin(game[4][i]) << " | " << coin(game[5][i]) << " | " << coin(game[6][i]) << " |" << endl << "+---+---+---+---+---+---+---+" << endl;
    }
}
 
int checkEnded(vector< vector<int> > game)
{
    for(int i = 0; i < 7; i++)    for(int j = 0; j < 3; j++)    for(int p = 1; p < 3; p++)
        if(game[i][j] == p && game[i][j + 1] == p && game[i][j + 2] == p && game[i][j + 3] == p)    return p;
    for(int i = 0; i < 4; i++)    for(int j = 0; j < 6; j++)    for(int p = 1; p < 3; p++)
        if(game[i][j] == p && game[i + 1][j] == p && game[i + 2][j] == p && game[i + 3][j] == p)    return p;
    for(int i = 0; i < 4; i++)    for(int j = 0; j < 3; j++)    for(int p = 1; p < 3; p++)
        if(game[i][j] == p && game[i + 1][j + 1] == p && game[i + 2][j + 2] == p && game[i + 3][j + 3] == p)    return p;
    for(int i = 0; i < 4; i++)    for(int j = 3; j < 6; j++)    for(int p = 1; p < 3; p++)
        if(game[i][j] == p && game[i + 1][j - 1] == p && game[i + 2][j - 2] == p && game[i + 3][j - 3] == p)    return p;
    for(int i = 0; i < 7; i++)    for(int j = 0; j < 6; j++)    if(game[i][j] == 0)    return -1;
    return 0;
}
 
bool play(vector< vector<int> > game, int column, int player)
{
    // On joue sur la première case de la colonne qui est vide. Si on ne peut pas, on retourne faux
    for(int i = 0; i < 5; i++)    if(game[column][i] == 0)    {game[column][i] = player; return true;}
    return false;
}
 
int robotGo(vector< vector<int> > game)
{
    // On initialise le meilleur coup (score minimum, première colonne)
    int max = -1, best = 0;
    // Pour tous les coups
    for(int i = 0; i < 7; i++)
    {
        // On fait une copie du jeu
        vector< vector<int> > tmpGame = game;
        if(play(tmpGame, i, 2))
        {
            // Si on peut jouer le coup, on calcul son score
            int tmp = calcMax(tmpGame, 3);
            // Si le score est meilleur que le précédant, on l'enregistre
            if(tmp > max)    { max = tmp; best = i; }
        }
    }
    // On retourne le meilleur coup trouvé
    return best;
}
 
int calcMax(vector< vector<int> > game, int depth)
{
    // Si le noeud est une feuille ou si le jeu est fini, on retourne 1 si on a gagné, -1 si l'adversaire a gagné ou 0 si il n'y a pas de gagnant
    int winner = checkEnded(game);
    if(depth == 0 || winner > -1)    return winner == 1 ? -1 : (winner == 2 ? 1 : 0);
 
    // On initialise le score : minimum
    int max = -1;
    // Pour tous les coups suivants
    for(int i = 0; i < 7; i++)
    {
        // On fait une copie du jeu
        vector< vector<int> > tmpGame = game;
        if(play(tmpGame, i, 2))
        {
            // Si on peut jouer le coup, on calcul son score
            int tmp = calcMin(tmpGame, depth - 1);
            // Si le score est meilleur que le précédant, on l'enregistre
            if(tmp > max)    max = tmp;
        }
    }
    // On retourne le score
    return max;
}
 
int calcMin(vector< vector<int> > game, int depth)
{
    // Si le noeud est une feuille ou si le jeu est fini, on retourne 1 si on a gagné, -1 si l'adversaire a gagné ou 0 si il n'y a pas de gagnant
    int winner = checkEnded(game);
    if(depth == 0 || winner > -1)    return winner == 1 ? -1 : 1;
 
    // On initialise le score : minimum
    int min = 1;
    // Pour tous les coups suivants
    for(int i = 0; i < 7; i++)
    {
        // On fait une copie du jeu
        vector< vector<int> > tmpGame = game;
        if(play(tmpGame, i, 1))
        {
            // Si on peut jouer le coup, on calcul son score
            int tmp = calcMax(tmpGame, depth - 1);
            // Si le score est meilleur que le précédant, on l'enregistre
            if(tmp < min)    min = tmp;
        }
    }
    // On retourne le score
    return min;
}
Merci d'avance !