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]


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.

Agora, para facilitar, dê uma olhada no Text do programa clicando aqui. Algumas propriedades podem ser alteradas a seu bel prazer; Outras, não.

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).

Clique aqui para visualizar o código completo dessa unidade




HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO