============
== fixar você ==
============
Idioma: delphi
versão: 0,02
autor: tony (
[email protected])
data: 13/01/2002
introdução
============
A maioria dos quebra-cabeças que já vi têm peças quadradas, e muitos deles só podem ser movidos trocando as posições de duas peças. É tão diferente dos quebra-cabeças reais que é muito desconfortável.
Não faz muito tempo, vi um quebra-cabeça incluído em “A Lenda de Zhao Yun dos Três Reinos”. Seus ladrilhos têm bordas irregulares (com bordas côncavas e convexas), e você pode arrastar qualquer ladrilho na janela. ... Tive a ideia de fazer eu mesmo um software semelhante. (Então eu vi um quebra-cabeça estrangeiro chamado bjig32. Era muito bom. Se eu tivesse visto antes de começar a desenvolver este programa, talvez não tivesse pensado em desenvolvê-lo sozinho, porque na minha opinião não há como desenvolver um jogo de quebra-cabeça tão bom quanto ele.)
como eu implemento isso
==================
Todo o sistema do jogo inclui duas classes desenvolvidas por mim, TTuObj e TTuMng.
TTuObj - refere-se a um bloco, que é um pequeno pedaço de imagem após ser cortado. Possui limites irregulares e pode se mover no contêiner em que está localizado em resposta a eventos de arrastar do mouse. Eu projetei esta classe para herdar do TObject e então gerar um TPanel e um TImage respectivamente no construtor (a razão pela qual ela não é herdada do TControl ou herdada diretamente do TPanel é porque não estou muito familiarizado com o uso de vcl para escrever controles. Se você puder, reescreva-o), TPanel é usado para gerar formas irregulares de borda, porque TImage não possui um identificador e não pode alterar sua forma (acho que sim), e TImage é usado para exibir imagens e fornece eventos de mouse. Além disso, cada TTuObj também registra os ponteiros do TTuObj ao seu redor e se uma conexão foi estabelecida. Isso fornece a capacidade de determinar se as duas peças estão conectadas quando estão próximas uma da outra e de mover qualquer peça após as peças. estão conectados. Ele pode mover as peças às quais está conectado.
TTuMng - é o gerenciador do jogo de quebra-cabeça. É responsável por dividir uma imagem completa em peças individuais, gerenciando-as centralmente e determinando se todas as peças estão conectadas (ou seja, o jogo acabou).
erros conhecidos
==========
A eficiência de todo o sistema ainda é muito baixa, principalmente ao mover um ladrilho, a oscilação é muito severa. Após julgamento preliminar, acho que é porque quando um ladrilho é movido, o evento PAINT do próprio ladrilho será acionado primeiro. e então o evento PAINT do próprio ladrilho será acionado. O evento PAINT do contêiner onde o ladrilho está localizado, o que significa que todos os ladrilhos serão redesenhados uma vez. O redesenho de controles de borda irregular é inerentemente ineficiente, portanto piscará assim. . Tentei lidar com a função de processamento de mensagens WM_PAINT de AImage no TtuObj (ou seja, redesenhar não é permitido quando o bloco está sendo arrastado), mas descobri que depois de mover o bloco, ele deixava uma imagem residual por onde passava. O jogo de quebra-cabeça em “Três Reinos Zhao Yun” foi escrito em DirectX e não houve nenhuma oscilação. Talvez eu tente escrevê-lo em DirectX no futuro.
espero que você possa participar e melhorar !!!!!!