[Game] Batalha Naval - Windows Game (Linguagem C)


Jogo desenvolvido em C, utilizando apenas código ASCII como interface gráfica. Para ser jogado no próprio console do windows.

Batalha Naval
Esse jogo consiste apenas da parte do jogador, ou seja, apenas o jogador pode derrubar os navios da "máquina".
Não foram utilizadas imagens. O jogo foi feito utilizando-se apenas caracteres representando os navios, água e o campo oculto.

Explicando a lógica da função main()
Na função main, optei em desenvolver a parte de inicialização dos campos, posicionamento dos navios e um menu chamando então as funções "jogar", "creditos" e "ranking".

No princípio, duas matrizes 10x10 são incializadas. Uma é o campo do jogador e a outra da "máquina".
Os navios são distribuidos de forma aleatória no campo da "máquina":
-Submarino (2 posições com S);
     SS
-Hidro-Avião (3 posições com H);
         H
    H        H
-Porta-Aviões (4 posições com P).
    PPPP


Utilizei as variáveis X para representar o eixo horizontal, ou das abscissas; Y reprsentando o eixo vertical, ou das ordenadas e R representando o sentido de rotação que os navios podem ser posicionados (cima, baixo, direita, esquerda).

Os números randômicos para os eixos X e Y podem variar de 0 a 9, visto que as matrizes são 10x10. Já o eixo de rotação R, foi definido 4 valores representando as 4 direções possíveis para o posicionamento dos navios na matriz (campo), sendo 1=cima, 2=direita, 3=baixo e 4=esquerda.

O campo visível para o jogador é inicializado com A, representando a água.

Caso algum navio seja colocado em uma posição já ocupada, o programa volta ao princípio fazendo com que todos os navios sejam distribuidos novamente, até que caiam em posições distintas. Pois uma vez que o navio foi posicionado na matriz através de um número aleatório, não há como apagar o que já foi escrito e gerar outro número randômico até posicioná-lo em um lugar vazio. O navio posicionado por cima do outro continuaria lá.
Com certeza existem outras possibilidades, mas eu optei em utilizar essa lógica pois é muito mais simples e funcional.

Chamei de "parte central" o primeiro caracter do navio. As coordenadas são primeiramente geradas para a "parte central" dos navios, e então a "cauda", que seriam os caracteres restantes, são gerados em função da "parte central".
Por exemplo, se a parte central de um hidro-avião for posicionada na linha 6 coluna 0, a cauda não pode ser posicionada nas direções cima, baixo e esquerda, pois dessa forma estariam fora da matriz.

Segue o código-fonte do jogo completo para download.!

O arquivo está em .cpp

Comentários