Questão 4 - Função Principal do Jogo (4 pontos)
Complete as lacunas no código a seguir utilizando as funções desenvolvidas nas questões anteriores para implementar a lógica de controle do jogo. Para facilitar o processo de entrada dos dados, vamos considerar que as especificações de navios foram recebidas como parâmetros na linha de comando (argc e argv). A especificação de um navio em um argv [x] (para qualquer x > 1) contém um string com três campos, conforme descrito na Questão 1 e processado pela função posicionar_navios. Exemplo de entrada: jogo. exe "fragata 23 " "corveta 45 " "porta-aviao 67 ". Para essa entrada, argc é 4 e argv[1] é "fragata 23 ". Considere também que a função verifica_navios já está implementada e verifica quaisquer erros nos parâmetros recebidos. Finalmente, as posições dos tiros devem ser lidas do teclado a cada rodada e armazenadas nas variáveis linha e coluna já declaradas.
int main(void) {
char tabuleiro[12][12];
if(!verifica_navios(argv, argc)) {
printf("Erro na especificação dos navios!\n");
return 1;
}
// passando navios a partir do argv[1], pois o argv[0]
// contém o nome do executavel:
posicionar_navios(tabuleiro, &argv[1], argc-1);
while (1) {
int linha, coluna;
printf("Digite as coordenadas do tiro (linha coluna): ");
printf("Acertou!\n");
} else {
printf("Errou!\n");
}
if (
printf("Voce afundou todos os navios!\n");
printf("Fim de jogo.\n");
}
}
return 0;
\}
Complete as lacunas no código a seguir utilizando as funções desenvolvidas nas questões anteriores para implementar a lógica de controle do jogo. Para facilitar o processo de entrada dos dados, vamos considerar que as especificações de navios foram recebidas como parâmetros na linha de comando (argc e argv). A especificação de um navio em um argv [x] (para qualquer x > 1) contém um string com três campos, conforme descrito na Questão 1 e processado pela função posicionar_navios. Exemplo de entrada: jogo. exe "fragata 23 " "corveta 45 " "porta-aviao 67 ". Para essa entrada, argc é 4 e argv[1] é "fragata 23 ". Considere também que a função verifica_navios já está implementada e verifica quaisquer erros nos parâmetros recebidos. Finalmente, as posições dos tiros devem ser lidas do teclado a cada rodada e armazenadas nas variáveis linha e coluna já declaradas.
int main(void) {
char tabuleiro[12][12];
if(!verifica_navios(argv, argc)) {
printf("Erro na especificação dos navios!\n");
return 1;
}
// passando navios a partir do argv[1], pois o argv[0]
// contém o nome do executavel:
posicionar_navios(tabuleiro, &argv[1], argc-1);
while (1) {
int linha, coluna;
printf("Digite as coordenadas do tiro (linha coluna): ");
printf("Acertou!\n");
} else {
printf("Errou!\n");
}
if (
printf("Voce afundou todos os navios!\n");
printf("Fim de jogo.\n");
}
}
return 0;
\}
Passo 1
O enunciado nos dá o esqueleto de um
main
em C que já posiciona os navios e entra num laço infinito. A cada iteração, temos de:- ler do teclado as coordenadas do tiro;
- chamar a função que processa esse tiro e retorna “acertou” (valor não nulo) ou “errou” (zero);
- exibir a mensagem apropriada;
- chamar a função que verifica se todos os navios foram afundados e, em caso afirmativo, encerrar o laço imprimindo as mensagens finais.
Passo 2
Para ler os valores de
linha
e coluna
do teclado usamos scanf
. Substituímos a primeira lacuna por:scanf("%d %d", &linha, &coluna);
Passo 3
Para processar o tiro usamos a função (implementada na questão anterior) que vamos chamar de
realizar_tiro
. Ela recebe o tabuleiro e as coordenadas e retorna não–zero em caso de acerto. A condição do if
fica:realizar_tiro(tabuleiro, linha, coluna)
Passo 4
Para verificar se todos os navios foram afundados, usamos a função (também da questão anterior) que vamos chamar de
todos_afundados
. Ela recebe o tabuleiro e retorna não–zero quando não sobram navios. Na lacuna do if
de fim de jogo, colocamos:todos_afundados(tabuleiro)
e, dentro desse
if
, interrompemos o while
com break;
.Resposta
int main(void) {
char tabuleiro[12][12];
if (!verifica_navios(argv, argc)) {
printf("Erro na especificação dos navios!\n");
return 1;
}
// posiciona navios a partir de argv[1]...argv[argc-1]
posicionar_navios(tabuleiro, &argv[1], argc-1);
while (1) {
int linha, coluna;
printf("Digite as coordenadas do tiro (linha coluna): ");
scanf("%d %d", &linha, &coluna);
if (realizar_tiro(tabuleiro, linha, coluna)) {
printf("Acertou!\n");
} else {
printf("Errou!\n");
}
if (todos_afundados(tabuleiro)) {
printf("Voce afundou todos os navios!\n");
printf("Fim de jogo.\n");
break;
}
}
return 0;
}