-
Posts
22 -
Cadastrado em
-
Última visita
Reputação
24-
@RiXaRd simples cara, o seu unico erro foi ter colocado a atribuição no lugar onde era pra ser uma comparação, veja if (tabuleiro[linha--][coluna--]=' ') { v[linha--][coluna--]='.'; } eu nem tinha reparado, mas o certo é if (tabuleiro[linha--][coluna--] == ' ') { v[linha--][coluna--]='.'; } com 2(dois) = (iguais) adicionado 28 minutos depois @RiXaRd eu cheguei a modificar um pouco seu codigo, caso queira aproveitar alguma coisa esta ai #include<stdio.h> #include<stdlib.h> //----------------------------DEFINIÇÕES--------------------------------------// #define MAX_LINHA 16 #define MAX_COLUNA 16 #define MAX_JOGADAS 75 //----------------------------DECLARACOES GLOBAIS-----------------------------// char v[MAX_LINHA][MAX_COLUNA], tabuleiro[MAX_LINHA][MAX_COLUNA]; int lin,col,jogarDeNovo, x = 0, linha, coluna, opcao, y, contador; //----------------------------------------------------------------------------// //----------------------------CABEÇALHO DAS FUNÇÕES--------------------------// void carregarJogo(); void inicio(); void escolha_mapa(); //----------------------------------------------------------------------------// //Funcao principal do programa int main() { int opcao,l,c,contador; char resp = 'N'; carregarJogo(); //executa uma vez a cada rodada, preenchendo todas as posições com espaco em branco ( ' ' ) escolha_mapa(); system ("cls"); inicio(); system("cls"); inicio(); } //----------------------------------------------------------------------------// //essa funcao faz a matriz ficar com o estilo do mapa, e também preenche com %c, para que o valor possa ser inserido no mapa void inicio() { for (contador=MAX_JOGADAS; contador>0; contador--) { printf(" "); for(int x = 0; x < MAX_COLUNA; x++){ printf("C%02d ", x+1); } printf("\n"); for (linha = 0; linha < MAX_LINHA; linha++) { printf("L%02d |", linha+1); for (int colV = 0; colV < MAX_COLUNA; colV++){ printf(" %c |", v[linha][colV]); } printf("\n"); //printf("L%02d | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c |\n", linha+1,v[linha][0], v[linha][1],v[linha][2],v[linha][3],v[linha][4],v[linha][5],v[linha][6],v[linha][7],v[linha][8],v[linha][9],v[linha][10],v[linha][11],v[linha][12],v[linha][13],v[linha][14],v[linha][15]); } /* for ( ; linha < 15; linha++) { printf("L%d| %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c | %c |\n", linha+1, v[linha][0], v[linha][1],v[linha][2],v[linha][3],v[linha][4],v[linha][5],v[linha][6],v[linha][7],v[linha][8],v[linha][9],v[linha][10],v[linha][11],v[linha][12],v[linha][13],v[linha][14],v[linha][15]); }//*/ printf("Jogadas Restantes: %d\n", contador); printf("Digite as coordenadas: "); scanf("%d %d",&linha,&coluna); if (tabuleiro[linha-1][coluna-1]==' ') { v[linha-1][coluna-1]='.'; } else { v[linha-1][coluna-1]=tabuleiro[linha-1][coluna-1]; } } } //----------------------------------------------------------------------------// // inicializa a matriz com espaço em branco ( ' ' ). void carregarJogo() { int lin, col; for(lin = 0; lin < MAX_LINHA ; lin++) { for(col = 0 ; col < MAX_COLUNA ; col++) { v[lin][col] = ' ' ; tabuleiro[lin][col] = ' ' ; } } } //------------------------------------------------------------------------------// //funcao usada para escolher o mapa quando o jogo inicia void escolha_mapa() { int y; printf("Escolha o mapa que deseja jogar:\n\nDigite 1 para Mar;\n 2 para Lagoa;\n 3 para Rio;\n"); scanf("%d",&opcao); fflush (stdin); switch (opcao) { case 1: //porta aviao tabuleiro[9][2]='p'; tabuleiro[9][3]='p'; tabuleiro[9][4]='p'; tabuleiro[9][5]='p'; tabuleiro[9][6]='p'; //hidroaviao tabuleiro[5][1]='h'; tabuleiro[4][2]='h'; tabuleiro[5][3]='h'; tabuleiro[7][1]='h'; tabuleiro[6][2]='h'; tabuleiro[7][3]='h'; tabuleiro[15][9]='h'; tabuleiro[14][10]='h'; tabuleiro[15][11]='h'; //cruzador tabuleiro[14][10]='c'; tabuleiro[14][11]='c'; tabuleiro[3][8]='c'; tabuleiro[3][9]='c'; tabuleiro[8][8]='c'; tabuleiro[8][9]='c'; //encouracado tabuleiro[1][9]='e'; tabuleiro[1][10]='e'; tabuleiro[1][11]='e'; tabuleiro[1][12]='e'; tabuleiro[4][3]='e'; tabuleiro[4][4]='e'; tabuleiro[4][5]='e'; tabuleiro[4][6]='e'; //submarino tabuleiro[0][1]='s'; tabuleiro[0][9]='s'; tabuleiro[11][6]='s'; tabuleiro[13][12]='s'; break; case 2: //porta aviao tabuleiro[11][2]='p'; tabuleiro[11][3]='p'; tabuleiro[11][4]='p'; tabuleiro[11][5]='p'; tabuleiro[11][6]='p'; //hidroaviao tabuleiro[5][1]='h'; tabuleiro[4][2]='h'; tabuleiro[5][3]='h'; tabuleiro[9][1]='h'; tabuleiro[8][2]='h'; tabuleiro[9][3]='h'; tabuleiro[11][9]='h'; tabuleiro[10][10]='h'; tabuleiro[11][11]='h'; //cruzador tabuleiro[0][10]='c'; tabuleiro[0][11]='c'; tabuleiro[2][10]='c'; tabuleiro[2][11]='c'; tabuleiro[9][8]='c'; tabuleiro[9][9]='c'; //encouracado tabuleiro[8][2]='e'; tabuleiro[8][3]='e'; tabuleiro[8][4]='e'; tabuleiro[8][5]='e'; tabuleiro[10][3]='e'; tabuleiro[10][4]='e'; tabuleiro[10][5]='e'; tabuleiro[10][6]='e'; //submarino tabuleiro[0][1]='s'; tabuleiro[11][9]='s'; tabuleiro[6][6]='s'; tabuleiro[12][12]='s'; break; case 3: //porta aviao tabuleiro[13][13]='p'; tabuleiro[13][12]='p'; tabuleiro[13][11]='p'; tabuleiro[13][10]='p'; tabuleiro[13][9]='p'; //hidroaviao tabuleiro[1][2]='h'; tabuleiro[2][1]='h'; tabuleiro[2][3]='h'; tabuleiro[5][6]='h'; tabuleiro[4][7]='h'; tabuleiro[6][7]='h'; tabuleiro[14][6]='h'; tabuleiro[13][7]='h'; tabuleiro[14][8]='h'; //cruzador tabuleiro[15][15]='c'; tabuleiro[15][14]='c'; tabuleiro[3][10]='c'; tabuleiro[3][11]='c'; tabuleiro[7][2]='c'; tabuleiro[7][3]='c'; //encouracado tabuleiro[6][1]='e'; tabuleiro[7][1]='e'; tabuleiro[8][1]='e'; tabuleiro[9][1]='e'; tabuleiro[4][3]='e'; tabuleiro[4][4]='e'; tabuleiro[4][5]='e'; tabuleiro[4][6]='e'; //submarino tabuleiro[13][4]='s'; tabuleiro[11][11]='s'; tabuleiro[2][14]='s'; tabuleiro[12][12]='s'; break; default: { printf("\nOpcao invalida!!!\n\n"); escolha_mapa(); } } } //--------------------------------FIM DO PROGRAMA-----------------------------// adicionado 30 minutos depois @RiXaRd Outra coisa... qualquer duvida ou se precisar de ajuda pra randomizar a posição dos navios só dar um toque.
-
@RiXaRd hmm... não estou em casa agr para ver o codigo, mas eu olhei aqui e tenho outra dica pra você, quando você usa os operadores de incremento(++) e decremento(--) nas variaveis você acaba armazenando um novo valor a elas, ou seja... if (tabuleiro[linha--][coluna--]=' ') { v[linha--][coluna--]='.'; } acima se tivermos o valor de linha = 0 e coluna = 1 ao passar pelo if a verificação estaria tabuleiro[0][1] e logo após isso as suas variáveis teriam um valo a menos atribuído a elas, quando ele entrasse no if aconteceria um erro de memoria pois ele tentaria acessar um array que não existe em v[-1][0]
-
@RiXaRd tente apenas deixar a variavel tabuleiro global(a que esta fora da main) e apaga esta variavel local que esta dentro da escolha_mapa()
-
@RiXaRd cara, me parece que sua função escolha_mapa() esta setando os valores dos objetos do seu tabuleiro na variavel local desta função e não na variavel global tabuleiro, verifica isso amigo.
-
Relry se cadastrou na comunidade
-
Assembly Procedure (PROC) como passar "parametros"?
Relry respondeu ao tópico de Relry em Programação - outros
@TYSQUARE89 Como assim posicionar os argumentos? Poderia me mostrar um exemplo? -
tenta colocar um "fflush(stdin)" antes do "gets"
-
@moisesC se você quer aconpanhar a declaração e valor de cada variavel (debugar), deve ter uma atalho igual a este no seu CB no canto direito o penultimo item, clina na janelinha com um 'bug'(Debugging windows) e clica em "Watches", logo após você clica no segundo item da esquerda pra direita (Run to cursor), ai ele entra no modo depuração de linha a linha, só você ir apertando F7 pra ele pular para a proxima instrução... caso seu programa for muito grande é só marcar um "Breakpoint" onde quer começar a depurar e apertar no primeiro item "play vermelho"(Debug / Continue)
-
C Problema Alocação Dinâmica e realocação de Struct em C
Relry respondeu ao tópico de gabreu2504 em C/C#/C++
@Gustavo.A.Barroso Nunca fui muito fã de livros, sempre fui curioso e procurava coisas na internet video-aulas e tudo mais, mas uma vez comprei um livro na faculdade pra ajudar nos meus estudos "Treinamento em Linguagem C - Victorine Viviane Mizrahi", confesso que ele ajudou muito e ainda ajuda quando quero relembrar como faz determinada coisa, fala sobre as coisas mais básicas do programa em c até algumas coisas mais avançadas, também trata de ponteiros com códigos de exemplos intuitivos. -
Hoje em dia meus amigos falam que eu sou louco por querer aprender assembly, mas por mais que isso não me dê algum futuro, conhecimento nunca é demais... Eu uso o "GUI Turbo Assembler x64" no meu Windows 7 e estou tentando aprender um pouco sobre essa linguaguem, enfim minha duvida: Se eu fizer uma MACRO no programa eu consigo passar uns "parametros" por exemplo: PosCursor MACRO X, Y mov dl, X ; passa o valor da coordenada X para DL mov dh, Y ; passa o valor da coordenada Y para DH mov ah, 2h ; subfuncao para posicionar cursor mov bx, 0 ; subfuncao para posicionar cursor int 10h ; interrupção para posicionar cursor do console ENDM E então eu poderia simplesmente usar ele assim: PosCursor 5, 10 ; posiciona o cursor do console na posição X = 5 e Y = 10 Agora se eu criar uma Procedure(proc) e chamar ela com o comando "call" teria como passar parâmetros?
-
C Problema Alocação Dinâmica e realocação de Struct em C
Relry respondeu ao tópico de gabreu2504 em C/C#/C++
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> typedef struct { char nome[30]; char email[30]; char telefone[20]; } agenda; agenda* alocar(); void cadastro(agenda*, int *); int realocar(agenda *, int); void consultar(agenda *,int); int main() { int resp; int i = 0; agenda *p = alocar(); while (resp != 9) { printf("\n1 - Cadastrar"); //printf("\n2 - Alterar"); printf("\n3 - Consultar"); // printf("\n4 - Excluir"); // printf("\n5 - Pesquisar"); printf("\n9 - Sair\n"); printf("--> "); scanf("%d",&resp); fflush(stdin); switch(resp){ case 1: cadastro(p,&i); break; case 3: consultar(p,i); break; case 9: break; default: printf("Opcao invalida! "); } printf("\n\nPressione ENTER para continuar..."); getchar(); system("cls"); } return 0; } agenda* alocar() { agenda *p = (agenda*) malloc(1*sizeof(agenda)); if (p!= NULL) { return p; } else { printf("\nMEMORIA INSUFICIENTE\n"); exit(1); } } int realocar(agenda *p,int i) { p = (agenda*) realloc(p,i*sizeof(agenda)); if(p!= NULL) { //printf("\nRealocado com sucesso!"); return 1; } else { //printf("\nN foi possivel realocar!"); return 0; } } void cadastro(agenda*p, int *i) { if(!realocar(p, *i+1)){ // se não conseguir realocar printf("\nN foi possivel adicionar novo contato!"); return; } //int resp; int j = *i; printf("Digite o nome: "); gets(p[j].nome); printf("Digite o email: "); gets(p[j].email); printf("Digite um telefone: "); gets(p[j].telefone); j++; *i = j; /*printf("\nCadastrar mais (s-1/n-0): "); scanf("%d",&resp); system("cls"); while (resp == 1) { realocar(p,j); fflush(stdin); printf("\nDigite o nome: "); gets(p[j].nome); printf("Digite o email: "); gets(p[j].email); printf("Digite um telefone: "); gets(p[j].telefone); printf("\nCadastrar mais (s-1/n-0): "); scanf("%d",&resp); }//*/ } void consultar(agenda *p, int i) { if(i == 0) { printf("\nSem registro!\n"); return; } int k; for (k = 0; k < i; k++) { printf("\nID: %03d", k); printf("\nNome: %s",p[k].nome); printf("\nEmail: %s",p[k].email); printf("\nTelefone: %s\n",p[k].telefone); } } @Gustavo.A.Barroso talvez esse código já te ajude, dei uma alterada em umas partes, da pra melhorar mais, poderia acrescentar um ponteiro para o próximo contado da agenda dentro da struct e um ponteiro global pro ultimo elemento (isso se você já aprendeu a mexer com pilha/lista) -
C Randomicos negativos e positivos no mesmo vetor
Relry respondeu ao tópico de Alberto Estenio em C/C#/C++
for(i=0; i < n; i++){ a[i] = rand()%21-10; } No laço 'for' que coloca os valores aleatórios no vetor você poderia mudar para esse que sortei de -10 até 10 -
@Gustavo Andretto seria uma boa se você usar ponteiros, caso você precise cadastrar mais de 10 alunos você terá um problema
-
@devair1010 por nada man, qualquer coisa só perguntar
-
@1freakday olha não ouvi falar q ela é instável quando procurei na net, até porque estou usando ela aqui numa boa e ta tudo dando certo por enquanto
-
Eu consegui fazer usando o GetConsoleScreenBufferInfo(), pra pegar informações do console como tamanho da tela, posição do cursor. Pra setar o cursor num novo lugar você pode usar SetConsoleCursorPosition()
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais