Puyo-Puyo設計文檔

來源:互聯網
上載者:User
 

Puyo-Puyo設計文檔需求原文:Purpose: ---------- The goal of this exercise is to develop a JAVA or C/C++ version of Puyo-Puyo, a variation of the Tetris game.Rules of Game: --------------- * Spheres come down from the top of the game board in pairs. A player can rotate them on their way down.  * Spheres come in 4 different colors: red, blue, green, and yellow  * Linking four spheres of the same color (horizontally, vertically or both(as in tetris)) removes them from the game board, allowing any sphere remaining to drop and fill the vacated space. This may lead to several possible "chain combos" if additional colors match.  * The game board can be any size you want (we recommend 6x12)  l       Note that the pair of spheres are not linked to each other. If one sphere is blocked because there is something underneath, the other one will continue falling (with no player control over it) until it reaches something.:思路:剛拿到題時感覺這遊戲以前玩過,不過規則不太一樣,所以心裡對遊戲效果就有了一個比效好的認識。(要想做遊戲,先要玩遊戲,有道理啊)正好最近正在研究俄羅斯方塊的演算法,所以自然地在心中把兩者聯絡到了一起。這裡說說當時心中的比較結果吧:1. 俄羅斯方塊是單色的(當然有彩的),其基本表示就是一個二維數組,數組中每個元素值取0和1,表示有沒有方塊。這個總體上來說也一樣,只不過多取幾個值來表示不同的顏色罷了。0無1紅2藍3綠4黃2. 俄羅斯方塊一共有7種不同的積木,而這個就簡單多了,只有一對球,呵呵。3. 移動與碰撞檢測兩者幾乎一樣。就是那對球不是相連的,這個要另外考慮。4. 消除演算法。俄羅斯方塊是一消一整行,演算法上來說很好實現。而這個需要進行搜尋,而且還會出現連消的情況,這應該是這個小遊戲的一個痛點吧。卻實在實現時花了不少時間來想演算法。5. 失敗條件兩者一樣。都是檢測第一行是否有東西。。。。。。。 實現:因為第一次全部是自己設計,所以不知道自己的開發流程怎麼樣,希望有經驗的人指點一下: 遊戲是什嗎?這個問題在以前的自己看來是個很複雜的問題,但是自從上學期學了《編譯原理》後我就有個概念了(雖然學完了什麼也不會,能過了就謝天謝地了),遊戲就是一個有限狀態機器!先想好遊戲有幾個不同的狀態,而各種狀態之間滿足什麼條件才能互相轉換。雖然一開始我並沒有從這個角度來思考問題,但是下一次我一定會的。不過這個遊戲不用狀態機器也可以,我才設了三個狀態,好像有點多此一舉似的。不過我發現用了狀態機器之後邏輯上來說很清晰,寫起來就輕鬆多了。有必要的話,可以用Visio先畫個狀態轉換圖。 從實現流程來說我是這樣做的:遊戲後台資料表示(說白了就一個二維數組)--à實現繪圖部分(就是把數組畫出來)---->下落球產生演算法---->遊戲失敗判定---à下落球移動演算法(這裡我沒注意單個球下落時不能控制的情況,感謝“我”的提醒。注意:“我”不是我自己,是一個ID叫“我”的人-_-!)--à下落球旋轉演算法--à遊戲操作實現--à消除演算法--à連消實現(這個其實沒什麼,把前面寫的方法按一定順序調用一下就行了) 最把積分加上了,又調了幾個BUG,加入了遊戲暫停,算是完成了吧?我只是做個Demo,並不是做個實際去玩的遊戲,所以很多方面沒實現,後面會提到。 各部分的詳細說明:1. 下落球產生每次產生一對球,這對球有以下屬性:兩個球的顏色。初始各取隨機值兩個球的方向。有水平和垂直兩種,初始取水平兩個球的數目。因為有單球下落的情況,所以這也是一種狀態。兩個球的座標。以左球為準,垂直時以下面的球為準,單個球時以什麼為準?還用問嗎?! 私人的方法:是否能左移,是否能右移,(是否能下移) 這對球對外的方法:左移,右移,旋轉,從水平旋轉到垂直時交換兩球顏色,反之不交換
      R           G  
R G G   G R R  
 下移,如果能下落就反回true掉落,這個簡單,直接while(下移()){}搞定 繪製(這個按圖形系統實現不同有所不同)這裡都要分方向和數目兩種狀態分別討論 2. 消除演算法我承認自己資料結構學得不怎麼樣,演算法也夠差勁的,但是總算還是想出來了,效率可能差點吧,不過玩遊戲的時候CPU佔用率很少,也就沒在意了J先給定一種顏色把數組複製一份,因為搜尋的時候要設標誌位順序遍曆整個二維數組,如果遇到與給定著色相同的球,那麼把它加入一個List,並把它的值設為0(就是無色,相當於刪掉了,防止後面會被搜到)對List中的每個元素,搜尋與它鄰的同色球,並加入List。加入的同時將其從數組中刪除.當List遍曆完後,所有相鄰的球都找出來,判斷個數是否>=4,如果是,則從原數組中消去。(積分就是從這裡算的) 清空List,按上述過程繼續遍曆二維數組 就這樣每一次消除就拷貝一份數組,然後分4種不同的顏色遍曆4遍。。。(如果你有更好的演算法,請告訴我,謝謝!) 3.連索消除    在第一次消除之後可能要有繼續下落的球(因為下面空了嘛!)繼續下落演算法:    從下到上掃描,如果當前座標為空白而當前座標的上面非空,那麼交換兩個座標組應的值。 這樣就整體下落一格。每個刻度下落一次,就出現了逐漸下落的動畫效果。(比一下跌下來Cool多了!)   還有什麼需要補充的嗎?應該夠了吧?自己多想想,別老是看代碼.

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.