Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

diiogofernandes

Ajuda em Trabalho

Recommended Posts

diiogofernandes

Boas pessoal...é assim tenho de fazer um jogo para duas disciplinas de Algoritmos e Programação sendo programação em C

e estou com umas certas dificuldades numa parte do jogo  :down: e é o seguinte eu tenho uma matriz imaginemos uma matriz de [10] por [10]

e eu tenho uma posição dessa matriz que quero que haja deslocação! as deslocações possíveis são 8 posições sem contar como é óbvio na posição que já está ou seja pode haver deslocação em volta dessa posição de uma casa! o movimento é feito através de um random e esse random só pode devolver valores entre -1 e 1 ou seja (-1 ou 0 ou 1) e o problema é que não consigo fazer o random de números negativos alguém sabe como se faz????

a ideia é se tiver matriz[linha][coluna]

faço um random supostamente entre -1 e 1 e outro random (random2) entre -1 e 1 então ficaria

matriz[linha + random][coluna + random2] e assim ele só pode movimentar-se entre as posições a sua volta certo???

alguém me ajuda no random ou alguém tem outra sugestão para fazer isto?

Obrigado desde já  :wallbash:

                 

Share this post


Link to post
Share on other sites
pmg

Não te esqueças de testar se podes fazer a soma (ou subtracção)

matriz[0-1][5+1] é inválido

matriz[7-1][9+1] também é inválido


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
diiogofernandes

obrigado aos dois!!

Não te esqueças de testar se podes fazer a soma (ou subtracção)

matriz[0-1][5+1] é inválido

matriz[7-1][9+1] também é inválido

sim vou ter que validar as somas e subtracções

pmg só não percebi o segundo exemplo que mostras-te porque é que é inválida, ou me está a escapar algo ou não estou mesmo a ver....

no primeiro exemplo a matriz [-1][6] a posição -1 não existe na matriz logo é inválido, agora o segundo exemplo matriz[6][10] se for uma matriz [10][10] está contida e pode haver movimento para essa posição....ou o que é que me está a escapar.....

Share this post


Link to post
Share on other sites
Baderous

Se a dimensão é 10, os índices variam de 0 até 9, logo matriz[7-1][9+1], ou seja, matriz [6][10] vai aceder a uma posição de memória que não faz parte da matriz.

Share this post


Link to post
Share on other sites
diiogofernandes

pessoal aqui com um novo problema com o random ao principio pareceu-me que tava a funcionar mas agora reparei que afinal não está (não faz aquilo que quero) mas também não estou a perceber bem se é do random se é dos ciclos for...tou um pouco baralhado com isto tudo....

deixo aqui o código:

for (i = 0; i < 10; i++) {
        for (j = 0; j < 10; j++) {
            for (k=0; k < 1; k++){
                deslocamento = rand() % 2  ;
                deslocamento1 = rand() % 2 ;
                deslocamento = deslocamento -1;
                deslocamento1= deslocamento1 - 1;
                
                   if (matriz[i][j]== 'x'){
                        if (matriz[i+ deslocamento][j + deslocamento1] == ' '){
                            matriz[i + deslocamento][j + deslocamento] = 'x';
                            matriz[i][j] = ' ';
                        }
                    }
            }
            printf("%c", matriz[i][j]);
        }
        printf("\n");
        
    }

o que estarei eu a fazer mal ?? é que as vezes não há deslocação o que é normal mas outras vezes desloca-se para posições que eu não quero por exemplo deixo aqui uma imagem feita no paint a pressa mas penso que dá para perceber os 'x' a verde é para onde se pode deslocar caso não haja lá nada os 'x' a vermelho não pode se deslocar para lá pelo menos numa vez a segunda por exemplo se movimentar da sua posição para baixo a segunda vez já pode ir para o vermelho mas a primeira não...só que quando faz o printf ele muitas vezes já está no vermelho.....será dos ciclos for??? não estou a perceber bem isto, estou um pouco confuso.....

semttulosa8.jpg

http://img255.imageshack.us/my.php?image=semttulosa8.jpg

Share this post


Link to post
Share on other sites
Baderous

Estás a referir matriz como se fosse um array e isso está mal. Provavelmente o que tu queres é isto:

if (matriz[i][j]== 'x'){
                        if (matriz[i+ deslocamento][j + deslocamento1] == ' '){
                            matriz[i + deslocamento][j + deslocamento] = 'x';
                            matriz[i][j] = ' ';
                        }
                    }
            }
            printf("%c", matriz[i][j]);

Share this post


Link to post
Share on other sites
TheDark

Tense [deslocamento] em vez de [deslocamento1] na linha onde afectas com 'x'.

rand() % 2 vai dar-te um número entre 0 e 1, não entre 0 e 2.

Não experimentei, mas penso que problema que notaste é causado pelo seguinte:

Imagina que tens o seguinte na matriz:

_| | |_

| |x|_

| | |_

| | |

os ciclos for passam a 1ª linha e não alteram nada; passam a 2ª linha e movem o x para a linha de baixo, assim:

_| | |_

| | |_

| |x|_

| | |

depois vão passar a 3ª linha e encontram de novo o x, e voltam a movê-lo para a linha de baixo:

_| | |_

| | |_

| | |_

| |x|

E pronto, numa passagem o x movimentou-se 2 casas.


Desaparecido.

Share this post


Link to post
Share on other sites
diiogofernandes

Estás a referir matriz como se fosse um array e isso está mal. Provavelmente o que tu queres é isto:

if (matriz[i][j]== 'x'){
                        if (matriz[i+ deslocamento][j + deslocamento1] == ' '){
                            matriz[i + deslocamento][j + deslocamento] = 'x';
                            matriz[i][j] = ' ';
                        }
                    }
            }
            printf("%c", matriz[i][j]);

tao mas esse código ta igual ao que eu postei....

Tense [deslocamento] em vez de [deslocamento1] na linha onde afectas com 'x'.

Já tinha reparado depois de postar e já tinha corrigido no programa :thumbsup:

rand() % 2 vai dar-te um número entre 0 e 1, não entre 0 e 2.

tao para fazer entre -1 e 1 terei de fazer o seguinte :

deslocamento = rand() % 3  ;

deslocamento1 = rand() % 3 ;

deslocamento = deslocamento - 1 ;

deslocamento1 = deslocamento1 - 1;

assim cobra todas as possibilidades certo?

Não experimentei, mas penso que problema que notaste é causado pelo seguinte:

Imagina que tens o seguinte na matriz:

_| | |_

| |x|_

| | |_

| | |

os ciclos for passam a 1ª linha e não alteram nada; passam a 2ª linha e movem o x para a linha de baixo, assim:

_| | |_

| | |_

| |x|_

| | |

depois vão passar a 3ª linha e encontram de novo o x, e voltam a movê-lo para a linha de baixo:

_| | |_

| | |_

| | |_

| |x|

E pronto, numa passagem o x movimentou-se 2 casas.

penso que seja isso mesmo, o problema é o seguinte eu tenho de correr a matriz para ver onde está o 'x' e movimentar todos os 'x' para a sua volta onde não estiver nada... como é que poderei fazer isso, só estou a ver correr a matriz como estou a fazer e sendo assim vai sempre ou quase sempre saltar várias posições....

Share this post


Link to post
Share on other sites
TheDark

tao mas esse código ta igual ao que eu postei....

Como não puseste o código dentro das tags code, o [ i] do if não se via (é a tag de itálico).

tao para fazer entre -1 e 1 terei de fazer o seguinte :

deslocamento = rand() % 3  ;

deslocamento1 = rand() % 3 ;

deslocamento = deslocamento - 1 ;

deslocamento1 = deslocamento1 - 1;

assim cobra todas as possibilidades certo?

Exactamente!

penso que seja isso mesmo, o problema é o seguinte eu tenho de correr a matriz para ver onde está o 'x' e movimentar todos os 'x' para a sua volta onde não estiver nada... como é que poderei fazer isso, só estou a ver correr a matriz como estou a fazer e sendo assim vai sempre ou quase sempre saltar várias posições....

Uma solução passaria por escreveres num array temporário, e no fim copiares os valores desse array para o original. Outra possibilidade era utilizares outro caracter para indicar um x que se tivesse movido, por exemplo y. Depois percorrias de novo o array e substituías os y por x.

Talvez exista uma solução melhor, mas estas foram as que me surgiram mais rapidamente.


Desaparecido.

Share this post


Link to post
Share on other sites
diiogofernandes

obrigado pela ajuda....vou pensar noutra solução melhor se não, sigo as tuas dicas, obrigado mais uma vez :thumbsup:

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.