Sei sulla pagina 1di 4

Algoritmo

Faa um algoritmo que leia uma matriz 20x20, cada posio da matriz deve conter um asterisco (*) ou um trao (-). O asterisco representa uma bomba. O trao representa um local sem bomba. Observando a matriz lida, crie uma segunda matriz 20x20 de inteiros que contenha para cada posio o nmero de bombas existentes na vizinhana. Sabe-se ainda que cada posio tem no mximo 8 vizinhos. Veja no exemplo a seguir:

Exemplo: O elemento A(4,4) contm um trao, ou seja, no tem bomba nele. Em torno dele existem 5 posies que contm bomba, por isso, na matriz de sada, na B(4,4) ele recebe o nmero 5, indicando que existem 5 bombas ao redor dele. Crie uma terceira etapa, onde o usurio (jogador) vai informar coordenadas de linha e coluna e o algoritmo dever informar duas situaes: - Se o elemento no for bomba, escrever quantas bombas existem na vizinhana; - Se o elemento for bomba, acaba o jogo. Jogar at que todos os campos sem bomba tenham sido desermadas.

Roger Poletto Neris Dias 2 Semestre Cincia da Computao UNIGRAN

Algoritmo {declarao das variveis} Declare MAT_A [1:20, 1:20], JOGADOR literal; Declare MAT_B [1:20, 1:20], X, Y inteiro; Declare LINHA, COLUNA, LINHA_V, COLUNA_V inteiro; Declare CONT_BOMBA, POS_MAT, TOTAL_BOMBA, TOTAL_SEM_BOMBA inteiro; Declare SN_CAMP inteiro; {inicializao do contador de bombas de toda a matriz} TOTAL_BOMBAS 0; {contador do nmero de posies existentes na matriz} POS_MAT 0; {inicializao da matriz A} Para LINHA de 1 at 20 faa Para COLUNA de 1 at 20 faa Repita Escreva Informe o elemento, (*) para local com bomba e (-) para local sem bomba: ; Leia MAT_A[LINHA, COLUNA]; At-que (MAT_A[LINHA, COLUNA] = * ou MAT_A [LINHA, COLUNA] = -); {contador do nmero de posies existentes na matriz} POS_MAT POS_MAT +1; Fim-para; Fim-para;

Para LINHA de 1 at 20 faa Para COLUNA de 1 at 20 faa CONT_BOMBA 0;

{criando as 8 posies vizinhas de cada posio da matriz} Para LINHA_V de LINHA-1 at LINHA+1 faa Para COLUNA_V de COLUNA-1 at COLUNA+1 faa {comparao das 8 posies vizinhas de cada posio da matriz} Se (LINHA_V > 0) e (LINHA_V < 21) e (COLUNA_V > 0) e (COLUNA_V < 21) e ( LINHA_V <> LINHA) e (COLUNA_V <> COLUNA) e (MAT_A[LINHA_V, COLUNA_V] = *) ento {contador de bombas vizinhas de cada posio da matriz} CONT_BOMBA CONT_BOMBA+1;

{contador de bombas existentes em toda a matriz} TOTAL_BOMBA TOTAL_BOMBA+1; Fim-se; Fim-para; Fim-para; {armazenando o numero de bombas vizinhas de cada posio na matriz B} MAT_B[LINHA, COLUNA] CONT_BOMBA; Fim-para; Fim-para; {total das posies que no possuem bomba} TOTAL_SEM_BOMBA POS_MAT TOTAL_BOMBA; {comeando o jogo} JOGADA COMEAR;

{enquanto a varivel JOGADA no receber valor TERMINAR, haver jogo} Enquanto JOGADA <> TERMINAR faa {inicializando o jogo com a posio de jogada} Escreva Informe a posio x,y para sua jogada; Repita Escreva Informe a posio para x(linha); Leia X; Ate-que (X>1) e (X<21); Repita Escreva Informe a posicao para y(coluna); Leia Y; Ate-que (Y>1) e (Y<21); {inicializando JOGADA para que posse entrar no looping} Para LINHA de 1 at 20 faa Para COLUNA de 1 at 20 faa {se o valor de X e de Y que o usurio digitou for correspondente ao lopping da matriz} Se (X=LINHA) e (Y=COLUNA) ento

{se a posio da matriz A estiver com o caracter (*), significa BOMBA no local e termina o jogo} Se MAT_A[LINHA, COLUNA] = * ento Escreva BOMBA, voc perdeu o jogo; JOGADA TERMINAR; {se a posio da matriz A estiver com o caracter (O), significa que j foi feita uma jogada nessa posio e o usurio direcionado a entrar com outro valor de X e Y} Seno Se MAT_A[LINHA, COLUNA] = O ento Escreva Jogada j feita antes, por favor escolha outra posio; JOGADA COMEAR; {se a posio da matriz A estiver com o caracter (-), significa que possvel fazer a jogada} Seno Se MAT_A[LINHA, COLUNA] = - ento Escreva Jogada feita; Escreva Esta posio possui , MAT_B[LINHA, COLUNA] , bomba(s) vizinha(s); {atribui-se o caracter (O) na posio, para que se o usurio for tentar entrar com a mesma posio j jogada antes, identificado, e uma mensagem mostrada a ele} MAT_A[LINHA, COLUNA] O; { decremento do numero de campos sem bomba} SN_CAMP TOTAL_SEM_BOMBA 1; fim-se; JOGADA COMEAR; {se SN_CAMP=0, significa que o numero de posies sem bombas acabaram, e houve um ganhador} Se SN_CAMP = 0 ento Escreva PARABNS, voc foi o Campeo do Jogo; JOGADA TERMINAR; Fim-se; Fim-se; Fim-se; Fim-se; Fim-se; Fim-para; Fim-para; Fim-enquanto; Fim-algoritmo;

Potrebbero piacerti anche