Skip to content

Instantly share code, notes, and snippets.

@Pr3d4dor
Created September 4, 2015 15:51
Show Gist options
  • Save Pr3d4dor/b415fcb349f44fe4a9a1 to your computer and use it in GitHub Desktop.
Save Pr3d4dor/b415fcb349f44fe4a9a1 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
#include <stdbool.h>
#define LIN 7
#define COL 7
//Funcao para verificar se as coordenadas são validas
bool verificaCoordenadas(int x,int y){
int controle1=0,controle2=0;
if ((x>=0)&&(x<7))
controle1=1;
if ((y>=0)&&(y<7))
controle2=1;
if ((controle1==1)&&(controle2==1))
return true;
else
return false;
}
//Funcao para imprimir o campo
void imprimirCampo(char campo[LIN][COL]){
for(int i=0;i<LIN;i++){
printf("\n");
for (int j=0;j<COL;j++)
printf(" %c",campo[i][j]);
}
printf("\n");
}
//Função para gerar os numeros aleatorios para as posicoes do Hidroaviao
void geraNumerosHidroaviao(int *x,int *y){
*x=rand()%COL;
*y=rand()%(LIN-2);
}
//Função para gerar os numeros aleatorios para as posicoes do Cruzador
void geraNumerosCruzador(int *x,int *y){
*x=rand()%COL;
*y=rand()%(LIN-1);
}
//Função que insere os Cruzadores no campo
void insereCruzador(char campo[LIN][COL]){
int cont=0,x=0,y=0;
geraNumerosCruzador(&x,&y);
while (cont<2){
if ((campo[x][y]==' ')&&(campo[x][y+1]==' ')){
campo[x][y]='C';
campo[x][y+1]='C';
cont++;
geraNumerosCruzador(&x,&y);
}
else
geraNumerosCruzador(&x,&y);
}
}
//Função que insere os Hidroavioes no campo
void insereHidroaviao(char campo[LIN][COL]){
int cont=0,x=0,y=0;
geraNumerosHidroaviao(&x,&y);
while (cont<2){
if (((campo[x][y]==' ')&&(campo[x-1][y+1]==' ')&&(campo[x][y+2])==' ')&&(campo[x-1][y+2]==' ')&&(campo[x-1][y])==' '){
campo[x][y]='H';
campo[x-1][y+1]='H';
campo[x][y+2]='H';
cont++;
geraNumerosHidroaviao(&x,&y);
}
else
geraNumerosHidroaviao(&x,&y);
}
}
int main(){
//Campo de jogo
char campo[LIN][COL];
//Campo de visao para o jogador;
char campoVisao[LIN][COL];
//Contador das jogadas realizadas e variavel que serve para controlar quando o usuario destruiu todas as embarcaçoes
int contadorDeJogadas=0,totalDeAcertosParaVencer=10;
//Variaveis de indice e controle
int i=0,j=0,controle1=0,controle2=0;
//Variaveis que armazenam as coordenadas que o usuario gostaria de atacar
int x=0,y=0;
//SEED para o rand()
srand(time(NULL));
//Inicia o campo com as posicoes em branco
for (i=0;i<LIN;i++){
for (j=0;j<COL;j++){
campo[i][j]=' ';
campoVisao[i][j]=' ';
}
}
//Chama a funcao que insere aleatoriamente no campo os Cruzadores
insereCruzador(campo);
//Chama a funcao que insere aleatoriamente no campo os Hidroavioes
insereHidroaviao(campo);
//Laco em que o jogador deve digitar a coordenada do seu ataque verificica se a cordenada foi um sucesso ou falha
do{
printf("Campo: \n");
imprimirCampo(campoVisao);
printf("Digite as coordenadas onde o ataque sera realizado [x,y]:\n");
do{
scanf("%d %d",&x,&y);
if (!verificaCoordenadas(x,y))
printf("Coordenadas invalidas! Digite novamente!\n");
}while(!verificaCoordenadas(x,y));
if (campo[x][y]==' '){
printf("Voce errou o alvo! Tente novamente!\n");
campoVisao[x][y]='-';
contadorDeJogadas++;
system("pause");
system("cls");
}
else{
if (campoVisao[x][y]=='X'){
printf("Nessa coordenada voce ja acertou um navio!\n");
contadorDeJogadas++;
system("pause");
system("cls");
}
else{
if(campo[x][y]!=' '){
printf("Voce acertou o alvo!\n");
campoVisao[x][y]='X';
totalDeAcertosParaVencer--;
contadorDeJogadas++;
system("pause");
system("cls");
}
}
}
}while(totalDeAcertosParaVencer!=0);
//Imprime o campo para mostrar onde estavam os navios apos o usuario ter destruido todos eles
imprimirCampo(campoVisao);
imprimirCampo(campo);
//Printf final
printf("Voce venceu !!!\nNumero de jogadas para vencer: %d\n",contadorDeJogadas);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment