Jogo dos dezesseis quadrados
Vamos montar o quebra-cabeça dos dezesseis
quadrados, onde tentamos colocar 15 peças (com números de 1 a 15) cada um em seu devido
lugar.
Coloque 16 SpeedButtons no Form
num quadrado (4X4), conforme a figura abaixo, renomeando-os
(no Object Inspector)
para SB com o número equivalente. Ou seja,
SpeedButton1->Name=SB1;
SpeedButton2->Name=SB2;
SpeedButton3->Name=SB3;
SpeedButton4->Name=SB4;
e assim sucessivamente.
![[image]](img_01.gif)
Nota: Os botões devem ser
colocados no Form exatamente como na figura, uma
vez que a movimentação de peças dar-se-á baseada nessa configuração.
Atente para o detalhe de que o cada botão terá o Caption
assinalado (no Object Inspector)
com valor equivalente a seu número. Assim,
SB1 -> Caption = 1;
SB2 -> Caption = 2;
SB3->Caption=3;
SB4->Caption=4;
e assim sucessivamente.
Assinale a propriedade Flat de todos os botões para true.
Assinale a Propriedade GroupIndex (no Object Inspector) de todos os SpeedButtons para 1. Dessa forma estaremos
relacionando-os forçando apenas um a permanecer pressionado (Down). Os outros permanecerão elevados (Down = false).
Vamos alterar o cursor que aparecerá sobre os botões. Assinale, no Object Inspector, as
propriedades Cursor de todos os botões para crHandPoint.
Apenas os botões SB16, SB15 e SB12 terão a propriedade Enabled
assinalada para true; Todos os demais botões (SB1,
SB2, SB3, SB4, SB5, SB6, SB7, SB8, SB9, SB10, SB11, SB13 e SB14) serão setados, inicialmente, para false.
A propriedade Color deve ser marcada para clBlue.
Passemos à codificação.
Em Unit1.cpp, declare uma
variável inteira global, inicializando-a com 16:
int i = 16;
Essa variável servirá para identificar qual botão estava Down,
possibilitando a correta substituição de Caption
entre os botões envolvidos em cada ação (evento OnClick).
Vamos entender a lógica do programa. O botão em estado Down
significa que não há nenhuma peça do quebra-cabeças
nessa posição. Significa, também, que qualquer peça (botão) do quebra-cabeça cincunvizinha a essa posição poderá ocupar este local (alterando-se-lhe a propriedade Down).
Então precisamos ativar (Enabled = true) os botões que podem ser movimentados e desativar (Enabled = false) todos os
demais (que não podem ser movidos).
Nota: Embora no jogo tenhamos essa impressão de movimento, na verdade não é o
botão quem se move. Apenas ativamos e desativamos uma seqüência de botões,
alterando o seu estado e transferindo o Caption que
estava num botão para outro, tornando desnecessária a tarefa de implementar uma ação real de movimento entre as peças
(botões).
Quando um botão receber um evento OnClick, assumirá
o estado Down. Concomitantemente transferirá o seu Caption (que sempre será provisório até que o botão
esteja em sua posição definitiva) para o botão que subiu (estava Down mas elevou-se). Para
verificar o valor do Caption a ser assumido, usamos
a variável i (que sempre guardará esse valor atualizado) dentro de um comando
switch() ... case.
Então a lógica do programa consiste, basicamente, em transferir Captions, ativando e desativando
botões!
Para finalizar, colocamos um menu Arquivo com duas
Opções: Novo (reinicia a partida) e Sair (fecha o programa).
VMS Desenvolvimentos
Diversas
Dicas, Apostilas, Arquivos Fontes, Tutoriais, Vídeo Aula, Download de
Arquivos Relacionado a Programação em C++ Builder.
Voltar
ao Site
|