• 0
Sign in to follow this  
Victor Pasini

Sortear posições aleatórias numa matriz e trocá-las de valor

Question

Boa tarde, estou criando um jogo de campo minado a pedido do meu professor e estou tendo dificuldade ao gerar bombas aleatórias na minha matriz 9x9. Eu utilizo a função

rand(); com seed srand(time(NULL));


 para gerar colunas e linhas aleatórias (i e j) que estão funcionando, mas no momento em que troco a matriz[j] pelo valor da bomba = -1, sempre me retorna uma matriz com todas as bombas numa mesma linha. Segue o código do programa e um print do que acontece.
http://prntscr.com/keomvl

void sorteiaBombas(int campoMinado[9][9]) {
	int i = 0, j = 0, bombas = 0;
	srand(time(NULL));
	while(bombas < 10) {
		i = rand() % 10;
		j = rand() % 10;
		if(campoMinado[i][j] == 0)
		{	
			printf("i = %d e j = %d\n", i, j);
			campoMinado[i][j] = -1;
			bombas++;
		}
	}
	
}


A matriz campoMinado é uma matriz preenchida apenas com 0's (nula)

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0
#include<stdio.h>
#include <stdlib.h>
#include <time.h>

#define TAM 9

void sorteiaBombas(int campoMinado[TAM][TAM]) {
	int i, j, bombas = 0;
	
	while(bombas < 10) {
		i = rand() % 10;
		j = rand() % 10;
		
		if(campoMinado[i][j] == 0){	
			campoMinado[i][j] = -1;
			bombas++;
		}
	}
	

	
}

int main(){
    srand(time(NULL));
    
    int m[TAM][TAM] = {0}, i, j;
    
    sorteiaBombas(m);
    
	for (i=0; i<TAM; i++ ) {
	    for (j=0; j<TAM; j++) {
	        printf("%2d ", m[i][j]);
	    }
	    putchar('\n');    
	}
	
    putchar('\n');
    
    return 0;
}

srand somente se chama uma vez, ao inicio de main

Share this post


Link to post
Share on other sites
  • 0

Quanto

Em 05/08/2018 at 14:32, vangodp disse:

i = rand() % 10; 

j = rand() % 10;    ×

Se a matriz[TAM][TAM] seus índices são -1< (i,j) < TAM. 

j = rand () % TAM;    ✓

Edited by britivaldo
Deletar redundância

Share this post


Link to post
Share on other sites
  • 0
19 horas atrás, britivaldo disse:

Quanto

Se a matriz[TAM][TAM] seus índices são -1< (i,j) < TAM. 

j = rand () % TAM;    ✓

es vero. Algumas partes somente copiei do programa do autor, deveria ter prestado mais atenção.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this