Я студент, в настоящее время разрабатываю версию Othello для университетского проекта.
Это в основном доработано, поэтому я ищу вещи, которые можно улучшить. Одним из них является то, что доска (которая выводится на стандартный вывод) просто заменяет предыдущую при каждой игре, гарантируя, что терминал не двигается.
Ниже приведена самая последняя попытка сделать это:
char c = ' ';
fflush(stdout);
contaPecas(e, pecas);
printf("\n\r* X-%d |SCORE| O-%d * \n\r\n\r 1 2 3 4 5 6 7 8 "" | N <peça>para novo jogo "
"em que o primeiro a jogar é o jogador com peça.\n\r", pecas->x, pecas->y);
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
if (j == 0)
printf("%d ", i+1);
if (opcao == 1 && verificaValida(i,j,turno) == 1)
c = '.';
else if (opcao == 2 && (*turno)->N != 0 && i == sugestao->y && j == sugestao->x)
c = '?';
else
switch (e.grelha[i][j]) {
case VALOR_O:
c = 'O';
break;
case VALOR_X:
c = 'X';
break;
case VAZIA:
c = '-';
break;
}
printf("%c ", c);
}
switch (i) {
case 0:
printf(" | A para novo jogo contra bot. O jogador comeca com peça X.\n\r");
break;
case 1:
printf(" | L<ficheiro>para ler um jogo de ficheiro.\n\r");
break;
case 2:
printf(" | E <ficheiro> escrever em ficheiro estado do jogo.\n\r");
break;
case 3:
printf(" | J<L,C>jogar peça atual na posição (l,c).\n\r");
break;
case 4:
printf(" | S para imprimir um ponto ‘.’nas posições com jogada válida.\n\r");
break;
case 5:
printf(" | H para sugestão de jogada. Deve ser colocado um ‘?’no sitio sugerido.\n\r");
break;
case 6:
printf(" | U para desfazer a última jogada(Undo).\n\r");
break;
case 7:
printf(" | Q para sair do jogo.\n\r");
break;
}
}
if (e.peca == 0) printf("\n\r");
else if (e.peca == VALOR_X) printf("Turn: X\n\r\n\r");
else printf("Turn: O\n\r\n\r");
if (opcao == 2 && (*turno)->N != 0)
printf("A melhor jogada é %d %d.\n\r", sugestao->y+1, sugestao->x+1);
}
Я ожидал, что с помощью fflush (stdout) он сотрет предыдущие отпечатки, а с помощью '\ r' он просто напишет в том же месте, что и раньше, но он продолжает писать в соответствии с уже написанным и создает терминал переехать. Любые идеи о том, что я мог бы сделать, чтобы это исправить?