// DAR LOS POSIBLES MOVIMIENTOS DEL CABALLO, TORRE O ALFIL #include <ncurses.h> #include <stdio.h> // PROTOTIPOS DE FUNCION void Movimientos(int, int, char); char* Letra(int); char* Fila(int); char *Pieza(char); // FUNCIONES ___________________ int esposibleelmovimiento1(int letra, int numero){ if((numero-1)<=0) return 0; if((letra+2)>=8) return 0; return 1; } int esposibleelmovimiento2(int letra, int numero){ if((numero-1)<=0) return 0; if((letra-2)<0) return 0; return 1; } int esposibleelmovimiento3(int letra, int numero){ if((numero-1)<=1) return 0; if((letra-2)<=1) return 0; return 1; } int esposibleelmovimiento4(int letra, int numero){ if((numero-2)<=1) return 0; if((letra+1)>=8) return 0; return 1; } int esposibleelmovimiento5(int letra, int numero){ if((numero-1)<=1) return 0; if((letra+2)>=8) return 0; return 1; } int esposibleelmovimiento6(int letra, int numero){ if((numero+1)>=8) return 0; if((letra+2)>=8) return 0; return 1; } int esposibleelmovimiento7(int letra, int numero){ if((numero+2)>=8) return 0; if((letra+1)>=8) return 0; return 1; } int esposibleelmovimiento8(int letra, int numero){ if((numero+1)>=8) return 0; if((letra-2)<=1) return 0; return 1; } char *Letra(int columna) { switch (columna) { case 1: return "A"; break; case 2: return "B"; break; case 3: return "C"; break; case 4: return "D"; break; case 5: return "E"; break; case 6: return "F"; break; case 7: return "G"; break; case 8: return "H"; break; } return "1"; // cualquier cosa ... No importa ya que nunca va a llegar aqui ______________ } char *Fila(int fila) { switch (fila) { case 1: return "8"; break; case 2: return "7"; break; case 3: return "6"; break; case 4: return "5"; break; case 5: return "4"; break; case 6: return "3"; break; case 7: return "2"; break; case 8: return "1"; break; } return "1"; // cualquier cosa ... No importa ya que nunca va a llegar aqui ________________ } char *Pieza(char Pieza) { switch (Pieza) { case 'a': return "EL ALFIL "; break; case 't': return "LA TORRE "; break; case 'c': return "EL CABALLO "; break; } return "NADA"; } void Movimientos(int letra, int numero, char Pieza) { //x,y es l posicion actual el caballo de ajedrez //el tablero tiene dimensiones x desde A(izquierda) hasta H(derecha) y altura 1(arriba) hasta 8(abajo) int i=0,j=0, r=0; int numero1,numero2,numero3,numero4,numero5,numero6,numero7,numero8; int letra1,letra2,letra3,letra4,letra5,letra6,letra7,letra8; numero1=numero2=numero3=numero4=numero5=numero6=numero7=numero8=0; letra1=letra2=letra3=letra4=letra5=letra6=letra7=letra8=0; for (i=0; i<=16; i++) mvprintw(25+i, 120, " "); switch (Pieza) { case 'c': // MOVIMIENTOS DEL CABALLO if(esposibleelmovimiento1(letra,numero)) { letra1=letra+2; numero1=numero-1; } if(esposibleelmovimiento2(letra,numero)) { letra2=letra-2; numero2=numero-1; } if(esposibleelmovimiento3(letra,numero)) { letra3=letra-1; numero3=numero-2; } if(esposibleelmovimiento4(letra,numero)) { letra4=letra-2; numero4=numero+1; } if(esposibleelmovimiento5(letra,numero)) { letra5=letra-1; numero5=numero+2; } if(esposibleelmovimiento6(letra,numero)) { letra6=letra+1; numero6=numero+2; } if(esposibleelmovimiento7(letra,numero)) { letra7=letra+2; numero7=numero+1; } if(esposibleelmovimiento8(letra,numero)) { letra8=letra+1; numero8=numero-2; if(letra1!=0) mvprintw(25,120,"se puede mover a: %s, %s\n",Letra(letra1),Fila(numero1)); if(letra2) mvprintw(26,120,"se puede mover a: %s,%s\n",Letra(letra2),Fila(numero2)); if(letra3) mvprintw(27,120,"se puede mover a: %s,%s\n",Letra(letra3),Fila(numero3)); if(letra4) mvprintw(28,120,"se puede mover a: %s,%s\n",Letra(letra4),Fila(numero4)); if(letra5) mvprintw(29,120,"se puede mover a: %s,%s\n",Letra(letra5),Fila(numero5)); if(letra6) mvprintw(30,120,"se puede mover a: %s,%s\n",Letra(letra6),Fila(numero6)); if(letra7) mvprintw(31,120,"se puede mover a: %s,%s\n",Letra(letra7),Fila(numero7)); if(letra8) mvprintw(32,120,"se puede mover a: %s,%s\n",Letra(letra8),Fila(numero8)); } break; case 't': // MOVIMIENTOS DE LA TORRE for (i=1;i<=8;i++) { mvprintw(24+i, 120, "Se puede mover a: %s, %s\n", Letra(letra), Fila(i)); } for (j=1;j<=8;j++) { mvprintw(24+i+j, 120, "Se puede mover a: %s, %s\n", Letra(j), Fila(numero)); } break; case 'a': // MOVIMIENTOS DEL ALFIL i = letra; j = numero; r=0; while (i >= 1 && j <= 8) { mvprintw(25+r, 120, "se puede mover a: %s, %s\n", Letra(i), Fila(j)); r++; i--; j++; } // ARRIBA IZQUIERDA i = letra; j = numero; while (i <= 8 && j <= 8) { mvprintw(25+r, 120, "se puede mover a: %s, %s\n", Letra(i), Fila(j)); r++; i++; j++; } // ARRIBA DERECHA i = letra; j = numero; while (i >= 1 && j >= 1) { mvprintw(25+r, 120, "se puede mover a: %s, %s\n", Letra(i), Fila(j)); r++; i--; j--; } // ABAJO IZQUIERDA i = letra; j = numero; while (i <= 8 && j >= 1) { mvprintw(25+r, 120, "se puede mover a: %s, %s\n", Letra(i), Fila(j)); r++; i++; j--; } // ABAJO DERECHA break; } } main() { int col=72,row=32,x=15,y,fila=1,columna=1; initscr(); start_color(); init_pair(1,COLOR_RED, COLOR_BLACK); init_pair(2,COLOR_YELLOW,COLOR_BLACK); move(11, 1); //empiezo pruebas de color /*attron(COLOR_PAIR(7)); for (int h=11; h<42; h+=8){ for (int i=h; i<h+3; i++){ for (int j=11; j<90; j++) { if (j==20||j==40||j==60||j==80){ j+=10; continue; } mvaddch(i,j,' '); } } } for (int h=15; h<42; h+=8){ for (int i=h; i<h+3; i++){ for (int j=21; j<90; j++) { if (j==30||j==50||j==70){ j+=10; continue; } mvaddch(i,j,' '); } } } attroff(COLOR_PAIR(7)); //termina pc */ for(x=15; x<=88; x+=9){ move(5,x); vline(ACS_VLINE,row);} for(y=4; y<=38; y+=4){ move(y,15); hline(ACS_HLINE, col);} //cruces y esquinas move(8,24); addch(ACS_PLUS); move(12,24); addch(ACS_PLUS); move(16,24); addch(ACS_PLUS); move(20,24); addch(ACS_PLUS); move(24,24); addch(ACS_PLUS); move(28,24); addch(ACS_PLUS); move(32,24); addch(ACS_PLUS); move(8,33); addch(ACS_PLUS); move(12,33); addch(ACS_PLUS); move(16,33); addch(ACS_PLUS); move(20,33); addch(ACS_PLUS); move(24,33); addch(ACS_PLUS); move(28,33); addch(ACS_PLUS); move(32,33); addch(ACS_PLUS); move(8,42); addch(ACS_PLUS); move(12,42); addch(ACS_PLUS); move(16,42); addch(ACS_PLUS); move(20,42); addch(ACS_PLUS); move(24,42); addch(ACS_PLUS); move(28,42); addch(ACS_PLUS); move(32,42); addch(ACS_PLUS); move(8,51); addch(ACS_PLUS); move(12,51); addch(ACS_PLUS); move(16,51); addch(ACS_PLUS); move(20,51); addch(ACS_PLUS); move(24,51); addch(ACS_PLUS); move(28,51); addch(ACS_PLUS); move(32,51); addch(ACS_PLUS); move(8,60); addch(ACS_PLUS); move(12,60); addch(ACS_PLUS); move(16,60); addch(ACS_PLUS); move(20,60); addch(ACS_PLUS); move(24,60); addch(ACS_PLUS); move(28,60); addch(ACS_PLUS); move(32,60); addch(ACS_PLUS); move(8,69); addch(ACS_PLUS); move(12,69); addch(ACS_PLUS); move(16,69); addch(ACS_PLUS); move(20,69); addch(ACS_PLUS); move(24,69); addch(ACS_PLUS); move(28,69); addch(ACS_PLUS); move(32,69); addch(ACS_PLUS); move(8,78); addch(ACS_PLUS); move(12,78); addch(ACS_PLUS); move(16,78); addch(ACS_PLUS); move(20,78); addch(ACS_PLUS); move(24,78); addch(ACS_PLUS); move(28,78); addch(ACS_PLUS); move(32,78); addch(ACS_PLUS); move(4,24); addch(ACS_TTEE); move(4,33); addch(ACS_TTEE); move(4,42); addch(ACS_TTEE); move(4,51); addch(ACS_TTEE); move(4,60); addch(ACS_TTEE); move(4,69); addch(ACS_TTEE); move(4,78); addch(ACS_TTEE); move(36,24); addch(ACS_BTEE); move(36,33); addch(ACS_BTEE); move(36,42); addch(ACS_BTEE); move(36,51); addch(ACS_BTEE); move(36,60); addch(ACS_BTEE); move(36,69); addch(ACS_BTEE); move(36,78); addch(ACS_BTEE); move(8,87); addch(ACS_RTEE); move(12,87); addch(ACS_RTEE); move(16,87); addch(ACS_RTEE); move(20,87); addch(ACS_RTEE); move(24,87); addch(ACS_RTEE); move(28,87); addch(ACS_RTEE); move(32,87); addch(ACS_RTEE); move(8,15); addch(ACS_LTEE); move(12,15); addch(ACS_LTEE); move(16,15); addch(ACS_LTEE); move(20,15); addch(ACS_LTEE); move(24,15); addch(ACS_LTEE); move(28,15); addch(ACS_LTEE); move(32,15); addch(ACS_LTEE); move(36,15); addch(ACS_LLCORNER); move(36,87); addch (ACS_LRCORNER); move(4,15); addch(ACS_ULCORNER); move(4,87); addch (ACS_URCORNER); //aqui termina las cruces y esquinas attron(COLOR_PAIR(2)); mvprintw(3,19,"A"); mvprintw(37,19,"A"); mvprintw(3,28,"B"); mvprintw(37,28,"B"); mvprintw(3,37,"C"); mvprintw(37,37,"C"); mvprintw(3,46,"D"); mvprintw(37,46,"D"); mvprintw(3,55,"E"); mvprintw(37,55,"E"); mvprintw(3,64,"F"); mvprintw(37,64,"F"); mvprintw(3,73,"G"); mvprintw(37,73,"G"); mvprintw(3,82,"H"); mvprintw(37,82,"H"); mvprintw(6,13,"1"); mvprintw(6,89,"1"); mvprintw(10,13,"2"); mvprintw(10,89,"2"); mvprintw(14,13,"3"); mvprintw(14,89,"3"); mvprintw(18,13,"4"); mvprintw(18,89,"4"); mvprintw(22,13,"5"); mvprintw(22,89,"5"); mvprintw(26,13,"6"); mvprintw(26,89,"6"); mvprintw(30,13,"7"); mvprintw(30,89,"7"); mvprintw(34,13,"8"); mvprintw(34,89,"8"); attroff(COLOR_PAIR(2)); mvprintw(14,98,"Presiona esc para salir, y posterior otra tecla"); int key,direcc,fin=0,mv=34, mx=19; char seleccion; keypad(stdscr, true); move(16,98);printw("Pulsa: [a]lfil, [c]aballo, [t]orre "); char car='x'; while(fin==0) { key=getch(); direcc=0; if(key==27) { break; return 1; } if(key==KEY_RIGHT) { columna++; direcc=1; mx+=9; } if(key==KEY_LEFT) { columna--; direcc=2; mx-=9; } if(key==KEY_DOWN) { fila--; direcc=3; mv+=4; } if(key==KEY_UP) { fila++; direcc=4; mv-=4; } if(key=='a'||key=='t'||key=='c') car=key; if(mx<88) { mvprintw(mv,mx,"%c",car); } else mvprintw(mv,mx=82,"%c",car); if(mx>18) { mvprintw(mv,mx,"X");} else mvprintw(mv,mx=19,"%c",car); if(mv>4) { mvprintw(mv,mx,"%c",car); } else mvprintw(mv=6,mx,"%c",car); if(mv<38) { mvprintw(mv,mx,"%c",car);} else mvprintw(mv=34,mx,"%c",car); mvprintw(mv+4,mx," ",direcc); mvprintw(mv-4,mx," ",direcc); mvprintw(mv,mx+9," ",direcc); mvprintw(mv,mx-9," ",direcc); //por aqui para los numeros if(fila<8) { } else fila=8; if(columna<9) { } else columna=8; if(columna>1) { } else columna=1; if (fila>1) { } else fila=1; mvprintw(21, 98, "POSICION: [ %s %s ]", Letra(columna), Fila(fila)); mvprintw(23, 100, "Posibles movimientos de %s", Pieza(car)); mvprintw(24, 100, "==========================================="); Movimientos(columna, fila, car); // (LETRA, NUMERO, PIEZA) } refresh(); getch(); endwin(); }