Controle do Programa no Visual Basic – Parte 2

O Aplicativo Caça-níqueis

Para explorar um pouco mais a instrução If, vamos construir uma simulação de um caça-níqueis. Com o botão de comando fazendo o papel de uma alavanca, o programa Caça-níqueis exibirá três ícones aleatoriamente toda vez que o botão de comando for acionado. Caso os três ícones sejam iguais, o usuário vence. O programa manterá um registro das vitórias do jogador.

Voltaremos a usar aqui os ícones Copas, Paus, Ouro e Espadas, encontrados, respectivamente, nos arquivos HEART.ICO, CLUB.ICO, DIAMOND.ICO e SPADE.ICO no diretório \PacoteVB\Icones\Misc do primeiro cd deste produto. O programa pegará aleatoriamente um desses ícones para cada uma das três janelas do visor. Cada jogada custará R$ 1, 00. Se os três ícones combinarem, o jogador ganhará R$ 10, 00. Se os três forem de Ouro, o jogador ganhará R$25,00.

Pensando a Respeito

Reveja com rigor todas as condições, quando estiver programando com instruções If. É preciso ser cuidadoso para não incluir acidentalmente opções inesperadas ou, inversamente, excluir condições que deveriam ser tratadas. Não seja precipitado em assumir que o seu primeiro impulso para escrever uma cláusula Else cubra somente as alternativas possíveis.

A codificação escrita para identificar os Três Patetas, por exemplo, assume que, se Curly e Moe foram eliminados, a única possibilidade que resta é Larry. Entretanto, como sabem os estudantes da arte cinematográfica, realmente há outras possibilidades, tais como Shemp ou Curly-Joe. (Para quem não está familiarizado com a arte cinematográfica, o trio Moe Howard, Larry Fine e Curly Howard protagonizou a maioria dos filmes dos Três Patetas. Entretanto, após Curly sofrer um acidente, os filmes posteriores foram feitos com outras pessoas no papel do terceiro Pateta.)

Para um exemplo semelhante desse tipo de erro, imagine o teste da cor de um elemento. Caso não seja branco ou vermelho, podemos assumir que seja azul. Isso funciona se você sabe que todos os elementos a serem testados pertencem à bandeira americana; do contrário, o seu teste poderá tornar-se inválido.

Para desenhar a interface do programa, crie um novo projeto. Inclua três controles de imagem na parte superior do form, que serão usados como o visor do caça-níqueis. Abaixo dos controles de imagem, coloque o botão de comando que servirá como alavanca da máquina. À esquerda, acrescente um campo de rótulo para exibir as vitórias do jogador; à direita, crie outro botão de comando que permitirá ao jogador sair do jogo. Finalmente, para acomodar os quatro ícones que serão usados, inclua mais quatro controles de imagem na parte inferior do form. O seu form deverá parecer-se com o mostrado na Figura 6.7.

Para configurar os quatro controles de imagem inferiores, inicie selecionando o mais à esquerda e configurando a sua propriedade Name para ImgCopas. A seguir, configure a propriedade Picture, selecionando Picture na lista de propriedades, e dê um clique no botão de reticências, ao lado da propriedade. Na caixa de diálogo Load Picture, escolha o arquivo HEART.ICO a partir do subdiretório \PacoteVB \ Icones\Misc no primeiro cd deste produto. Repita esse processo para os outros três controles de imagem, nomeando-os como lmgPaus, lmgOuros e lmgEspadas e configurando as suas propriedades Picture de forma a carregar os arquivos CLUB.ICO, DIAMOND.ICO e SPADE.ICO, nesta ordem.

Figura6.7 - O projeto inicial do form para o aplicativo Caça-níqueis

Figura6.7 - O projeto inicial do form para o aplicativo Caça-níqueis

Agora, configure as propriedades dos elementos de exibição, como mostrado na Figura 6.8. O seu form agora deve parecer-se com a Figura 6.9.

Figura 6.8

Figura 6.8

Para iniciar a codificação do programa, dê um clique duplo no form, para abrir a janela de código. Inclua as seguintes linhas de código na seção de declarações gerais:
Const COPAS% = 1
Const PAUS% = 2
Const OUROS% = 3
Const ESPADAS% = 4
Dim Vitórias As Currency

Os inteiros de 1 a 4 mapearão os números gerados aleatoriamente para os ícones apropriados. As declarações de constantes permitem-lhe usar os nomes COPAS, PAUS, OUROS e ESPADAS no programa, simplificando sua leitura e compreensão. A variável Vitórias, que também foi declarada neste ponto, será usada para armazenar as vitórias do jogador.

Figura 6.9 - O desenho do form completo para o aplicativo Caça-níquel

Figura 6.9 - O desenho do form completo para o aplicativo Caça-níquel

Agora, selecione Form na caixa Object da janela de código e selecione o procedimento Load na caixa de procedimentos. Inclua estas linhas de código, que serão executadas quando o form for carregado pela primeira vez (isto é, no início do programa):
Private Sub Form_Load ()
Randomize
Vitórias = 0
End Sub

A instrução Randomize avisa ao Visual Basic para alternar os números produzidos pelo gerador de números aleatórios; sem essa instrução, haveria uma repetição dos números gerados toda vez que o programa fosse executado. Uma vez que o jogador ainda não começou a jogar, você deve zerar a variável Vitórias.

Veja a seguir o código para o botão Sair:
Private Sub btnSair_Click ()
End
End Sub

O procedimento para o botão Jogada é apresentado na Figura 6.10. Cada uma das variáveis locais P1, P2 e P3 armazenará o número aleatório que será usado para selecionar os ícones que aparecerão nos controles de imagem superiores (ImgVisor1, lmgVisor2 e ImgVisor3). A variável Pagar conterá o resultado de cada jogada (um giro do caça-níqueis).

Figura 6.10 - Procedimento btnJogada_Click para o aplicativo Caça-níquel

Figura 6.10 - Procedimento btnJogada_Click para o aplicativo Caça-níquel

Em primeiro lugar, o programa abate R$1,00 do total de vitórias, ou seja, o custo de uma jogada. A seguir, são gerados três números aleatórios. A fórmula Int(n * Rnd + 1) usa a função interna do Visual Basic Rnd para recuperar um inteiro aleatório dentro da faixa de 1 a n.

Após isso, o programa examina o número inteiro gerado e armazenado em P1 e configura a propriedade Picture do controle ImgVisor1, para copiar a imagem de um dos ícones predefinidos na parte inferior do form. Esse processo repete-se para os outros dois visores, ImgVisor2 e lmgVisor3.

Uma vez configurado o visor do caça-níqueis, o programa verifica se ocorreu alguma combinação vencedora. Se os três número forem iguais, o jogador vence. Além disso, o programa verifica se a combinação vencedora é composta por ouros. A variável Pagar é então assinalada para 10 ou 25, de acordo com a combinação que ocorreu. Caso o jogador não tenha vencido, a variável Pagar é zerada.

Finalmente, o programa adiciona o valor contido na variável Pagar ao total acumulado do jogador e exibe o total apurado no rótulo. A função Format do Visual Basic assegura que o total seja apresentado em reais e centavos de reais.

Ao fechar a janela de código, você estará pronto para executar o aplicativo. Entretanto, antes de fazê-lo, redimensione o form para esconder os quatro ícones predefinidos, conforme mostrado na Figura 6.11. Eles continuarão a fazer parte de seu aplicativo, mas já não aparecerão na interação com o usuário.
Você se sente com sorte? Pressione F5 e faça algumas tentativas. Quando terminar o jogo, pode ser que você queira salvar esse aplicativo para retornar mais tarde a ele.

Figura 6.11 - O form redimensionado para o aplicativo Caça-níquel

Figura 6.11 - O form redimensionado para o aplicativo Caça-níquel

Uma alternativa a ElseIf: Select Case

No aplicativo Caça-níquel, você fez uso da palavra ElseIf para criar testes de múltiplas possibilidades. Uma outra instrução do Visual Basic lhe serviria ao mesmo propósito e com maior riqueza de recursos e clareza. Trata-se da instrução Select Case.

A instrução Select Case é uma estrutura de tomada de decisão que obedece a sintaxe abaixo:

Select Case expressãodeteste
[Case listadeexpressões
[instruções]] …
[Case Else
[instruçõeselse]]
End Select

Onde:

Expressãodeteste é qualquer expressão a ser testada quanto ao seu valor. listadeexpressões lista de uma ou mais expressões numa das seguintes formas de arranjo: expressão; expressão To expressão; Is operadordecomparação expressão. A palavra To especifica um intervalo de valores. Se você usa a palavra To, a expressão de menor valor deve vir antes do To. Use a palavra Is com operadores de comparação ( exceto Is e Like) para especificar um intervalo de valores. Se não for fornecida, a palavra Is é automaticamente inserida.

Instruções pode ser uma ou mais instruções executadas se o valor da expressão sendo testada conferir com o valor de alguma das expressões da lista de expressões na cláusula Case.
Instruçõeselse são opcionais. Representam uma ou mais instruções que serão executadas caso nenhuma das cláusulas Case contiver uma expressão cujo valor confira com o da expressão sendo testada.
Se quiser utilizar Select Case no aplicativo Caça-níquel, você pode, por exemplo, substituir os testes das variáveis P1, P2 e P3 pelo seguinte código:

Select Case P1
Case COPAS:
ImgVisor1.Picture = ImgCopas.Picture
Case PAUS:
ImgVisor1.Picture = ImgPAUS.Picture
Case OUROS:
ImgVisor1.Picture = ImgOUROS.Picture
Case ESPADAS:
ImgVisor1.Picture = ImgESPADAS.Picture
End Select
Select Case P2
Case COPAS:
ImgVisor2.Picture = ImgCopas.Picture
Case PAUS:
ImgVisor2.Picture = ImgPAUS.Picture
Case OUROS:
ImgVisor2.Picture = ImgOUROS.Picture
Case ESPADAS:
ImgVisor2.Picture = ImgESPADAS.Picture
End Select
Select Case P3
Case COPAS:
ImgVisor3.Picture = ImgCopas.Picture
Case PAUS:
ImgVisor3.Picture = ImgPAUS.Picture
Case OUROS:
ImgVisor3.Picture = ImgOUROS.Picture
Case ESPADAS:
ImgVisor3.Picture = ImgESPADAS.Picture
End Select

Tornando-se Repetitivo

A habilidade de escrever instruções de assinalamento, e fazer escolhas usando a instrução If teoricamente lhe dá as ferramentas necessárias para criar qualquer tipo de programa. Porém, muitas tarefas são mais fáceis em teoria do que na prática. Considere o problema de imprimir todos os números do intervalo de 1 a 1000. A solução óbvia, escrever um programa contendo 1000 instruções Print (Print 1, Print 2, Print 3 e assim por diante), seria extremamente fatigante. Felizmente, o Visual Basic oferece um meio melhor.

A instrução Do do Visual Basic pode processar repetidamente um conjunto de instruções. Eis a sintaxe mais simples para essa instrução:

Do
[instrução] …
Loop

A palavra-chave Do marca o início de uma instrução composta, que inclui todos os comandos até a palavra-chave Loop. As instruções são executadas em ordem até que a palavra-chave Loop seja encontrada; nesse ponto, a execução começa novamente no inicio do bloco com a instrução Do.

O conjunto de instruções que se repete é chamado de laço. Quando um programa está executando repetidamente esse conjunto de instruções, costuma-se dizer que está em looping. O nome laço provém do diagrama circular de fluxo de programa mostrado na Figura 6.12

O laço mostrado na Figura 6.12 é um lago infinito, isto é, o Visual Basic executará a instrução composta para sempre. E claro que, normalmente, você desejará que o programa interrompa a estrutura de laço em algum ponto, passando a executar as instruções que existem após o laço. O Visual Basic permite-lhe implementar isso de várias formas.

Figura 6.12 - Um diagrama de laço Do

Figura 6.12 - Um diagrama de laço Do

Você pode anexar uma cláusula While (enquanto) à instrução Do ou à instrução Loop. O exemplo de impressão dos números de 1 a 1000 é tratado mais facilmente com um laço Do While, como mostrado a seguir:

Contador = 1
Do While Contador <= 1000
Print Contador
Contador = Contador + 1
Loop

A variável Contador recebe o valor 1. Então, a instrução Do While, que é executada “enquanto” o Contador for menor ou igual a 1000, envolve uma instrução Print e uma instrução de assinalamento. Quando o laço se encerrar, a execução continuará com as instruções do programa que se seguem à palavra-chave Loop.

A palavra-chave While deve ser seguida por uma condição com o formato de uma expressão booleana. Caso a expressão seja False, as instruções que a seguem, até a palavra-chave Loop, serão saltadas e a execução do programa prosseguirá com as instruções que vêm após a instrução Loop. Neste exemplo, Contador é verificado no início de cada laço, inclusive no primeiro. (Se Contador tivesse sido inicializado com 5000, nenhuma das instruções dentro do laço seria executada.)

Observe que, se a instrução Contador = Contador + 1 não tivesse sido incluída, a expressão booleana seria sempre True (pois Contador permaneceria com o valor 1) e o laço seria eternamente executado. A criação de laços infinitos é um erro comum, mesmo entre os programadores mais experientes. Lembre-se de que, em Visual Basic, você pode sempre pressionar Ctrl-Break para interromper um programa que está sendo executado e sair do laço infinito.

A palavra-chave While também pode ser associada à instrução Loop, obtendo-se um efeito um pouco diferente, como mostrado neste código:

Do
Password = lnputBox (“Digite a senha”)
Loop While Password “Mussum”

A colocação da cláusula While no final do laço assegura que as instruções contidas no laço sejam executadas pelo menos uma vez, pois o teste de terminação ocorre após a palavra-chave Loop. Neste exemplo, a caixa de diálogo solicitando ao usuário a digitação da senha será exibida repetidamente, até que o usuário introduza a palavra certa.

Finalmente, para melhorar a legibilidade de seu programa, você pode usar a palavra-chave Until (até que) em vez de While. O uso de Until inverte a lógica da condição. Compare os dois exemplos anteriores, usando cada uma das alternativas.

Exemplos usando While
Contador = 1
Do While Contador <= 1000
Print Contador
Contador = Contador + 1
Loop
Do
Password = lnputBox(“Digite a Senha”)
Loop While Password <> “Mussurn”
Exemplos usando Until
Contador = 1
Do Until Contador > 1000
Print Contado
Contador = Contador + 1
Loop
Do
Password = lnputBox(“Digite a Senha”)
Loop Until Password = “Mussum”

Eis a sintaxe completa para a instrução Do no Visual Basic:

Teste no início do laço:

Do [While | Until] expressão
[Instrução]
Loop
Teste no final do laço
Do
[Instrução]
Loop [While I Until] expressão

Artigo gentilmente cedido por Codelines

Compatilhe esse artigo!

Um comentário sobre “Controle do Programa no Visual Basic – Parte 2

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.