Ввести fen строку, преобразовать, вывести на экран в виде таблицы 8*8 - C (СИ)
Формулировка задачи:
Шахматные позиции записываются в виде FEN строки - http://www.gambiter.ru/chess/item/242-fen.html
Задача: ввести fen строку, преобразовать, вывести на экран в виде таблицы 8*8
Мысль: сделать одну строку длинной 64 символа. все косые линии убрать, цифры преобразовать в количество нулей. 1 -> 0 2 -> 00 3 -> 000 и т.д. буквы фигур оставить без изменений. Вывести на консоль по 8 в ряд, написать чей ход.
Решение задачи: «Ввести fen строку, преобразовать, вывести на экран в виде таблицы 8*8»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
void FEN2Board(char *fen, char *board)
{
int i,iboard=0,j;
for (i=0; i<64; i++) board[i]=' ';
char c;
for (i=0; i<strlen(fen); i++) // с концом строки
{
c=fen[i];
if (c>='1' && c<='8')
{
for (j=0; j<=c-'1'; j++)
{
board[iboard]='.';
iboard++;
}
continue;
}
if (fen[i]!='/')
{
board[iboard]=fen[i];
iboard++;
}
}
return;
}
void PrintBoard(char *board)
{
int i;
printf("\n");
for (i=0; i<64; i++)
{
if (i>0 && i%8 == 0) printf("\n");
printf("%c ", board[i]);
}
printf("\n\n");
return;
}
int main()
{
char fen[50];
char board[64];
printf("FEN to board\n");
while(1)
{
printf("insert FEN position\n");
scanf("%s", fen);
FEN2Board(fen, board);
PrintBoard(board);
}
return 0;
}
Объяснение кода листинга программы
- Программа преобразует строку FEN в соответствующую ей доску 8x8.
- Ввод осуществляется с клавиатуры, вводится строка FEN.
- Для преобразования используется функция FEN2Board.
- Функция FEN2Board заполняет доску, используя символ ' ' (пробел).
- В функции используется два вложенных цикла:
- Внешний цикл перебирает все 64 элемента доски.
- Внутренний цикл используется для обработки чисел от '1' до '8' и соответствующих им символов '/'.
- Внутренний цикл начинается с символа '1' и заканчивается символом '8', пропуская символы '/'.
- Внутренний цикл используется для пропуска символов '/'.
- Если символ не является числом от '1' до '8', он копируется в доску.
- Если символ является числом от '1' до '8', в доску записываются символы '.' до следующего числа.
- Доска выводится на экран с помощью функции PrintBoard.
- Функция PrintBoard использует вложенный цикл для вывода доски 8x8.
- Если индекс больше 0 и кратен 8, выводится символ новой строки '\n'.
- Выводится символ доски.
- Программа завершается, когда пользователь вводит пустую строку.