Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- TRABALHO DE FUNDAMENTOS DE PROGRAMAÇÃO
- ALUNO: CLERISTON CLEBER ROA
- cleristoncr@live.com
- */
- /******************* CHAMADA DAS BIBLIOTECAS USADAS *******************/
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- /******************* DECLARAÇÃO DE CONSTANTES ***********************/
- #define SIZE 15
- #define nome 25
- #define POSICAO 48
- /******************* DECLARAÇÃO DAS FUNÇÕES E PROCEDIMENTOS *******************/
- void boot_and_sortie(char player[nome]);
- void Nome(char player[nome]);
- void display(char player[nome],
- int Array_player[SIZE][SIZE],
- int Array_computer[SIZE][SIZE],
- int Array_display[SIZE][SIZE],
- int Array_mascara[SIZE][SIZE]);
- void boot_array(int array[SIZE][SIZE],int zerar);
- void sortie_boats(int Array[SIZE][SIZE],int x);
- void Maiuscula(char player[nome]);
- void play(int Array_display[SIZE][SIZE],int Array_computer[SIZE][SIZE],int *i,int *j,int *pontoP);
- void play_pc(int Array_mascara[SIZE][SIZE],int Array_player[SIZE][SIZE],int *i,int *j,int *pontoPC);
- void esperar(int segundos);
- void sortie_hydro(int Array[SIZE][SIZE],int i,int j);
- void sortie_submarine(int Array[SIZE][SIZE],int i,int j);
- void sortie_cruiser(int Array[SIZE][SIZE],int i,int j);
- void sortie_battleships(int Array[SIZE][SIZE],int i,int j);
- void port_plane(int Array[SIZE][SIZE],int i,int j);
- int points(int mask[SIZE][SIZE],int template[SIZE][SIZE],int i,int j,int *pontoP);
- int shots(int mask[SIZE][SIZE]);
- int error(int mask[SIZE][SIZE]);
- int wrecks(int pontos,int pontAnteri);
- void tip(int array[SIZE][SIZE],int i,int j);
- void tipPC(int array[SIZE][SIZE],int i,int j);
- /******************* IMPLEMENTAÇÃO DO PROGRAMA *******************/
- //FUNÇÃO PRINCIPAL
- void main(){
- //DECLARAÇÃO DO NOME DO JOGADOR
- char player[nome];
- //FUNÇÃO QUE CAPTURA O NOME DO JOGADOR
- Nome(player);
- //FUNÇÃO QUE LEVA O USUARIO AO MENU DE OPÇÕES DO JOGO
- boot_and_sortie(player);
- }
- void boot_and_sortie(char player[nome]){
- int op,j,i;
- //DECLARAÇÃO DAS MATRIZES USADOS PARA O JOGO
- int Array_player[SIZE][SIZE],//MATRIZ DOS BARCOS DO JOGADOR
- Array_pc[SIZE][SIZE],//MATRIZ DOS BARCOS DO COMPUTADOR
- Array_display[SIZE][SIZE],//MATRIZ QUE FICA AMOSTRA SOBRE A MATRIZ DO COMPUTADOR
- Array_mascara[SIZE][SIZE];//MATRIZ QUE FICA AMOSTRA SOBRE A MATRIZ DO JOGADOR
- //FUNÇÃO QUE ZERA A MATRIZ JOGADOR
- boot_array(Array_player,POSICAO);//O 48 INFORMA O COD NA TAB ASCII QUE SERÁ UTILIZADO PARA ZERAR A MATRIZ
- //FUNÇÃO PARA O SORTEIO DOS BARCOS NA MATRIZ JOGADOR
- sortie_boats(Array_player,25);
- //FUNÇÃO QUE ZERA A MATRIZ DO COMPUTADOR
- boot_array(Array_pc,POSICAO);//O 48 INFORMA O COD NA TAB ASCII QUE SERÁ UTILIZADO PARA ZERAR A MATRIZ
- //FUNÇÃO PARA O SORTEIO DOS BARCOS NA MATRIZ DO COMPUTADOR
- sortie_boats(Array_pc,50);
- //FUNÇÃO PARA ZERAR AS MATRIZES DE MASCARAS, COM OS CARACTERES 219 E 126 RESPECTIVAMENTE
- boot_array(Array_mascara,219);
- boot_array(Array_display,126);
- for( i = 0 ; i < SIZE ; i++ ){
- for( j = 0 ; j < SIZE ; j++ ){
- if( Array_player[i][j] == POSICAO )
- Array_mascara[i][j] = 126;
- }
- }
- display(player,Array_player,Array_pc,Array_display,Array_mascara);
- fflush(stdin);
- }
- void Nome(char player[nome]){//ok
- printf("\n\n\n\n");
- printf("\n\t################################################################");
- printf("\n\t################################################################");
- printf("\n\t##### BEM VINDO AO BATALHA NAVAL #####");
- printf("\n\t################################################################");
- printf("\n\t################################################################");
- printf("\n\n\t !!!INFORME O SEU NOME PARA INICIAR O JOGO!!!");
- printf("\n\n\tNOME:--> ");
- gets(player);
- Maiuscula(player);
- }
- void display(char player[nome],
- int Array_player[SIZE][SIZE],
- int Array_computer[SIZE][SIZE],
- int Array_display[SIZE][SIZE],
- int Array_mascara[SIZE][SIZE]){
- int i=0,j=0,move=0,lin=0,col=0,
- pontosPC=0,pontosPlayer=0,pontoAnteriorP=0,pontoAnteriorPC=0,
- disparosPC=0,disparosUSER=0,wreckP=0,wreckPC=0;
- char op='\0';
- do{
- system("cls");
- printf("\n\t\tTABULEIRO JOGADOR\t\tTABULEIRO COMPUTADOR\n\n\n\n\t");
- printf(" ");
- for( i = 0 ; i < SIZE ; i++ ){
- printf(" %c",i+65);
- }
- printf(" | ");
- for( i = 0 ; i < SIZE ; i++ ){
- printf(" %c",i+65);
- }
- printf("\n\n\t");
- i=0;
- while( i < SIZE ){
- if( i < 9 ){
- printf(" %d ",i+1);
- }else
- printf("%d ",i+1);
- for( j = 0 ; j < SIZE ; j++ ){
- printf(" %c",Array_mascara[i][j]);
- }
- printf(" | ");
- for( j = 0 ; j < SIZE ; j++ ){
- printf(" %c",Array_display[i][j]);
- }
- printf(" %d",i+1);
- printf("\n\t");
- i++;
- }
- printf("\n");
- srand(time(NULL));
- printf("\n\tPLAYER: %s\t\t\t\t\tCOMPUTADOR",player);
- printf("\n\tPONTOS: %d\t\t\t\t\tPONTOS DO PC: %d",pontosPlayer,pontosPC);
- printf("\n\tDISPAROS: %d\t\t\t\t\tDISPAROS: %d",disparosUSER,disparosPC);
- printf("\n\tACERTOS: %d\t\t\t\t\tACERTOS: %d ",shots(Array_display),shots(Array_mascara));
- printf("\n\tERROS: %d\t\t\t\t\tERROS: %d",error(Array_display),error(Array_mascara));
- if(wrecks(pontosPlayer,pontoAnteriorP)==1){
- wreckP++;
- pontoAnteriorP = pontosPlayer;
- }
- if(wrecks(pontosPC,pontoAnteriorPC)==1){
- wreckPC++;
- pontoAnteriorPC = pontosPC;
- }
- printf("\n\tAFUNDADOS: %d\t\t\t\t\tAFUNDADOS: %d",wreckP,wreckPC);
- printf("\n\n\t\t\tULTIMA COORDENADA JOGADA: ( %d ; %d )\n",lin, col);
- printf("");
- if( (move == 0) || (move == 1) || (move == 2) ){
- play(Array_display,Array_computer,&i,&j,&pontosPlayer);
- disparosUSER = disparosUSER + 1;
- tip(Array_computer,i,j);
- printf("\n\tPRESSIONE ESC PARA SAIR OU ENTER PARA PROXIMA JOGADA");
- fflush(stdin);
- op = getch();
- }else{
- play_pc(Array_mascara,Array_player,&i,&j,&pontosPC);
- disparosPC = disparosPC + 1;
- tipPC(Array_player,i,j);
- }
- lin = i+1;
- col = j+1;
- move += 1;
- if( move == 6 ){
- move = 0;
- }
- }while(op!=27);
- if( pontosPlayer > pontosPC ){
- system("cls");
- printf("\n\n\n\n\t\t-----------PARABENS------------------");
- printf("\n\n\n\n\n\n\t\t\tSEUS PONTOS SAO: %d \n\t\t\tVOCE VENCEU",pontosPlayer);
- printf("\n\n\n\n\n");
- exit(1);
- }else {
- system("cls");
- printf("\n\n\n\n\t\t-----------MEUS PESAMES------------------");
- printf("\n\n\n\n\n\n\t\t\tSEUS PONTOS SAO: %d \n\t\t\tVOCE PERDEU",pontosPlayer);
- printf("\n\n\n\n\n");
- exit(1);
- }
- }
- void boot_array(int array[SIZE][SIZE],int zerar){//ok
- int i,j;
- for( i = 0 ; i < SIZE ; i++ ){
- for( j = 0 ; j < SIZE ; j++ ){
- array[i][j] = zerar;
- }
- }
- }
- void sortie_boats(int Array[SIZE][SIZE],int x){//ok
- int i=0,j=0;
- srand(time(NULL) + x);
- sortie_hydro(Array,i,j);
- port_plane(Array,i,j);
- sortie_battleships(Array,i,j);
- sortie_cruiser(Array,i,j);
- sortie_submarine(Array,i,j);
- }
- void Maiuscula(char player[nome]){//ok
- int i;
- for(i=0;player[i]!='\0';i++){
- player[i]=toupper(player[i]);
- }
- }
- void play(int Array_display[SIZE][SIZE],int Array_computer[SIZE][SIZE],int *i,int *j,int *pontoP){//ok
- int I,J;
- printf("\n\t\t\t!!!!! SUA VEZ !!!!!\n\t\t\t JOGUE\n");
- printf("\n\tSUA JOGADA ( LINHA ): --> ");
- scanf("%d",&I);
- I=I-1;
- printf("\n\tSUA JOGADA ( COLUNA ): --> ");
- scanf("%d",&J);
- J=J-1;
- if ( Array_computer[I][J] != 48 ){
- Array_display[I][J] = 178;
- }else
- Array_display[I][J] = 88;
- *pontoP = points(Array_display,Array_computer,I,J,pontoP);
- *i = I;
- *j = J;
- }
- void play_pc(int Array_mascara[SIZE][SIZE],int Array_player[SIZE][SIZE],int *i,int *j,int *pontoPC ){//ok
- int I,J;
- printf("\n\t\t\t!!!!! WAIT !!!!!\n\t\t\tPLAYING COMPUTER");
- esperar(1);
- //ESTE LAÇO GARANTE QUE O COMPUTADOR NAO IRA JOGAR NUMA POSIÇÃO JAH MARCADA
- do{
- I = rand() % SIZE;
- J = rand() % SIZE;
- I -= 1;
- J -= 1;
- }while( (Array_mascara[I][J] == 88) || (Array_mascara[I][J] == 0) );
- if ( Array_player[I][J] != 48 ){
- Array_mascara[I][J] = 178;
- }else
- Array_mascara[I][J] = 88;
- *pontoPC = points(Array_mascara,Array_player,I,J,pontoPC);
- *i = I;
- *j = J;
- }
- void esperar(int segundos){//ok
- clock_t cicloFinal;
- cicloFinal= clock() + segundos * CLOCKS_PER_SEC; /* Calcula o ciclo final de acordo com os segundos passados. */
- while (clock() < cicloFinal); /* Para quando o ciclo final e atingido. */
- }
- void sortie_submarine( int Array[SIZE][SIZE],int i,int j){//ok
- int plot;
- int aux;
- for( aux = 0 ; aux < 4 ; aux++ ){
- plot = 0;
- do{
- i = rand() % SIZE ;
- j = rand() % SIZE ;
- //VERIFICA SE i E j ESTÃO DENTRO DOS LIMITES DO TABULEIRO
- if( ( i + 1 <= SIZE ) &&
- ( i - 1 >= 0 ) &&
- ( j + 1 <= SIZE ) &&
- ( j - 1 >= 0 ) ){
- //A SEGUIR VERIFICAÇÕES PARA A INEXISTENCIA DE BARCOS PROXIMOS
- //VERIFICA AS POSIÇÕES HORIZONTAIS E VERTICAIS
- if( (Array[i+1][j] == POSICAO) &&
- (Array[i-1][j] == POSICAO) &&
- (Array[i][j+1] == POSICAO) &&
- (Array[i][j-1] == POSICAO) ){
- //VERIFICA AS POSIÇÕES NAS DIAGONAIS, PRIMARIA E SECUNDARIA
- if( (Array[i+1][j+1] == POSICAO) &&
- (Array[i-1][j-1] == POSICAO) &&
- (Array[i+1][j-1] == POSICAO) &&
- (Array[i-1][j+1] == POSICAO)){
- Array[i][j] = 83;
- plot = 1;
- }
- }
- }
- }while( plot == 0);
- }
- }
- void sortie_cruiser(int Array[SIZE][SIZE],int i,int j){//ok
- int plot;
- int aux;
- for( aux = 0 ; aux < 3 ; aux++ ){
- plot = 0;
- do{
- i = rand() % SIZE ;
- j = rand() % SIZE ;
- if( ( i + 1 <= SIZE ) && ( i - 1 >= 0 ) && ( j + 1 <= SIZE ) && ( j - 1 >= 0 ) &&
- ( j + 2 <= SIZE ) ){
- if( Array[i][j+2] == POSICAO && Array[i][j-1] == POSICAO ){
- if( Array[i+1][j] == POSICAO && Array[i+1][j-1] == POSICAO &&
- Array[i+1][j+1] == POSICAO && Array[i+1][j+2] == POSICAO ){
- if( Array[i-1][j] == POSICAO && Array[i-1][j-1] == POSICAO &&
- Array[i-1][j+1] == POSICAO && Array[i-1][j+2] == POSICAO ){
- Array[i][j] = 67;
- Array[i][j+1] = 67;
- plot = 1;
- }
- }
- }
- }
- }while( plot == 0);
- }
- }
- void sortie_battleships(int Array[SIZE][SIZE],int i,int j){//ok
- int plot;
- int aux;
- for( aux = 0 ; aux < 2 ; aux++ ){
- plot = 0;
- do{
- i = rand() % SIZE;
- j = rand() % SIZE;
- if( ( i + 1 <= SIZE ) && ( i - 1 >= 0 ) && ( j + 1 <= SIZE ) && ( j - 1 >= 0 ) &&
- ( j + 4 <= SIZE ) ){
- if( Array[i][j-1] == POSICAO && Array[i][j+3] == POSICAO ){
- if( Array[i+1][j-1] == POSICAO && Array[i+1][j] == POSICAO &&
- Array[i+1][j+1] == POSICAO && Array[i+1][j+2] == POSICAO &&
- Array[i+1][j+3] == POSICAO ){
- if( Array[i-1][j-1] == POSICAO && Array[i-1][j] == POSICAO &&
- Array[i-1][j+1] == POSICAO && Array[i-1][j+2] == POSICAO &&
- Array[i-1][j+3] == POSICAO ){
- Array[i][j] = 66;
- Array[i][j+1] = 66;
- Array[i][j+2] = 66;
- Array[i][j+3] = 66;
- plot = 1;
- }
- }
- }
- }
- }while( plot == 0);
- }
- }
- void sortie_hydro(int Array[SIZE][SIZE],int i,int j){//ok
- int plot;
- int aux;
- for( aux = 0 ; aux < 5 ; aux++ ){
- plot = 0;
- do{
- i = rand() % SIZE ;
- j = rand() % SIZE ;
- if( ( i + 1 < SIZE ) && ( i - 1 > 0 ) && ( j + 1 < SIZE ) && ( j - 1 > 0 ) &&
- (( j + 2 < SIZE ) || (j - 2 > 0) )){
- if( (Array[i+1][j-2] == POSICAO) && (Array[i+1][j-1] == POSICAO) &&
- (Array[i+1][j] == POSICAO) && (Array[i+1][j+1] == POSICAO) &&
- (Array[i+1][j+2] == POSICAO) ){
- if( (Array[i-1][j-2] == POSICAO) && (Array[i-1][j-1] == POSICAO) &&
- (Array[i-1][j+1] == POSICAO) && (Array[i-1][j+2] == POSICAO) ){
- if( (Array[i-2][j-2] == POSICAO) && (Array[i-2][j-1] == POSICAO) &&
- (Array[i-2][j] == POSICAO) && (Array[i-2][j+1] == POSICAO) &&
- (Array[i-2][j+2] == POSICAO) ){
- if( (Array[i][j-2] == POSICAO) && (Array[i][j+2] == POSICAO)){
- Array[i][j-1] = 72;
- Array[i][j+1] = 72;
- Array[i-1][j] = 72;
- plot = 1;
- }
- }
- }
- }
- }
- }while( plot == 0 );
- }
- }
- void port_plane(int Array[SIZE][SIZE],int i,int j){//ok
- int plot;
- int aux;
- for( aux = 0 ; aux < 1 ; aux++ ){
- plot = 0;
- do{
- i = rand() % SIZE;
- j = rand() % SIZE;
- if( ( i + 1 <= SIZE ) && ( i - 1 >= 0 ) && ( j + 1 <= SIZE ) && ( j - 1 >= 0 ) &&
- ( j + 5 <= SIZE ) ){
- if( Array[i][j-1] == POSICAO && Array[i][j+4] == POSICAO ){
- if( Array[i+1][j-1] == POSICAO && Array[i+1][j] == POSICAO &&
- Array[i+1][j+1] == POSICAO && Array[i+1][j+2] == POSICAO &&
- Array[i+1][j+3] == POSICAO && Array[i+1][j+4] == POSICAO ){
- if( Array[i-1][j-1] == POSICAO && Array[i-1][j] == POSICAO &&
- Array[i-1][j+1] == POSICAO && Array[i-1][j+2] == POSICAO &&
- Array[i-1][j+3] == POSICAO && Array[i-1][j+4] == POSICAO ){
- Array[i][j] = 80;
- Array[i][j+1] = 80;
- Array[i][j+2] = 80;
- Array[i][j+3] = 80;
- Array[i][j+4] = 80;
- plot = 1;
- }
- }
- }
- }
- }while( plot == 0);
- }
- }
- int points(int mask[SIZE][SIZE],int template[SIZE][SIZE],int i,int j,int *pontoP){//ok
- int B=0,
- C=0,
- P=0,
- S=0,
- H=0;
- if ( (template[i][j] == 83) ){
- S = S + 2;
- }
- if ( (template[i][j] == 67) && ( (mask[i][j-1] == 178) || ( mask[i][j+1] == 178 ) ) ) {
- C = C + 5;
- }
- if ( (template[i][j] == 66) && ( (mask[i][j-1] == 178) || (mask[i][j+1] == 178) ) &&
- ( (mask[i][j-2] == 178) || (mask[i][j+2] == 178) ) &&
- ( (mask[i][j-3] == 178) || (mask[i][j+3] == 178) ) ){
- B = B + 10;
- }
- if ( (template[i][j] == 80) && ( (mask[i][j-1] == 178) || (mask[i][j+1] == 178) ) &&
- ( (mask[i][j-2] == 178) || (mask[i][j+2] == 178) ) &&
- ( (mask[i][j-3] == 178) || (mask[i][j+3] == 178) ) &&
- ( (mask[i][j-4] == 178) || (mask[i][j+4] == 178) ) ){
- P = P + 20;
- }
- if ( (template[i][j] == 72) && ( ( (mask[i][j-2] == 178) || (mask[i][j+2] == 178) ) &&
- ( (mask[i-1][j-1] == 178) || (mask[i-1][j+1] == 178) ) ) &&
- ( (mask[i+1][j-1] == 178) || (mask[i+1][j+1] == 178) ) ){
- H = H + 1;
- }
- *pontoP = *pontoP + S + B + C + P + H;
- return *pontoP;
- }
- int shots(int mask[SIZE][SIZE]){
- int i,j,cont=0;
- for( i = 0 ; i < SIZE ; i++ ){
- for( j = 0 ; j < SIZE ; j++ ){
- if( mask[i][j] == 178 ){
- cont++;
- }
- }
- }
- return cont;
- }
- int error(int mask[SIZE][SIZE]){
- int i,j,cont=0;
- for(i=0;i<SIZE;i++){
- for(j=0;j<SIZE;j++){
- if( mask[i][j] == 88){
- cont++;
- }
- }
- }
- return cont;
- }
- int wrecks(int pontos,int pontAnteri){//ok
- if( pontos - pontAnteri == 2 )
- return 1;
- else if( pontos - pontAnteri == 5 )
- return 1;
- else if( pontos - pontAnteri == 10 )
- return 1;
- else if( pontos - pontAnteri == 20 )
- return 1;
- else if( pontos - pontAnteri == 1 )
- return 1;
- return 0;
- }
- void tip(int array[SIZE][SIZE],int i,int j){
- if( array[i][j] == 83 ){
- printf("\n\n\n");
- printf("\a\a\a");
- printf("\n\t\t\t!!! VOCE ACERTOU UM SUBMARINO !!!");
- printf("\n\n\n");
- esperar(2);
- }else if( array[i][j] == 67 ){
- printf("\n\n\n");
- printf("\a\a\a");
- printf("\n\t\t\t!!! VOCE ACERTOU UM CRUZADOR !!!");
- printf("\n\n\n");
- esperar(2);
- }else if( array[i][j] == 66 ){
- printf("\n\n\n");
- printf("\a\a\a");
- printf("\n\t\t\t!!! VOCE ACERTOU UM ENCOURRACADO !!!");
- printf("\n\n\n");
- esperar(2);
- }else if( array[i][j] == 80 ){
- printf("\n\n\n");
- printf("\a\a\a");
- printf("\n\t\t\t!!! VOCE ACERTOU UM PORTA-AVIOES !!!");
- printf("\n\n\n");
- esperar(2);
- }else if( array[i][j] == 72 ){
- printf("\n\n\n");
- printf("\a\a\a");
- printf("\n\t\t\t!!! VOCE ACERTOU UM HIDRO-AVIAO !!!");
- printf("\n\n\n");
- esperar(2);
- }
- }
- void tipPC(int array[SIZE][SIZE],int i,int j){
- if( array[i][j] == 83 ){
- printf("\n\n\n");
- printf("\a\a\a");
- printf("\n\t\t\t!!! COMPUTADOR ACERTOU UM SUBMARINO !!!");
- printf("\n\n\n");
- esperar(2);
- }else if( array[i][j] == 67 ){
- printf("\n\n\n");
- printf("\a\a\a");
- printf("\n\t\t\t!!! COMPUTADOR ACERTOU UM CRUZADOR !!!");
- printf("\n\n\n");
- esperar(2);
- }else if( array[i][j] == 66 ){
- printf("\n\n\n");
- printf("\a\a\a");
- printf("\n\t\t\t!!! COMPUTADOR ACERTOU UM ENCOURRACADO !!!");
- printf("\n\n\n");
- esperar(2);
- }else if( array[i][j] == 80 ){
- printf("\n\n\n");
- printf("\a\a\a");
- printf("\n\t\t\t!!! COMPUTADOR ACERTOU UM PORTA-AVIOES !!!");
- printf("\n\n\n");
- esperar(2);
- }else if( array[i][j] == 72 ){
- printf("\n\n\n");
- printf("\a\a\a");
- printf("\n\t\t\t!!! COMPUTADOR ACERTOU UM HIDRO-AVIAO !!!");
- printf("\n\n\n");
- esperar(2);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement