2012-06-19 60 views
-4

我按旋轉公式旋轉棋子。更詳細地,因爲旋轉角爲90這樣:俄羅斯方塊:旋轉棋子時的問題

xNew = y; 

yNew = -x; 

但我的方法滿足了兩個問題:

1)停止框的:每種類型的塊是裝配在正方形的4×4。 (在左下角0,0)但是在這種旋轉下,在某些情況下,他們會離開這個盒子。例如,座標(5,6)有一個點所以,請幫助我如何再次將這些座標放入4x4框中,或者給我另一個公式。

2)在I情況下:(4行在同一行或同一列),只有兩個旋轉的情況。但在上面的方法中,它們仍然有4個。那麼,如何防止這一點。

謝謝:)

回答

3

俄羅斯方塊板是網格佈局。一個非常簡單的理解方式是,一個俄羅斯方塊片只是一個「填充」的正方形數量。從布爾的意義上說,一件作品可以被視爲0或未填充,或者被填充爲1。使用網格(或基於瓦片)的方法可以防止你的方塊超出邊界,並且當你遇到底部碰撞時,還可以簡化碰撞代碼。

僞代碼:你可以做一個檢查if (!grid[x][y]) block.move(direction),其中grid[x][y]是要移入和block.move(direction)是由一個網格空間調整你的作品,並在地圖中指定的任何方向上的任意功能的空間。在這個意義上,你的遊戲循環也可以使用block.move('down')遞增遞減,else block.stop(), game.generateBlock()用於下一部分。

使用網格方法,您可以輕鬆檢查以查看您的旋轉件是否會超出範圍if(x < 0 || x > gridWidth) block.move(direction),其中direction是與其移出界限相反的方向。

與基於網格的例子繼續,你的作品是真的只是一個開/關,以及和他們的旋轉顯示爲這樣的模式:什麼是這個簡陋的藝術品只是說明

▇ ▇  ▇ ▇ ▇ ▇ ▇ 
    ▇ or ▇ ▇ ▇ or ▇ or  ▇ 
▇ ▇    ▇ 

是由於經常是長方形的棋子,棋子不會圍繞中心點旋轉。然而,模式可以很容易地以它們的布爾狀態存儲,並且您可以跟蹤它所處的位置,並編寫代碼來測試它,而不管方向如何。

由於每件作品都有圖案有限數量的它可以在(最多4個),它可能是你最感興趣的只是硬編碼他們這個答案提供了一些代碼,你會發現鼓舞人心:https://stackoverflow.com/a/8131337/571506

我強烈建議使用這些簡單的變量進行研究和學習一些小的線性代數,如果甚至有一點機會進入3D遊戲編程。由於每件作品都可以作​​爲矩陣存儲,所以可以將簡單的轉換應用到基本的「作品矩陣」中以獲取新的模式。這可以很容易僞造,或者你可以全力以赴。我強烈建議,如果你有進入3D遊戲編程的機會,那麼就用這些簡單的變量來研究和學習一些線性代數。對於算法,看看這個問題:How do you rotate a two dimensional array?

俄羅斯方塊是一個非常有據可查的遊戲,可以添加很多技能到你的'工具箱'。嘗試儘可能多地使用提供的範例,同時手動進行大部分編程,並且從長遠來看,您會發現它非常有用。

0

我不明白的問題2,但對於問題1,你需要做的不僅僅是旋轉,還必須移動一塊在左/右/上/下。

+0

是的。我雖然對你的解決方案。但我認爲這個小問題很複雜,所以我認爲會有另一個很好的解決方案 – hqt

+0

問題2的意思是:如你所見,如果我四次旋轉'|',它只有兩個:'|'和'__' 。但實際上它會有四塊。 (2件其他相同,但在不同的位置!!!) – hqt

+0

這是因爲你沒有圍繞中心旋轉。修復方法與#1相同。我不知道更簡單的解決方案。 –