Instantly share code, notes, and snippets.
Created
September 4, 2015 15:51
-
Star
0
(0)
You must be signed in to star a gist -
Fork
0
(0)
You must be signed in to fork a gist
-
Save Pr3d4dor/b415fcb349f44fe4a9a1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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