/*************************************************************************** * _ _ * * /_\ Chess Board Engine /_\ * * \_/ ------------------- \_/ * * /_\ Based on Rules /_\ * * |_| ------------------- |_| * * /___\ GNU GPL Version 2 /___\ * * * ***************************************************************************/ /* Header Files */ #include "engine.h" /* Rule */ #define O (1<<1) #define x (1<<2) /* White */ #define p (1<<8) #define n (1<<7) #define b (1<<6) #define r (1<<5) #define q (1<<4) #define k (1<<3) /* Black */ #define P (1<<8) #define N (1<<7) #define B (1<<6) #define R (1<<5) #define Q (1<<4) #define K (1<<3) /* Secure */ #define SELECT #define INSERT /* DEC */ #define SETUP 33 /*---------------------------------------------------------------------------*/ /* Window */ static WINDOW *winB; static WINDOW *winE; static WINDOW *winF; /* Material */ int ebit[E] = {'1','0','0','0','1','0','1','1','1','0',0}; int sbit[E] = { 8, 5, 2, 4, 7, 6, 1, 3, 0,0}; int fbit[E] = { 0, 4, 3, 2, 1, 1, 2, 3, 4,0}; /* Variables */ char matrix[H][C2][C2][C2]; char amove[100]; /*---------------------------------------------------------------------------*/ /* Circle */ int circ[H][A] = { {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0}, {0x00,0xDF,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0x00,0}, {0x00,0xDE,0xC3,0xB0,0xB1,0xB2,0xB3,0xB4,0xCB,0x00,0}, {0x00,0xDD,0xC2,0xAF,0xA4,0xA5,0xA6,0xB5,0xCC,0x00,0}, {0x00,0xDC,0xC1,0xAE,0xA3,0xA0,0xA7,0xB6,0xCD,0x00,0}, {0x00,0xDB,0xC0,0xAD,0xA2,0xA1,0xA8,0xB7,0xCE,0x00,0}, {0x00,0xDA,0xBF,0xAC,0xAB,0xAA,0xA9,0xB8,0xCF,0x00,0}, {0x00,0xD9,0xBE,0xBD,0xBC,0xBB,0xBA,0xB9,0xD0,0x00,0}, {0x00,0xD8,0xD7,0xD6,0xD5,0xD4,0xD3,0xD2,0xD1,0x00,0}, {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0}}; /* Engine Array */ char cengine[H][A][E][C2] = { {{{' ',9},{'8',9},{'7',9},{'6',9},{'5',9},{'4',9},{'3',9},{'2',9},{'1',9},{' ',9},{0,0}}}, {{{'a',9},{'R',1},{'P',2},{' ',2},{' ',1},{' ',1},{' ',2},{'p',2},{'r',1},{'a',9},{0,0}}}, {{{'b',9},{'N',2},{'P',1},{' ',1},{' ',2},{' ',2},{' ',1},{'p',1},{'n',2},{'b',9},{0,0}}}, {{{'c',9},{'B',2},{'P',1},{' ',1},{' ',2},{' ',2},{' ',1},{'p',1},{'b',2},{'c',9},{0,0}}}, {{{'d',9},{'Q',1},{'P',2},{' ',2},{' ',1},{' ',1},{' ',2},{'p',2},{'q',1},{'d',9},{0,0}}}, {{{'e',9},{'K',1},{'P',2},{' ',2},{' ',1},{' ',1},{' ',2},{'p',2},{'k',1},{'e',9},{0,0}}}, {{{'f',9},{'B',2},{'P',1},{' ',1},{' ',2},{' ',2},{' ',1},{'p',1},{'b',2},{'f',9},{0,0}}}, {{{'g',9},{'N',2},{'P',1},{' ',1},{' ',2},{' ',2},{' ',1},{'p',1},{'n',2},{'g',9},{0,0}}}, {{{'h',9},{'R',1},{'P',2},{' ',2},{' ',1},{' ',1},{' ',2},{'p',2},{'r',1},{'h',9},{0,0}}}, {{{' ',9},{'8',9},{'7',9},{'6',9},{'5',9},{'4',9},{'3',9},{'2',9},{'1',9},{' ',9},{0,0}}}}; /* Chess Board Array */ char fengine[H][A][C2] = { {{' ',9},{'8',9},{'7',9},{'6',9},{'5',9},{'4',9},{'3',9},{'2',9},{'1',9},{' ',9},{0,0}}, {{'a',9},{' ',1},{' ',2},{' ',2},{' ',1},{' ',1},{' ',2},{' ',2},{' ',1},{'a',9},{0,0}}, {{'b',9},{' ',2},{' ',1},{' ',1},{' ',2},{' ',2},{' ',1},{' ',1},{' ',2},{'b',9},{0,0}}, {{'c',9},{' ',2},{' ',1},{' ',1},{' ',2},{' ',2},{' ',1},{' ',1},{' ',2},{'c',9},{0,0}}, {{'d',9},{' ',1},{' ',2},{' ',2},{' ',1},{' ',1},{' ',2},{' ',2},{' ',1},{'d',9},{0,0}}, {{'e',9},{' ',1},{' ',2},{' ',2},{' ',1},{' ',1},{' ',2},{' ',2},{' ',1},{'e',9},{0,0}}, {{'f',9},{' ',2},{' ',1},{' ',1},{' ',2},{' ',2},{' ',1},{' ',1},{' ',2},{'f',9},{0,0}}, {{'g',9},{' ',2},{' ',1},{' ',1},{' ',2},{' ',2},{' ',1},{' ',1},{' ',2},{'g',9},{0,0}}, {{'h',9},{' ',1},{' ',2},{' ',2},{' ',1},{' ',1},{' ',2},{' ',2},{' ',1},{'h',9},{0,0}}, {{' ',9},{'8',9},{'7',9},{'6',9},{'5',9},{'4',9},{'3',9},{'2',9},{'1',9},{' ',9},{0,0}}}; /* Chess Engine Array */ char ce[H][A] = { {' ','8','7','6','5','4','3','2','1',' ',0}, {'a','R','P','-','-','-','-','p','r','a',0}, {'b','N','P','-','-','-','-','p','n','b',0}, {'c','B','P','-','-','-','-','p','b','c',0}, {'d','Q','P','-','-','-','-','p','q','d',0}, {'e','K','P','-','-','-','-','p','k','e',0}, {'f','B','P','-','-','-','-','p','b','f',0}, {'g','N','P','-','-','-','-','p','n','g',0}, {'h','R','P','-','-','-','-','p','r','h',0}, {' ','8','7','6','5','4','3','2','1',' ',0}}; /* Decision Matrix */ unsigned int dec[SETUP][SETUP] = { {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0}, {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0}, {0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1,0}, {0,0,0,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0}, {0,0,0,1,0,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0}, {0,0,0,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0}, {0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}, {0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}}; /*---------------------------------------------------------------------------*/ /* Variables */ int A1, A2, O1; /* Formel */ void formel(int nr,int ra) { /* Values */ int a1, b1; float PI = 3.14159265358979323846; /* Formel */ a1 = (360 / nr); b1 = (PI * ra * a1) / 180; A1 = (b1 * ra) / 2; A2 = (PI * (ra * ra) * a1) / 360; O1 = 4 * PI * (ra * ra); /* Control Radius */ /*wmove(winE,7,30);*/ /*wprintw(winE,"a:%3d b:%3d A:%3d A:%3d O:%3d", a1, b1, A1, A2, O1);*/ } /*---------------------------------------------------------------------------*/ /* Engine */ void engine(int *ES,int *FE) { /* Engine Time */ unsigned int usecs = 15000; /* Calculation */ char gmove[10]; char emove[10]; int S1 = 0; int S2 = 0; int F1, F2, T1, T2; /* Move */ F1 = FE[1]; F2 = FE[2]; T1 = FE[3]; T2 = FE[4]; /* a - h */ gmove[1] = 'a'; gmove[2] = 'b'; gmove[3] = 'c'; gmove[4] = 'd'; gmove[5] = 'e'; gmove[6] = 'f'; gmove[7] = 'g'; gmove[8] = 'h'; /* 1 - 8 */ emove[1] = '1'; emove[2] = '2'; emove[3] = '3'; emove[4] = '4'; emove[5] = '5'; emove[6] = '6'; emove[7] = '7'; emove[8] = '8'; /*-------------------------------------------------------------------*/ /* Calculation */ if(((S1 = -F1 + T1) && (S2 = -F2 + T2)) && ((S1 = +F1 + T1) && (S2 = -F2 + T2)) && ((S1 = -F1 + T1) && (S2 = +F2 + T2)) && ((S1 = +F1 + T1) && (S2 = +F2 + T2))) { /* Direction */ if(((S1 >= C1) && (S1 <= C8)) && ((S2 >= C1) && (S2 <= C8))) { /* Pyramide */ if(((fbit[S1] >= C1) && (fbit[S1] <= C8)) && ((fbit[S2] >= C1) && (fbit[S2] <= C8))) { /* Circle 160/175/223 */ if((circ[S1][S2] >= 160) && (circ[S1][S2] <= 223)) { /*-------------------------------------------------------------------*/ /* Position */ amove[0] = gmove[F1]; amove[1] = emove[F2]; amove[2] = gmove[S1]; amove[3] = emove[S2]; /* Move Info */ wmove(winE,7,19); /*wprintw(winE,"[%c%c/%c%c] %3d",amove[0],amove[1],amove[2],amove[3],circ[S1][S2]);*/ wprintw(winE,"[%c%c/%c%c] %d%d",amove[0],amove[1],amove[2],amove[3],fbit[S1],fbit[S2]); wrefresh(winE); /* Wait Time */ usleep(usecs); }}}} } /*---------------------------------------------------------------------------*/ /* King */ void king(int *ES,int *FE) { int T1, T2; T1 = FE[3]; T2 = FE[4]; if(((T1 >= -1) && (T1 <= 1)) && ((T2 >= -1) && (T2 <= 1)) && ((T1 != 0) || (T2 != 0))) { engine(ES,FE); } } /*---------------------------------------------------------------------------*/ /* Queen */ void queen(int *ES,int *FE) { int T1, T2; T1 = FE[3]; T2 = FE[4]; if((((T1 == 0) || (T2 == 0)) && ((T1 != 0) || (T2 != 0)))) { engine(ES,FE); } if((((T1 == T2) || ((T1 + T2) == 0))) && ((T1 != 0) || (T2 != 0))) { engine(ES,FE); } } /*---------------------------------------------------------------------------*/ /* Turm */ void turm(int *ES,int *FE) { int T1, T2; T1 = FE[3]; T2 = FE[4]; if((((T1 == 0) || (T2 == 0)) && ((T1 != 0) || (T2 != 0)))) { engine(ES,FE); } } /*---------------------------------------------------------------------------*/ /* Bishop */ void bishop(int *ES,int *FE) { int T1, T2; T1 = FE[3]; T2 = FE[4]; if((((T1 == T2) || ((T1 + T2) == 0))) && ((T1 != 0) || (T2 != 0))) { engine(ES,FE); } } /*---------------------------------------------------------------------------*/ /* Springer */ void springer(int *ES,int *FE) { int T1, T2; T1 = FE[3]; T2 = FE[4]; if((((T2 == -2) || (T2 == +2)) && ((T1 == -1) || (T1 == +1)))) { engine(ES,FE); } if((((T1 == -2) || (T1 == +2)) && ((T2 == -1) || (T2 == +1)))) { engine(ES,FE); } } /*---------------------------------------------------------------------------*/ /* People B */ void peopleB(int *ES,int *FE) { int T1, T2; T1 = FE[3]; T2 = FE[4]; if(((T1 == 0)) && (T2 == -2) && ((T1 != 0) || (T2 != 0))) { engine(ES,FE); } if(((T1 >= -1) && (T1 <= +1)) && (T2 == -1) && ((T1 != 0) || (T2 != 0))) { engine(ES,FE); } } /*---------------------------------------------------------------------------*/ /* People W */ void peopleW(int *ES,int *FE) { int T1, T2; T1 = FE[3]; T2 = FE[4]; if(((T1 == 0)) && (T2 == +2) && ((T1 != 0) || (T2 != 0))) { engine(ES,FE); } if(((T1 >= -1) && (T1 <= +1)) && (T2 == +1) && ((T1 != 0) || (T2 != 0))) { engine(ES,FE); } } /*---------------------------------------------------------------------------*/ /* Squares */ void squares(int *ES, int *FE, int *sbit, char *player) { int F1, F2; /* 64 Squares */ for(F2 = C8; F2 >= C1; F2--) { for(F1 = C1; F1 <= C8; F1++) { /* Circle 160/175/223 */ if((circ[F1][F2] >= 160) && (circ[F1][F2] <= 223)) { wmove(winF, 0, 0); wattrset(winF,A_BOLD|COLOR_PAIR(7)); wprintw(winF," %d ", fengine[F1][F2][1]); wrefresh(winF); /* Formel */ formel(F1,F2); /* Squares */ FE[1] = F1; FE[2] = F2; /* Diagonal */ diagonal(ES, FE, sbit, player); } }} } /*---------------------------------------------------------------------------*/ /* Diagonal */ void diagonal(int *ES, int *FE, int *sbit, char *player) { int T1, T2; /* Possibility */ for(T2 = D; T2 <= C; T2++) { for(T1 = C; T1 >= D; T1--) { /* Move */ FE[3] = T1; FE[4] = T2; /* Circle */ circle(ES, FE, sbit, player); }} } /*---------------------------------------------------------------------------*/ /* Circle */ void circle(int *ES, int *FE, int *sbit, char *player) { /* Variables */ int E2, E4, E6, F1, F2; int G1, G2, G3, G4, G5, G6, G7, G8; /* Result */ G1 = sbit[0]; G2 = sbit[1]; G3 = sbit[2]; G4 = sbit[3]; G5 = sbit[4]; G6 = sbit[5]; G7 = sbit[6]; G8 = sbit[7]; /* Array */ E2 = ES[2]; E4 = ES[4]; E6 = ES[6]; /* Square */ F1 = FE[1]; F2 = FE[2]; /*-------------------------------------------------------------------*/ if(player[1]) { /* White */ cengine[5][1][1][C0] = '0'; cengine[5][1][2][C0] = '+'; cengine[8][1][5][C0] = 'r'; cengine[7][1][7][C0] = 'n'; cengine[6][1][6][C0] = 'b'; cengine[5][1][3][C0] = 'k'; cengine[4][1][4][C0] = 'q'; cengine[3][1][6][C0] = 'b'; cengine[2][1][7][C0] = 'n'; cengine[1][1][5][C0] = 'r'; cengine[8][2][8][C0] = 'p'; cengine[7][2][8][C0] = 'p'; cengine[6][2][8][C0] = 'p'; cengine[5][2][8][C0] = 'p'; cengine[4][2][8][C0] = 'p'; cengine[3][2][8][C0] = 'p'; cengine[2][2][8][C0] = 'p'; cengine[1][2][8][C0] = 'p'; /* Black */ cengine[5][8][1][C1] = '0'; cengine[5][8][2][C1] = '+'; cengine[8][8][5][C1] = 'R'; cengine[7][8][7][C1] = 'N'; cengine[6][8][6][C1] = 'B'; cengine[5][8][3][C1] = 'K'; cengine[4][8][4][C1] = 'Q'; cengine[3][8][6][C1] = 'B'; cengine[2][8][7][C1] = 'N'; cengine[1][8][5][C1] = 'R'; cengine[8][7][8][C1] = 'P'; cengine[7][7][8][C1] = 'P'; cengine[6][7][8][C1] = 'P'; cengine[5][7][8][C1] = 'P'; cengine[4][7][8][C1] = 'P'; cengine[3][7][8][C1] = 'P'; cengine[2][7][8][C1] = 'P'; cengine[1][7][8][C1] = 'P'; } /*-------------------------------------------------------------------*/ if(player[8]) { /* White */ cengine[5][1][1][C1] = '0'; cengine[5][1][2][C1] = '+'; cengine[8][1][5][C1] = 'r'; cengine[7][1][7][C1] = 'n'; cengine[6][1][6][C1] = 'b'; cengine[5][1][3][C1] = 'k'; cengine[4][1][4][C1] = 'q'; cengine[3][1][6][C1] = 'b'; cengine[2][1][7][C1] = 'n'; cengine[1][1][5][C1] = 'r'; cengine[8][2][8][C1] = 'p'; cengine[7][2][8][C1] = 'p'; cengine[6][2][8][C1] = 'p'; cengine[5][2][8][C1] = 'p'; cengine[4][2][8][C1] = 'p'; cengine[3][2][8][C1] = 'p'; cengine[2][2][8][C1] = 'p'; cengine[1][2][8][C1] = 'p'; /* Black */ cengine[5][8][1][C0] = '0'; cengine[5][8][2][C0] = '+'; cengine[8][8][5][C0] = 'R'; cengine[7][8][7][C0] = 'N'; cengine[6][8][6][C0] = 'B'; cengine[5][8][3][C0] = 'K'; cengine[4][8][4][C0] = 'Q'; cengine[3][8][6][C0] = 'B'; cengine[2][8][7][C0] = 'N'; cengine[1][8][5][C0] = 'R'; cengine[8][7][8][C0] = 'P'; cengine[7][7][8][C0] = 'P'; cengine[6][7][8][C0] = 'P'; cengine[5][7][8][C0] = 'P'; cengine[4][7][8][C0] = 'P'; cengine[3][7][8][C0] = 'P'; cengine[2][7][8][C0] = 'P'; cengine[1][7][8][C0] = 'P'; } /*-------------------------------------------------------------------*/ /* Decision Matrix */ matrix[1][C1][C0][C0] = 'W'; matrix[2][C0][C0][C0] = 'B'; matrix[3][C0][C0][C1] = '+'; matrix[4][C0][C1][C0] = '-'; matrix[5][C1][C0][C1] = 'G'; matrix[6][C0][C1][C1] = 'U'; matrix[7][C1][C1][C1] = '0'; matrix[8][C1][C1][C0] = '1'; /*-------------------------------------------------------------------*/ /* Chess Diplomatic: */ wmove(winE,7,17); if(cengine[F1][F2][2][E2] && matrix[G8][E2][E4][E6]) { wprintw(winE,"%c",cengine[F1][F2][2][E2]); king(ES,FE); } /* Rochade: 0 | 0 */ if(cengine[F1][F2][1][E2] && matrix[G1][E2][E4][E6]) { wprintw(winE,"%c",cengine[F1][F2][1][E2]); king(ES,FE); } /* K: T0 | T0 */ if(cengine[F1][F2][3][E2] && matrix[G7][E2][E4][E6]) { wprintw(winE,"%c",cengine[F1][F2][3][E2]); king(ES,FE); } /* Q: T2 | T0 */ if(cengine[F1][F2][4][E2] && matrix[G6][E2][E4][E6]) { wprintw(winE,"%c",cengine[F1][F2][4][E2]); queen(ES,FE); } /* R: T2 | T0 */ if(cengine[F1][F2][5][E2] && matrix[G5][E2][E4][E6]) { wprintw(winE,"%c",cengine[F1][F2][5][E2]); turm(ES,FE); } /* B: T2 | T2 */ if(cengine[F1][F2][6][E2] && matrix[G4][E2][E4][E6]) { wprintw(winE,"%c",cengine[F1][F2][6][E2]); bishop(ES,FE); } /* N: T2 | T1 */ if(cengine[F1][F2][7][E2] && matrix[G3][E2][E4][E6]) { wprintw(winE,"%c",cengine[F1][F2][7][E2]); springer(ES,FE); } if(player[1]) { /* P: T1 | T0 */ if(cengine[F1][F2][8][C0] && matrix[G2][E2][E4][E6]) { wprintw(winE,"%c",cengine[F1][F2][8][C0]); peopleW(ES,FE); } /* P: T1 | T0 */ if(cengine[F1][F2][8][C1] && matrix[G2][E2][E4][E6]) { wprintw(winE,"%c",cengine[F1][F2][8][C1]); peopleB(ES,FE); }} if(player[8]) { /* P: T1 | T0 */ if(cengine[F1][F2][8][C0] && matrix[G2][E2][E4][E6]) { wprintw(winE,"%c",cengine[F1][F2][8][C0]); peopleB(ES,FE); } /* P: T1 | T0 */ if(cengine[F1][F2][8][C1] && matrix[G2][E2][E4][E6]) { wprintw(winE,"%c",cengine[F1][F2][8][C1]); peopleW(ES,FE); }} } /*---------------------------------------------------------------------------*/ /* Sort Variables */ int R1, R2, R3, R4; /* Selection Sort */ void selectsort(int *sbit,int R1) { #ifdef SELECT R3 = R1; for(R2 = R1 + 1; R2 <= C8; R2++) { if(sbit[R2] > sbit[R3]) { R3 = R2; } } if(R3 != R1) { R4 = sbit[R3]; sbit[R3] = sbit[R1]; sbit[R1] = R4; } #endif } /*---------------------------------------------------------------------------*/ /* Insert Sort */ void insertsort(int *sbit, int L1) { #ifdef INSERT R4 = sbit[L1]; for(R2 = L1; sbit[R2-1] > R4 && R2 > C0; R2--) { sbit[R2] = sbit[R2-1]; } sbit[R2] = R4; #endif } /*---------------------------------------------------------------------------*/ /* Sort */ void sort(char *nmove, char *player) { /* Tree Variables */ int FIGU, FELD, L1, L2; int E1, E2, E3, E4, E5, E6, E7, E8; int ES[C8]; int FE[C8]; /* Window Box */ winF = newwin(1,3,1,73); /*winF = newwin( 8,24,4,6);*/ winB = newwin(10,80,15,0); winE = newwin( 8,74,16,3); box(winB,ACS_VLINE,ACS_HLINE); scrollok(winE,true); /* Windows Refresh */ touchwin(stdscr); wbkgd(winB,COLOR_PAIR(9)); wbkgd(winE,COLOR_PAIR(9)); wrefresh(winB); wrefresh(winE); /*-------------------------------------------------------------------*/ /* Lines */ L1 = -1; /* Engine Deep */ for(FIGU = -128, FELD = 0; FIGU < 0; FIGU += 16) { L1++; L2 = 27; wprintw(winE," \n "); /* Tree */ for(E1 = C0; E1 <= C1; E1++) { /* Notation */ for(E2 = C0; E2 <= C1; E2++) { /* Material */ for(E3 = C0; E3 <= C1; E3++) { R1 = -1; L2 += 5; /* Situation */ for(E4 = C0; E4 <= C1; E4++) { /* Direction */ for(E5 = C0; E5 <= C1; E5++) { /* Figuren */ for(E6 = C0; E6 <= C1; E6++) { /* Felder */ for(E7 = C1; E7 <= C1; E7++) { /* Best Move */ for(E8 = C1; E8 <= C1; E8++) { /* Counter */ if(L1 > 7) { L1 = 7; } /*-----------------------------------------------------------*/ /* Array */ ES[0] = E1; ES[1] = E2; ES[2] = E3; ES[3] = E4; ES[4] = E5; ES[5] = E6; ES[6] = E7; ES[7] = E8; /* Engine Info */ FELD = FELD | FIGU; wmove(winE,7,1); wprintw(winE,"%+4d %d%d%d%d%d%d%d%d", FELD,E1+1,E2,E3+3,E4+5,E5,E6+1,E7,E8); /* Function */ R1++; selectsort(sbit, R1); insertsort(sbit, L1); squares(ES,FE,sbit,player); /*-----------------------------------------------------------*/ /* Move To */ wmove(winE,7,L2); if(E6 == 0) { nmove[20] = amove[0]; nmove[21] = amove[1]; nmove[22] = amove[2]; nmove[23] = amove[3]; /* Move Notation */ wprintw(winE,"%c%c%c%c",nmove[20],nmove[21],nmove[22],nmove[23]); /*wprintw(winE,"%d%d%d%d",sbit[0],sbit[1],sbit[2],sbit[3]);*/ } /* Move To */ if(E6== 1) { nmove[30] = amove[0]; nmove[31] = amove[1]; nmove[32] = amove[2]; nmove[33] = amove[3]; /* Move Notation */ wprintw(winE,"%c%c%c%c",nmove[30],nmove[31],nmove[32],nmove[33]); /*wprintw(winE,"%d%d%d%d",sbit[0],sbit[1],sbit[2],sbit[3]);*/ } /* I. Best Move */ if((E1==0) && (E2==0) && (E3==0) && (E4==1) && (E5==1) && (E6==0) && (E7==1) && (E8==1)) { /* Engine to Board */ nmove[0] = amove[0]; nmove[1] = amove[1]; nmove[2] = amove[2]; nmove[3] = amove[3]; } /* II. Best Move */ if((E1==0) && (E2==0) && (E3==0) && (E4==1) && (E5==1) && (E6==1) && (E7==1) && (E8==1)) { /* Engine to Board */ nmove[0] = amove[0]; nmove[1] = amove[1]; nmove[2] = amove[2]; nmove[3] = amove[3]; } wrefresh(winB); wrefresh(winE); }}}}}}}}} } /*---------------------------------------------------------------------------*/