俄羅斯方塊板是網格佈局。一個非常簡單的理解方式是,一個俄羅斯方塊片只是一個「填充」的正方形數量。從布爾的意義上說,一件作品可以被視爲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?
俄羅斯方塊是一個非常有據可查的遊戲,可以添加很多技能到你的'工具箱'。嘗試儘可能多地使用提供的範例,同時手動進行大部分編程,並且從長遠來看,您會發現它非常有用。
是的。我雖然對你的解決方案。但我認爲這個小問題很複雜,所以我認爲會有另一個很好的解決方案 – hqt
問題2的意思是:如你所見,如果我四次旋轉'|',它只有兩個:'|'和'__' 。但實際上它會有四塊。 (2件其他相同,但在不同的位置!!!) – hqt
這是因爲你沒有圍繞中心旋轉。修復方法與#1相同。我不知道更簡單的解決方案。 –