PROBLEME
Vous devez écrire un programme qui détermine dans une partie d'échecs, si un cavalier peut prendre une pièce de l'adversaire.
Rappelons que les échecs se jouent sur un plateau carré de 8 cases par 8. Un cavalier se déplace en avancant d'une case horizontalement ou verticalement, puis en allant en diagonale, sans revenir en arrière. Le cavalier peut se déplacer même si la case intermédiaire de son déplacement contient une pièce (amie ou ennemie). La figure suivante montre toutes les possibilités de déplacements de deux cavaliers :

ENTREE
On vous donne la description d'un plateau de jeu sous la forme de 8 lignes de 8 caractères. Les lettres majuscules représentent les pièces noires, les minuscules les pièces blanches, et les '.' représentent les cases vides. Les cavaliers sont représentés par la lettre 'c' (ou 'C'), et les autres pièces par d'autres lettres de l'alphabet.
SORTIE
Votre programme doit afficher "yes" si l'un des cavaliers noirs peut se déplacer vers une case contenant une pièce blanche (donc la prendre) et "no" dans le cas contraire.
CODE SOURCE
#include <stdio.h>
int main(int argc, char *argv[])
{
char echiquier[8][8];
for(int y=0;y<8;y++)
for(int x=0;x<8;x++)
scanf("%c",&echiquier[y][x]);
int deplacements[8][2]={
{2,-1},
{2,1},
{-2,-1},
{-2,1},
{-1,2},
{1,2},
{-1,-2},
{1,-2}
};
bool result=false;
for(int y=0;y<8;y++)
{
for(int x=0;x<8;x++)
{
if(echiquier[y][x]!='P') continue;
for(int i=0;i<8;i++)
{
int cy=y+deplacements[i][0];
int cx=x+deplacements[i][1];
if(cy<0 || cy>=8) continue;
if(cx<0 || cx>=8) continue;
char c=echiquier[cy][cx];
if(c>='a'&&c<='z')
result=true;
}
}
}
printf(result?"yes\n":"no\n");
return 0;
}
EXPLICATIONS
Pour écrire sur la sortie standard, on utilise la fonction printf().
Pour lire sur l'entrée standard, on utilise la fonction scanf().
|