-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathperft.c
More file actions
executable file
·89 lines (67 loc) · 2.97 KB
/
Copy pathperft.c
File metadata and controls
executable file
·89 lines (67 loc) · 2.97 KB
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
/*
Mango AC Ajedrez 1.0
Licencia: GPLv3
Copyright (c) 2012-2013 - Mango Computer c.a
El programa Mango AC Ajedrez está basado en la investigación de Jose Andres Morales Linares.
Nadie debería verse restringido por el software que utiliza. Hay cuatro libertades que cada usuario debe tener:
* La libertad de usar el programa para cualquier propósito.
* La libertad de cambiar el software para satisfacer sus necesidades.
* La libertad de compartir el software con amigos y vecinos.
* La libertad de compartir los cambios que realice.
Cuando un programa ofrece a los usuarios todas estas libertades, lo llamamos software libre.
Winglet es un motor de ajedrez de código abierto basado en bitboards. El programa es software libre. Usted puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia o (a su elección) cualquier versión posterior. El programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía implícita de COMERCIALIZACIÓN o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulte la Licencia Pública General de GNU para más detalles: http://www.gnu.org/licenses/
Existen muchos avances en la forma de escribir motores de ajedrez. Estos dos sitios web
fueron de gran ayuda durante el proceso de investigación y desarrollo:
* http://chessprogramming.wikispaces.com
* http://www.sluijten.com/winglet/
Información de contacto:
comprasmangocomputer@gmail.com
*/
#ifndef PERFT_C
#define PERFT_C
uint64 perft(int capa, int profundidad)
{
uint64 numNodos = 0;
int i, contMov=0;
BOOLEANO esJaque;
if (profundidad == 0)
{
return 1;
}
juego.Buffer_MOV_INDEXCAPAS[capa+1] = generarTodosMov(juego.Buffer_MOV_INDEXCAPAS[capa]);
for (i = juego.Buffer_MOV_INDEXCAPAS[capa]; i < juego.Buffer_MOV_INDEXCAPAS[capa+1]; i++)
{
hacerMovimiento(juego.Buffer_MOV[i]);
if (juego.colorTurno) // Si le toca al negro, se comprueba que el rey blanco no haya quedado en jaque
{
esJaque = esAtacadoPor(juego.tablero[BLANCO][REY], NEGRO);
} else {
esJaque = esAtacadoPor(juego.tablero[NEGRO][REY], BLANCO);
}
if (!esJaque)
{
contMov++;
numNodos += perft(capa + 1, profundidad-1);
if (profundidad == 1)
{
//*
if (ES_MOV_CAPTURA(juego.Buffer_MOV[i])) DataPerft.InvCaptura++;
if (ES_MOV_CAPT_PEON_PASO(juego.Buffer_MOV[i])) DataPerft.InvPeonPaso++;
if (ES_MOV_PROMOCION(juego.Buffer_MOV[i])) DataPerft.InvPromocion++;
if (ES_MOV_OO(juego.Buffer_MOV[i])) DataPerft.InvEnroqueOO++;
if (ES_MOV_OOO(juego.Buffer_MOV[i])) DataPerft.InvEnroqueOOO++;
if (!juego.colorTurno)
{
esJaque = esAtacadoPor(juego.tablero[BLANCO][REY], NEGRO);
} else {
esJaque = esAtacadoPor(juego.tablero[NEGRO][REY], BLANCO);
}
if (esJaque) DataPerft.InvJaqueContrario++;
//*/
}
}
desHacerMovimiento(juego.Buffer_MOV[i]);
}
return numNodos;
}
#endif