Batalha naval..

1. Batalha naval..

Hudson Moreira Guimaraes dos Santos
hudyfx

(usa Outra)

Enviado em 20/05/2012 - 16:22h

ola amigos aqui do vol, tudo bem?
a tempos que eu não posta nada aqui... rsrsr
bom é o seguinte... estava sem muito oque fazer e decidi fazer um jogo em C para me distrair, eis que fiz esse código a baixo:
se alguém quiser aproveitar pra fazer alguma coisa, fiquem a vontade...
ele funciona porem ainda falta um monte de coisa... bom é isso faloww!!!

#include <stdio.h>
#include <stdlib.h>
void tela (char m[][9], char v[][9], int acerto, int erro){
system("clear");
printf(" +---------------------------++---------------------------+\n");
printf(" | Jogadas || acetos / erros |\n");
printf(" +---------------------------++---------------------------+\n");
printf( " [8]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[8][0],m[8][1],m[8][2],m[8][3],m[8][4],m[8][5],m[8][6],m[8][7],m[8][8],
v[8][0],v[8][1],v[8][2],v[8][3],v[8][4],v[8][5],v[8][6],v[8][7],v[8][8] );

printf( " [7]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[7][0],m[7][1],m[7][2],m[7][3],m[7][4],m[7][5],m[7][6],m[7][7],m[7][8],
v[7][0],v[7][1],v[7][2],v[7][3],v[7][4],v[7][5],v[7][6],v[7][7],v[7][8] );

printf(" [6]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[6][0],m[6][1],m[6][2],m[6][3],m[6][4],m[6][5],m[6][6],m[6][7],m[6][8],
v[6][0],v[6][1],v[6][2],v[6][3],v[6][4],v[6][5],v[6][6],v[6][7],v[6][8] );

printf( "(X)[5]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[5][0],m[5][1],m[5][2],m[5][3],m[5][4],m[5][5],m[5][6],m[5][7],m[5][8],
v[5][0],v[5][1],v[5][2],v[5][3],v[5][4],v[5][5],v[5][6],v[5][7],v[5][8] );

printf( " [4]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[4][0],m[4][1],m[4][2],m[4][3],m[4][4],m[4][5],m[4][6],m[4][7],m[4][8],
v[4][0],v[4][1],v[4][2],v[4][3],v[4][4],v[4][5],v[4][6],v[4][7],v[4][8] );

printf( " [3]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[3][0],m[3][1],m[3][2],m[3][3],m[3][4],m[3][5],m[3][6],m[3][7],m[3][8],
v[3][0],v[3][1],v[3][2],v[3][3],v[3][4],v[3][5],v[3][6],v[3][7],v[3][8] );

printf( " [2]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[2][0],m[2][1],m[2][2],m[2][3],m[2][4],m[2][5],m[2][6],m[2][7],m[2][8],
v[2][0],v[2][1],v[2][2],v[2][3],v[2][4],v[2][5],v[2][6],v[2][7],v[2][8] );

printf( " [1]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[1][0],m[1][1],m[1][2],m[1][3],m[1][4],m[1][5],m[1][6],m[1][7],m[1][8],
v[1][0],v[1][1],v[1][2],v[1][3],v[1][4],v[1][5],v[1][6],v[1][7],v[1][8] );

printf( " [0]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[0][0],m[0][1],m[0][2],m[0][3],m[0][4],m[0][5],m[0][6],m[0][7],m[0][8],
v[0][0],v[0][1],v[0][2],v[0][3],v[0][4],v[0][5],v[0][6],v[0][7],v[0][8] );
printf(" +---------------------------++---------------------------+\n");
printf(" [0][1][2][3][4][5][6][7][8] [0][1][2][3][4][5][6][7][8] \n");
printf(" (Y)\n");
printf(" +---------------+\n");
printf(" ^ | Legenda |\n");
printf(" | +-+-------------+\n");
printf("X| |*| Jogadas |\n");
printf(" +----> |@| Acertos |\n");
printf(" Y |#| Erros | Numero de acertos: %d\n",acerto);
printf(" +-+-------------+ Numero de erros: %d\n",erro);
}

void main (){
char m[9][9]; // m = matriz
char v[9][9]; // v = acertos
char b[9][9]; // v = alvos
int x,y,acerto = 0, erro = 0;
for (x = 0; x<=8; x++){
for (y=0; y<=8; y++){
v[x][y]= ' ';
m[x][y]= ' ';
b[x][y]= ' ';
}
}
//alvos
b[2][1]='@';b[7][5]='@';b[0][6]='@';b[2][2]='@';b[6][6]='@';b[1][6]='@';
b[2][3]='@';b[5][7]='@';b[2][6]='@';b[1][0]='@';b[4][8]='@';b[3][6]='@';
b[2][0]='@';b[6][1]='@';b[4][6]='@';b[3][0]='@';b[7][2]='@';b[4][0]='@';
b[8][3]='@';
//
//inicio do jogo
tela(m,v,acerto,erro);

for (;;){
printf("\n [x] = ");scanf("%d",&x);
printf("\n [y] = ");scanf("%d",&y);
if (b[x][y] == '@'){
m[x][y] = '*';v[x][y] = '@';acerto++;
} else {
m[x][y] = '*';v[x][y] = '#';erro++;
}
tela(m,v,acerto,erro);
}
}


falowww


  


2. Re: Batalha naval..

euteste da silva
foxbit3r

(usa Solaris)

Enviado em 20/05/2012 - 21:32h

Parabéns ficou muito legal.


3. Re: Batalha naval..

Hudson Moreira Guimaraes dos Santos
hudyfx

(usa Outra)

Enviado em 20/05/2012 - 22:30h

opa, valeu...
na verdade eu fiz essa parada pq eu não lembrava como se passa uma matriz por referencia através de uma função, ai eu li que tinha que colocar um índice para determinar a profundidade do vetor interno da matriz tipo, se a matriz é m[9][7], eu tenho que declarar na função assim: void f1( char m[][7]), saco?
e como eu não tinha nada pra fazer eu fiz essa pardinha ai...
valeuwww


4. Re: Batalha naval..

Felipe Tarijon de Almeida
felipest9

(usa Ubuntu)

Enviado em 21/05/2012 - 15:03h

Muito bom!Ainda sou iniciante na linguagem C e eu quero saber quanto tempo você demorou pra fazer esse jogo.

Ahh, e parabéns.


5. Re: Batalha naval..

Hudson Moreira Guimaraes dos Santos
hudyfx

(usa Outra)

Enviado em 21/05/2012 - 23:47h

opa beleza @felipest9 ... então cara eu não sei programar direite em C, na verdade eu programo em outras linguagens tenho que fazer essas paradinhas pra tentar pegar os comandos do C saca?
eu levei uns 30min pra fazer essa pipoca... vou dar uma garibada depois e apresento um melhor bele? mas o objetivo é que alguém ajude a melhorar saca? me disseram que o software livre é assim... vc coloca suas ideias na net e, se alguém se interessar ela ajuda ou não...
to vendo se isso funciona rsrsrs falowww



6. Re: Batalha naval..

???
gokernel

(usa Linux Mint)

Enviado em 22/05/2012 - 19:32h

Olá !

Sem querer ser um estraga prazer, mas já ouviram falar em uma biblioteca gráfica indicada para games chamada SDL ???


7. Re: Batalha naval..

Hudson Moreira Guimaraes dos Santos
hudyfx

(usa Outra)

Enviado em 22/05/2012 - 22:26h

@gokernel então cara eu só fiz essa parada pra estudar estrutura de dados saca? eu estava vendo o lance de matriz por passagem por referencia, acredito que dessa forma fica mais facil e entender, mas o lance da biblioteca grafica é plausível...
valeu!!!


8. Sobre o jogo

Alessandra de Franca
AlessandraFF18

(usa Outra)

Enviado em 12/11/2013 - 22:50h

Cara primeiramente parabéns o jogo está uma maravilha.
Será que você poderia me explicar a lógica desse jogo, tipo passo a passo do que você pensou p/ criar esse jogo?

O que significa, esse M, V alocado ai...
E esse %c (char) qual a função dele nesse alocamento?
printf(" [8]| [%c][%c][%c][%c][%c][%c][%c][%c][%c]||[%c][%c][%c][%c][%c][%c][%c][%c][%c]|\n",
m[8][0],m[8][1],m[8][2],m[8][3],m[8][4],m[8][5],m[8][6],m[8][7],m[8][8],
v[8][0],v[8][1],v[8][2],v[8][3],v[8][4],v[8][5],v[8][6],v[8][7],v[8][8]);


Se poder... Desde já agradeço.


9. resposta

Hudson Moreira Guimaraes dos Santos
hudyfx

(usa Outra)

Enviado em 13/11/2013 - 22:15h

ola AlessandraFF18, primeiramente desculpas por demorar a responder…
pois bem…
faz muito tempo que fiz esse codigo… mas de todo modo acredito que consegui te explicar…
primeira eu imaginei um cartão simples de batalha naval

http://trabalhosujo.s3.amazonaws.com/trabalhosujo/wp-content/uploads/2011/12/batalhanaval.jpg

dai eu vi que tudo é montado em cima de um plano cartesiano onde se pode localizar determinada posição através de coordenadas x y, vc précisa de duas matrizes multi-dimencionais… a da esquerda fica o local onde vc atira , e a da direita mostra onde é colocado os barcos ocultos onde… que supostamente se deve adivinhar onde se encontrar os bardos

observando isso criei uma matris chamda V e outra M (podia ser qualquer letra)
cada uma com o mesmo numero de dimensão 9x9 do tipo char por que ela só vai receber 1 unico caractere
@,# ou *
e por fim uma chamar B para receber os alvos

ficando assim
char m[9][9]; // m = matriz
char v[9][9]; // v = acertos
char b[9][9]; // v = alvos


fiz esse loop para limpar a matriz com caratere em branca para limpar a tela

  
for (x = 0; x<=8; x++){
for (y=0; y<=8; y++){
v[x][y]= ' ';
m[x][y]= ' ';
b[x][y]= ' ';
}
}


depois dei o print das duas matrizes com os seus respecivos valores na seqüência.
a matris é do tipo 'char'
por isso que o printf ficou assim:


printf( " [8]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[8][0],m[8][1],m[8][2],m[8][3],m[8][4],m[8][5],m[8][6],m[8][7],m[8][8],
v[8][0],v[8][1],v[8][2],v[8][3],v[8][4],v[8][5],v[8][6],v[8][7],v[8][8] );


e por fim eu verifico se na posição x y da matris 'b' tem tem o '@', se sim eu mudo o mesmo na matris 'm' e 'v'
e contabilizo os erros e acertos…

for (;;){
printf("\n [x] = ");scanf("%d",&x);
printf("\n [y] = ");scanf("%d",&y);
if (b[x][y] == '@'){
m[x][y] = '*';v[x][y] = '@';acerto++;
} else {
m[x][y] = '*';v[x][y] = '#';erro++;
}
tela(m,v,acerto,erro);
}



é isso qualquer outra duvida pergunta ai … ;)


10. Re: Batalha naval..

ian cléver sales fernandes
ianclever

(usa Arch Linux)

Enviado em 13/11/2013 - 23:19h

tá no rumo, mas ainda dá para melhorar, melhorei dois bugs bobos que vc não tinha achado, seria o caso de a pessoa digitar uma letra por engano no lugar do numero, seu código iria entrar em um loop infinito, e o outro vc não tinha uma opção de saída no código eu coloquei:


#include <stdio.h>
#include <stdlib.h>
void tela (char m[][9], char v[][9], int acerto, int erro){
system("clear");
printf(" +---------------------------++---------------------------+\n");
printf(" | Jogadas || acetos / erros |\n");
printf(" +---------------------------++---------------------------+\n");
printf( " [8]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[8][0],m[8][1],m[8][2],m[8][3],m[8][4],m[8][5],m[8][6],m[8][7],m[8][8],
v[8][0],v[8][1],v[8][2],v[8][3],v[8][4],v[8][5],v[8][6],v[8][7],v[8][8] );

printf( " [7]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[7][0],m[7][1],m[7][2],m[7][3],m[7][4],m[7][5],m[7][6],m[7][7],m[7][8],
v[7][0],v[7][1],v[7][2],v[7][3],v[7][4],v[7][5],v[7][6],v[7][7],v[7][8] );

printf(" [6]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[6][0],m[6][1],m[6][2],m[6][3],m[6][4],m[6][5],m[6][6],m[6][7],m[6][8],
v[6][0],v[6][1],v[6][2],v[6][3],v[6][4],v[6][5],v[6][6],v[6][7],v[6][8] );

printf( "(X)[5]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[5][0],m[5][1],m[5][2],m[5][3],m[5][4],m[5][5],m[5][6],m[5][7],m[5][8],
v[5][0],v[5][1],v[5][2],v[5][3],v[5][4],v[5][5],v[5][6],v[5][7],v[5][8] );

printf( " [4]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[4][0],m[4][1],m[4][2],m[4][3],m[4][4],m[4][5],m[4][6],m[4][7],m[4][8],
v[4][0],v[4][1],v[4][2],v[4][3],v[4][4],v[4][5],v[4][6],v[4][7],v[4][8] );

printf( " [3]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[3][0],m[3][1],m[3][2],m[3][3],m[3][4],m[3][5],m[3][6],m[3][7],m[3][8],
v[3][0],v[3][1],v[3][2],v[3][3],v[3][4],v[3][5],v[3][6],v[3][7],v[3][8] );

printf( " [2]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[2][0],m[2][1],m[2][2],m[2][3],m[2][4],m[2][5],m[2][6],m[2][7],m[2][8],
v[2][0],v[2][1],v[2][2],v[2][3],v[2][4],v[2][5],v[2][6],v[2][7],v[2][8] );

printf( " [1]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[1][0],m[1][1],m[1][2],m[1][3],m[1][4],m[1][5],m[1][6],m[1][7],m[1][8],
v[1][0],v[1][1],v[1][2],v[1][3],v[1][4],v[1][5],v[1][6],v[1][7],v[1][8] );

printf( " [0]| %c %c %c %c %c %c %c %c %c || %c %c %c %c %c %c %c %c %c |\n",
m[0][0],m[0][1],m[0][2],m[0][3],m[0][4],m[0][5],m[0][6],m[0][7],m[0][8],
v[0][0],v[0][1],v[0][2],v[0][3],v[0][4],v[0][5],v[0][6],v[0][7],v[0][8] );
printf(" +---------------------------++---------------------------+\n");
printf(" [0][1][2][3][4][5][6][7][8] [0][1][2][3][4][5][6][7][8] \n");
printf(" (Y)\n");
printf(" +---------------+\n");
printf(" ^ | Legenda |\n");
printf(" | +-+-------------+\n");
printf("X| |*| Jogadas |\n");
printf(" +----> |@| Acertos |\n");
printf(" Y |#| Erros | Numero de acertos: %d\n",acerto);
printf(" +-+-------------+ Numero de erros: %d\n",erro);
printf(" Digite -1 para sair\n");
}

void main (){
char m[9][9]; // m = matriz
char v[9][9]; // v = acertos
char b[9][9]; // v = alvos
int x,y,acerto = 0, erro = 0;
for (x = 0; x<=8; x++){
for (y=0; y<=8; y++){
v[x][y]= ' ';
m[x][y]= ' ';
b[x][y]= ' ';
}
}
//alvos
b[2][1]='@';b[7][5]='@';b[0][6]='@';b[2][2]='@';b[6][6]='@';b[1][6]='@';
b[2][3]='@';b[5][7]='@';b[2][6]='@';b[1][0]='@';b[4][8]='@';b[3][6]='@';
b[2][0]='@';b[6][1]='@';b[4][6]='@';b[3][0]='@';b[7][2]='@';b[4][0]='@';
b[8][3]='@';
//
//inicio do jogo
tela(m,v,acerto,erro);

for (;;){
printf("\n [x] = ");scanf("%d[0-9]",&x);//antes dava bug se vc digitasse uma letra ou outra coisa que não fosse um numero
__fpurge(stdin);//limpa o buffer senão vai congelar seu programa para sempre
if(x==-1)//para o código
exit(0);
printf("\n [y] = ");
scanf("%d[0-9]",&y);//antes dava bug se vc digitasse uma letra ou outra coisa que não fosse um numero
__fpurge(stdin);//limpa o buffer senão vai congelar seu programa para sempre
if(x==-1)//para o codigo
exit(0);
if ((b[x][y] == '@')&&(x>-1 && x<9)&&(y>-1 && y<9)){
puts("\nif");
m[x][y] = '*';
v[x][y] = '@';
acerto++;
x=-2;//previne contra erros caso vc digite uma letra por engano
y=-2;
} else {
if ((x>-1 && x<9)&&(y>-1 && y<9)){
m[x][y] = '*';
v[x][y] = '#';
erro++;
}
x=-2;//previne contra erros caso vc digite uma letra por engano
y=-2;
}
tela(m,v,acerto,erro);
}
}


existe ainda outro problema que vc não notou, vc tem que guardar as posições que já foram acertadas, pq senão vai gerar vários acertos inexistentes, ex.: se eu digitar x=2 e y=3 duas vezes irá gerar 2 acertos quando na verdade só deveria gerar 1.

e por ultimo uma coisa que poderia ser melhorada é os alvos, vc poderia gerar aleatóriamente com a função rand, pq com o passar do tempo a jogada fica majada.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts