============
== pin tu ==
============
language: delphi
version: 0.02
author: tony (
[email protected])
date: 2002.01.13
introduction
============
以前看到的拼圖遊戲大多是正方型的圖塊,而且很多甚至只有通過交換兩個圖塊的位置來起到移動的作用,感覺和現實中的拼圖實在是相差太遠了,非常不舒服。
而前不久看到《三國趙雲傳》中副送的一個拼圖遊戲,它的圖塊是不規則邊型的(有凹凸的邊緣),又可以在窗口中隨便拖動任何圖塊,這使我萌生了自己製作一個類似軟體的想法。 (之後又看到了一個名為bjig32的外國的拼圖遊戲,做得太好了,如果是在我開始開發這個程式前看到它的話,也許我就不會想著自己開發了,因為我看來是開發不出像它那麼好的拼圖遊戲的。
how i implement it
==================
遊戲整個系統中包括兩個我自己設計的類,TTuObj和TTuMng。
TTuObj -- 是指圖塊,即被切割後的一小塊圖片,它本身俱有不規則的邊界,並且可以響應滑鼠的拖曳事件,在它所在的容器中移動。我將該類別設計為繼承自TObject,然後在constructor中再分別產生一個TPanel和一個TImage(之所以不是繼承自TControl或直接繼承自TPanel,實在是因為我對使用vcl寫控件還不是很熟悉,如果你可以的話,就改寫一下吧),TPanel的作用是用來產生不規則邊型的形狀,因為TImage沒有Handle,無法改變它的形狀(我認為是這樣的),而TImage用來顯示圖象和提供滑鼠事件。另外每個TTuObj中也記錄著它四周的TTuObj的指針,以及是否已經建立了連接,這樣就可以提供能夠判斷兩個圖塊是否在靠近時建立連接,以及當圖塊連接後移動任何一個圖塊都可以帶動和它已連接的圖塊一起移動。
TTuMng -- 是拼圖遊戲的管理器,由它負責將一張完整的圖片分割後生成一個個圖塊,集中管理它們,並負責判斷是否所有的圖塊都連接起來了(即遊戲結束)。
known bugs
==========
現在整個系統的效率還很低,特別是當移動圖塊時,閃爍非常厲害,我初步判定後認為,是因為當移動一個圖塊時,首先會引發該圖塊本身的PAINT事件,然後會引發該圖塊所在容器的PAINT事件,這意味著所有的圖塊都會被重繪一次,而不規則邊型控制的重繪本來就是低效的,所以會找成如此閃爍。我嘗試過自己處理TTuObj中AImage的WM_PAINT訊息處理函數(就是當正在拖曳圖塊時不允許重繪),但是發現在移動圖塊後,它經過的地方都留下了殘像。而《三國趙雲》中的拼圖遊戲是用directx寫的,一點閃爍都沒有,也許以後我會嘗試用directx來寫它。
hope u can join 和 improve it!!!!!!