/************************************************************************** * * Othello II v2.53 - 08/02/2004 * * Copyright (C) 2000-2004 François LEIBER * * This file is part of Othello II. * * Othello II is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Othello II is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * *************************************************************************/ #define TAILLE_BIBLI 256 char *DebutCoup[TAILLE_BIBLI] = { }; char Bibli[] = { 58, 30, 31, 39, 42, 48, 29, 21, 38, 32, 59, 57, 43, 60, 0, 58, 30, 31, 39, 42, 48, 29, 21, 38, 57, 22, 59, 47, 32, 33, 0, 58, 30, 31, 39, 42, 48, 29, 21, 38, 57, 22, 59, 47, 46, 12, 0, 58, 30, 31, 39, 42, 48, 29, 21, 38, 57, 22, 28, 12, 0, 58, 30, 31, 39, 42, 48, 29, 21, 38, 47, 22, 0, 58, 30, 31, 39, 42, 48, 29, 21, 32, 22, 38, 57, 61, 24, 0, 58, 30, 31, 39, 42, 48, 29, 21, 32, 22, 57, 38, 47, 28, 0, 58, 30, 31, 39, 42, 48, 29, 21, 32, 22, 57, 38, 28, 47, 0, 58, 30, 31, 39, 42, 48, 29, 21, 59, 57, 0, 58, 30, 31, 39, 42, 48, 29, 22, 57, 47, 59, 0, 58, 30, 31, 39, 42, 48, 29, 22, 57, 38, 21, 0, 58, 30, 31, 39, 42, 48, 29, 23, 32, 22, 38, 0, 58, 30, 31, 39, 42, 48, 38, 47, 57, 33, 59, 32, 61, 60, 52, 67, 34, 68, 23, 43, 0, 58, 30, 31, 39, 42, 48, 38, 47, 57, 33, 59, 32, 61, 60, 52, 67, 43, 34, 0, 58, 30, 31, 39, 42, 48, 38, 47, 57, 33, 59, 32, 22, 56, 46, 68, 0, 58, 30, 31, 39, 42, 48, 38, 47, 57, 33, 59, 32, 21, 56, 0, 58, 30, 31, 39, 42, 48, 38, 47, 57, 33, 46, 32, 21, 37, 29, 55, 56, 22, 28, 19, 0, 58, 30, 31, 39, 42, 48, 38, 47, 57, 33, 60, 32, 0, 58, 30, 31, 39, 42, 48, 38, 47, 59, 33, 0, 58, 30, 31, 39, 42, 48, 60, 32, 0, 58, 30, 31, 39, 42, 48, 47, 38, 0, 58, 30, 31, 39, 42, 60, 33, 59, 68, 69, 48, 56, 61, 32, 23, 43, 52, 57, 53, 0, 58, 30, 31, 39, 42, 60, 33, 59, 68, 69, 48, 56, 61, 32, 23, 52, 57, 0, 58, 30, 31, 39, 42, 60, 33, 59, 68, 69, 48, 32, 38, 0, 58, 30, 31, 39, 42, 60, 33, 59, 68, 67, 61, 52, 69, 0, 58, 30, 31, 39, 42, 60, 33, 59, 68, 67, 61, 76, 69, 0, 58, 30, 31, 39, 42, 60, 33, 59, 68, 67, 61, 78, 48, 0, 58, 30, 31, 39, 42, 60, 33, 59, 68, 57, 61, 75, 69, 0, 58, 30, 31, 39, 42, 60, 33, 59, 68, 57, 61, 52, 69, 0, 58, 30, 31, 39, 42, 60, 33, 43, 52, 32, 35, 34, 24, 0, 58, 30, 31, 39, 42, 60, 33, 32, 38, 47, 23, 59, 68, 0, 58, 30, 31, 39, 42, 60, 33, 21, 52, 0, 58, 30, 31, 39, 42, 59, 29, 21, 32, 22, 48, 38, 37, 0, 58, 30, 31, 39, 42, 59, 29, 22, 32, 0, 58, 30, 31, 39, 42, 59, 29, 23, 32, 0, 58, 30, 31, 39, 42, 32, 33, 43, 34, 0, 58, 30, 31, 39, 42, 32, 33, 59, 57, 0, 58, 30, 31, 39, 29, 48, 38, 56, 0, 58, 30, 31, 39, 29, 48, 57, 47, 0, 58, 30, 31, 39, 33, 42, 47, 38, 0, 58, 30, 31, 39, 33, 42, 34, 32, 0, 58, 30, 31, 39, 33, 42, 29, 22, 0, 58, 30, 31, 57, 42, 0, 58, 30, 42, 60, 31, 33, 0, 58, 30, 42, 60, 33, 31, 0, 58, 30, 42, 60, 52, 59, 0, 58, 30, 52, 57, 56, 59, 0, 58, 30, 52, 57, 48, 39, 0, 58, 30, 52, 57, 31, 59, 0, 58, 30, 52, 57, 32, 59, 0, 58, 30, 33, 42, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 52, 30, 38, 23, 47, 22, 66, 56, 21, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 52, 30, 38, 23, 47, 22, 66, 61, 33, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 52, 30, 38, 23, 47, 22, 66, 29, 33, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 52, 30, 38, 23, 47, 22, 69, 68, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 52, 30, 38, 23, 47, 61, 24, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 52, 30, 38, 23, 29, 61, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 52, 30, 38, 29, 47, 46, 37, 28, 56, 55, 69, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 52, 30, 38, 29, 47, 23, 33, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 52, 30, 38, 22, 23, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 52, 30, 69, 22, 68, 24, 14, 33, 75, 35, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 52, 30, 69, 22, 68, 24, 14, 33, 23, 13, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 52, 30, 69, 22, 68, 24, 75, 33, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 52, 30, 69, 22, 68, 24, 23, 15, 75, 33, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 38, 29, 56, 30, 47, 55, 52, 46, 37, 28, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 38, 29, 52, 30, 47, 23, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 38, 29, 47, 37, 55, 28, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 68, 30, 43, 52, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 68, 30, 52, 61, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 39, 61, 52, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 34, 47, 68, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 43, 39, 52, 30, 69, 22, 68, 24, 23, 33, 12, 15, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 43, 39, 52, 30, 69, 22, 68, 24, 75, 33, 66, 76, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 43, 39, 52, 30, 69, 22, 12, 23, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 43, 39, 52, 30, 38, 23, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 43, 39, 61, 52, 68, 78, 69, 62, 53, 30, 71, 34, 33, 35, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 43, 39, 38, 34, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 68, 66, 39, 33, 76, 75, 69, 23, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 68, 66, 56, 46, 0, 58, 48, 42, 32, 57, 31, 60, 59, 67, 61, 52, 0, 58, 48, 42, 32, 57, 31, 60, 59, 69, 68, 0, 58, 48, 42, 32, 57, 31, 60, 59, 33, 39, 0, 58, 48, 42, 32, 57, 31, 60, 43, 39, 0, 58, 48, 42, 32, 57, 31, 33, 43, 23, 22, 34, 52, 0, 58, 48, 42, 32, 57, 31, 33, 43, 23, 22, 61, 59, 0, 58, 48, 42, 32, 57, 31, 33, 43, 52, 60, 0, 58, 48, 42, 32, 57, 31, 33, 43, 39, 59, 0, 58, 48, 42, 32, 57, 31, 52, 59, 60, 34, 0, 58, 48, 42, 32, 57, 31, 23, 43, 0, 58, 48, 42, 32, 57, 31, 47, 33, 0, 58, 48, 42, 32, 57, 59, 69, 67, 77, 75, 66, 0, 58, 48, 42, 32, 57, 59, 69, 68, 60, 67, 76, 78, 75, 0, 58, 48, 42, 32, 57, 59, 69, 33, 39, 0, 58, 48, 42, 32, 57, 59, 69, 43, 39, 0, 58, 48, 42, 32, 57, 33, 30, 31, 39, 29, 21, 38, 22, 23, 61, 0, 58, 48, 42, 32, 57, 33, 30, 31, 39, 38, 29, 0, 58, 48, 42, 32, 57, 60, 59, 31, 33, 0, 58, 48, 42, 32, 57, 67, 59, 0, 58, 48, 42, 32, 60, 33, 39, 31, 23, 38, 0, 58, 48, 42, 32, 60, 33, 39, 31, 59, 30, 0, 58, 48, 42, 32, 60, 33, 23, 31, 0, 58, 48, 42, 32, 31, 59, 52, 57, 0, 58, 48, 42, 32, 31, 59, 61, 57, 0, 58, 48, 42, 32, 39, 59, 57, 31, 33, 43, 0, 58, 48, 42, 31, 32, 43, 34, 59, 39, 0, 58, 48, 42, 31, 32, 43, 34, 23, 60, 0, 58, 48, 42, 31, 32, 60, 59, 69, 30, 0, 58, 48, 42, 31, 32, 60, 59, 24, 57, 0, 58, 48, 42, 31, 32, 67, 39, 0, 58, 48, 42, 33, 32, 39, 31, 57, 43, 0, 58, 48, 42, 33, 32, 22, 23, 13, 43, 0, 58, 48, 42, 33, 32, 48, 31, 0, 58, 48, 42, 67, 66, 68, 56, 38, 57, 0, 58, 48, 42, 68, 57, 66, 52, 32, 67, 0, 58, 48, 60, 59, 42, 57, 0, 58, 48, 60, 59, 56, 57, 0, 58, 48, 60, 59, 38, 47, 0, 58, 39, 31, 48, 42, 32, 33, 21, 38, 47, 22, 0, 58, 39, 31, 48, 42, 32, 33, 21, 38, 29, 30, 0, 58, 39, 31, 48, 42, 32, 33, 43, 61, 0, 58, 39, 31, 48, 42, 22, 60, 0, 58, 39, 31, 59, 42, 32, 33, 30, 48, 22, 38, 0, 58, 39, 52, 57, 31, 59, 48, 42, 0, 58, 39, 52, 57, 48, 67, 31, 38, 30, 32, 0, 58, 39, 52, 57, 56, 61, 0, 58, 39, 42, 48, 31, 59, 0, 58, 39, 42, 48, 60, 52, 0, 58, 57, 42, 59, 48, 47, 61, 31, 68, 0, 58, 57, 42, 59, 48, 32, 33, 30, 31, 0, 58, 57, 42, 59, 48, 32, 33, 31, 39, 0, 58, 57, 42, 31, 32, 0, 58, 57, 42, 33, 48, 39, 31, 32, 30, 0, 58, 66, 42, 0, 60, 59, 42, 32, 48, 52, 33, 43, 61, 34, 58, 69, 53, 44, 35, 68, 0, 60, 59, 42, 32, 48, 52, 33, 43, 61, 34, 58, 69, 53, 68, 35, 0, 60, 59, 42, 32, 48, 52, 33, 43, 61, 34, 58, 69, 44, 31, 0, 60, 59, 42, 32, 48, 52, 33, 61, 67, 0, 60, 59, 42, 32, 48, 52, 34, 43, 33, 61, 31, 24, 44, 23, 62, 57, 22, 47, 69, 53, 0, 60, 59, 42, 32, 48, 52, 34, 43, 33, 61, 31, 24, 44, 23, 22, 53, 0, 60, 59, 42, 32, 48, 52, 34, 43, 33, 61, 44, 24, 0, 60, 59, 42, 32, 48, 52, 34, 43, 58, 69, 0, 60, 59, 42, 32, 48, 52, 31, 58, 69, 61, 0, 60, 59, 42, 32, 48, 52, 31, 58, 43, 39, 0, 60, 59, 42, 32, 48, 52, 58, 61, 33, 31, 0, 60, 59, 42, 32, 48, 52, 58, 61, 43, 31, 0, 60, 59, 42, 32, 48, 52, 43, 61, 53, 33, 0, 60, 59, 42, 32, 48, 39, 68, 47, 23, 24, 22, 33, 43, 52, 58, 35, 31, 57, 29, 0, 60, 59, 42, 32, 48, 39, 68, 47, 23, 24, 22, 33, 43, 52, 58, 34, 31, 30, 56, 0, 60, 59, 42, 32, 48, 39, 68, 47, 23, 33, 24, 52, 43, 61, 58, 35, 53, 0, 60, 59, 42, 32, 48, 39, 68, 47, 23, 33, 24, 43, 52, 0, 60, 59, 42, 32, 48, 39, 68, 47, 23, 52, 43, 0, 60, 59, 42, 32, 48, 39, 68, 43, 33, 34, 31, 58, 47, 30, 57, 0, 60, 59, 42, 32, 48, 39, 68, 43, 33, 52, 31, 21, 62, 0, 60, 59, 42, 32, 48, 39, 68, 43, 33, 52, 31, 67, 61, 0, 60, 59, 42, 32, 48, 39, 68, 57, 23, 33, 24, 0, 60, 59, 42, 32, 48, 39, 68, 57, 23, 24, 22, 33, 34, 0, 60, 59, 42, 32, 48, 39, 68, 52, 43, 0, 60, 59, 42, 32, 48, 39, 68, 69, 58, 0, 60, 59, 42, 32, 48, 39, 68, 61, 52, 0, 60, 59, 42, 32, 48, 57, 31, 33, 68, 0, 60, 59, 42, 32, 58, 39, 33, 43, 23, 24, 0, 60, 59, 42, 32, 58, 39, 23, 67, 57, 69, 0, 60, 59, 42, 32, 31, 33, 48, 39, 0, 60, 59, 42, 32, 31, 33, 22, 52, 0, 60, 59, 42, 32, 67, 43, 0, 60, 59, 42, 52, 68, 69, 53, 43, 44, 32, 58, 33, 0, 60, 59, 42, 52, 68, 69, 53, 43, 61, 32, 33, 34, 0, 60, 59, 42, 52, 68, 69, 53, 32, 31, 43, 44, 33, 24, 0, 60, 59, 42, 52, 68, 69, 53, 32, 31, 43, 44, 34, 33, 0, 60, 59, 42, 52, 68, 69, 53, 32, 31, 33, 58, 0, 60, 59, 42, 52, 68, 69, 53, 32, 31, 34, 33, 0, 60, 59, 42, 52, 68, 69, 53, 31, 57, 67, 39, 43, 44, 32, 33, 58, 48, 0, 60, 59, 42, 52, 68, 69, 53, 31, 57, 32, 58, 0, 60, 59, 42, 52, 68, 69, 53, 77, 48, 43, 44, 0, 60, 59, 42, 52, 68, 69, 48, 33, 34, 35, 53, 43, 44, 58, 0, 60, 59, 42, 52, 68, 69, 48, 33, 43, 34, 0, 60, 59, 42, 52, 68, 69, 61, 53, 48, 76, 0, 60, 59, 42, 52, 68, 69, 58, 77, 0, 60, 59, 42, 52, 68, 69, 62, 44, 0, 60, 59, 42, 52, 68, 32, 61, 33, 58, 69, 31, 0, 60, 59, 42, 52, 68, 32, 61, 58, 39, 48, 33, 0, 60, 59, 42, 52, 68, 32, 61, 58, 39, 31, 48, 0, 60, 59, 42, 52, 68, 32, 61, 31, 48, 58, 39, 0, 60, 59, 42, 52, 68, 67, 58, 0, 60, 59, 42, 52, 58, 68, 43, 33, 53, 32, 31, 62, 0, 60, 59, 42, 52, 61, 43, 68, 69, 53, 32, 0, 60, 59, 42, 52, 61, 43, 62, 53, 0, 60, 59, 42, 52, 62, 61, 48, 43, 0, 60, 59, 42, 52, 44, 61, 48, 31, 0, 60, 59, 42, 52, 57, 61, 58, 48, 0, 60, 59, 42, 30, 58, 33, 48, 43, 34, 68, 67, 57, 0, 60, 59, 42, 30, 58, 33, 48, 43, 34, 68, 69, 52, 0, 60, 59, 42, 30, 58, 33, 48, 43, 34, 35, 39, 0, 60, 59, 42, 30, 58, 33, 48, 43, 34, 61, 39, 0, 60, 59, 42, 30, 58, 33, 48, 43, 35, 53, 34, 57, 0, 60, 59, 42, 30, 58, 33, 39, 48, 38, 46, 28, 57, 47, 55, 56, 52, 32, 29, 0, 60, 59, 42, 30, 58, 33, 39, 48, 38, 46, 28, 57, 56, 55, 32, 31, 0, 60, 59, 42, 30, 58, 33, 39, 48, 38, 46, 28, 57, 29, 52, 32, 31, 0, 60, 59, 42, 30, 58, 33, 39, 48, 56, 43, 0, 60, 59, 42, 30, 58, 33, 32, 31, 57, 43, 0, 60, 59, 42, 30, 58, 33, 32, 31, 48, 43, 0, 60, 59, 42, 30, 67, 33, 58, 52, 43, 32, 61, 68, 34, 69, 78, 77, 76, 75, 74, 70, 0, 60, 59, 42, 30, 67, 33, 58, 52, 43, 32, 34, 44, 35, 53, 0, 60, 59, 42, 30, 67, 33, 58, 52, 43, 32, 53, 68, 34, 61, 0, 60, 59, 42, 30, 67, 33, 58, 52, 43, 32, 23, 68, 0, 60, 59, 42, 30, 67, 33, 58, 52, 32, 43, 39, 31, 22, 69, 0, 60, 59, 42, 30, 67, 33, 58, 52, 32, 43, 34, 22, 0, 60, 59, 42, 30, 39, 31, 48, 32, 0, 60, 59, 42, 30, 39, 31, 57, 32, 0, 60, 59, 42, 30, 68, 33, 32, 31, 23, 52, 0, 60, 59, 42, 30, 48, 39, 0, 60, 59, 42, 30, 57, 58, 0, 60, 59, 42, 61, 48, 43, 52, 32, 33, 24, 22, 0, 60, 59, 42, 61, 48, 43, 52, 33, 32, 39, 34, 53, 69, 68, 31, 21, 38, 22, 58, 0, 60, 59, 42, 61, 48, 43, 52, 33, 32, 39, 34, 53, 69, 22, 68, 0, 60, 59, 42, 61, 48, 43, 52, 33, 32, 53, 24, 31, 30, 0, 60, 59, 42, 61, 48, 43, 52, 44, 35, 26, 62, 0, 60, 59, 42, 61, 48, 43, 52, 44, 35, 33, 53, 32, 31, 0, 60, 59, 42, 61, 48, 33, 43, 0, 60, 59, 42, 61, 58, 32, 33, 43, 52, 31, 23, 48, 0, 60, 59, 42, 61, 58, 32, 33, 43, 31, 34, 0, 60, 59, 42, 61, 58, 32, 31, 43, 33, 34, 0, 60, 59, 42, 61, 57, 48, 0, 60, 59, 42, 61, 69, 52, 53, 62, 0, 60, 59, 42, 61, 68, 58, 0, 60, 59, 42, 33, 48, 57, 32, 0, 60, 59, 42, 33, 48, 39, 68, 0, 60, 59, 42, 33, 48, 69, 43, 0, 60, 59, 42, 31, 58, 0, 60, 59, 42, 34, 33, 0, 60, 59, 42, 70, 57, 0, 60, 59, 42, 43, 68, 0, 60, 39, 52, 59, 58, 0, 60, 31, 42, 59, 58, 0, 60, 69, 42, 0, 42, 32, 60, 31, 48, 58, 39, 59, 0, 42, 32, 60, 31, 48, 58, 23, 33, 0, 42, 32, 60, 31, 39, 33, 59, 43, 0, 42, 32, 60, 31, 39, 33, 48, 59, 0, 42, 32, 60, 31, 30, 39, 22, 59, 0, 42, 32, 60, 31, 21, 33, 30, 59, 0, 42, 32, 60, 31, 22, 23, 30, 39, 0, 42, 32, 60, 31, 22, 23, 24, 14, 0, 42, 32, 60, 31, 23, 33, 43, 59, 0, 42, 32, 60, 31, 23, 33, 39, 22, 0, 42, 32, 58, 33, 43, 59, 52, 60, 0, 42, 32, 58, 33, 23, 31, 43, 24, 0, 42, 32, 58, 33, 52, 60, 43, 59, 0, 42, 32, 58, 33, 34, 43, 44, 52, 0, 42, 32, 58, 33, 24, 23, 14, 15, 0, 42, 32, 24, 23, 60, 31, 14, 33, 0, 42, 32, 24, 23, 58, 33, 14, 15, 0, 42, 32, 24, 23, 22, 33, 43, 31, 0, 42, 32, 22, 23, 60, 31, 14, 33, 0, 42, 32, 22, 23, 58, 33, 14, 31, 0, 42, 32, 22, 23, 24, 33, 43, 31, 0 }; ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Met dans 'DebutCoup' le numéro de chaque ouverture dans 'Bibli' ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// void init_bibli(void) { short n = 0; char *ptr = Bibli; while (n < TAILLE_BIBLI) { DebutCoup[n++] = ptr; while (*ptr++) ; } } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Transforme le numéro d'une caze par symétrie suivant le premier coup de la partie joué ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// short adapt_symetrie(short caze) { short x = caze % 9, y = caze / 9; switch (Sav[0]) { case 59: return 9 * x + y; case 31: return 9 * (9 - x) + (9 - y); case 39: return 9 * (9 - y) + (9 - x); } return caze; } ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Regarde s'il n'y a pas une ligne de la bibiothèque d'ouvertures qui convient et dans ce cas, renvoie le coup à jouer ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// short get_coup_bibli(void) { short i, nbre = 0, special = 0, limite = NbrePions - 5; char tampon[59]; short jouable[TAILLE_BIBLI]; if (NbrePions > 27) return 0; if (NbrePions == 5) return adapt_symetrie(58); // Après F5, joue toujours D7 if (Bib == 0) return 0; for (i = 0; i < limite; i++) tampon[i] = adapt_symetrie(abs(Sav[i + 1])); // Ramène la position à un démarage en F5 if (tampon[0] == 60 && tampon[1] == 59 && tampon[2] == 58) // Début F5 F6 E6 D6..., symétrique de F5 F6 E6 F4... { for (i = 2; i < limite; i++) tampon[i] = 9 * (tampon[i] % 9) + (tampon[i] / 9); special = 1; } if (tampon[1] == 39 && tampon[2] == 31 && tampon[3] == 30) // Début F5 D6 C4 D3 C3, même chose que F5 D6 C3 D3 C4... { tampon[1] = 30; tampon[3] = 39; } for (i = 0; i < TAILLE_BIBLI; i++) // Compare l'ouverture à toutes les lignes de la bibliothèque if (memcmp(tampon, DebutCoup[i], limite) == 0) if (*(DebutCoup[i] + limite) != 0) jouable[nbre++] = i; if (nbre == 0) return 0; i = adapt_symetrie(*(DebutCoup[jouable[random(nbre)]] + limite)); // Continue une ouverture choisie au hasard if (special == 1) return 9 * (i % 9) + (i / 9); return i; }