1. 俄羅斯方塊游戲的 演算法實現(或者設計原理)
這是個優化問題,目標函數是最終得分,變數是每個方塊的得分,邊界條件就是樓主所說的「同等條件」。
解決該問題,需要知道「同等條件」,即總的方塊數以及每個方塊的形狀、出現順序。知道了這些條件,即可以編程實現演算法。
每個方塊含有各自的狀態,變換只需改變到下一個狀態就行了,完全可以用數組來實現(不用寫旋轉演算法了:)
比如:
/* 方塊類型為 ■■■■ */
char[2][4][4] B1={{{0,1,0,0},{0,1,0,0},{0,1,0,0},{0,1,0,0}},
{{0,0,0,0},{1,1,1,1},{0,0,0,0},{0,0,0,0}}};
含兩種狀態,每個狀態是一個4*4數組,為1表示實心,為0表示空心.
□■□□
□■□□
□■□□
□■□□
□□□□
■■■■
□□□□
□□□□
再詳細的就不用說了吧
2. 俄羅斯方塊演算法 總共需要多少個矩陣
俄羅斯方塊的演算法很簡單啊,286的機器運行都不會有速度問題,速度慢不是因為矩陣的原因,你看看你的演算法是不是有問題啊?
3. 哪位大神給我講解一下俄羅斯方塊的演算法C語言
首先你得有個俄羅斯方塊界面的概念,它就是M*N的一個2維數組,那麼一個方塊向左移動的極限就是有一個點已經到了最左邊。
拿一個豎條為例,他本身是一個4*4的小格子,當他是豎條時可以看成
0010
0010
0010
0010
向左移動時,只要判斷1是否在左邊邊界,沒有就往左一格,另外要注意邊橫桿時,要先判斷是否最左邊越界,有越界就不能變化
4. 用C語言編寫俄羅斯方塊,怎樣產生七種基本方塊圖形和19種變換圖形,要具體實現的代碼
用3維數組來存放七種基本方塊圖形:
例如:
int BOX[7][4][4]={
{
{1,1,1,1}, // ----型
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,1,0}, // 1---型
{1,0,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,1,0}, // ---1型
{0,0,1,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,1,0}, // -T-型
{0,1,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,0,0}, // -T_型
{0,1,1,0},
{0,0,0,0},
{0,0,0,0}
},
{
{0,1,1,0}, // _T-型
{1,1,0,0},
{0,0,0,0},
{0,0,0,0}
},
{
{1,1,0,0}, // 田型
{1,1,0,0},
{0,0,0,0},
{0,0,0,0}
}
};
為了方便讀取,減少程序中演算法上的開銷(比如進行4*4矩陣的轉置),
我建議你將19種變換圖形也用3維數組來存放,
例如:
|
|
型:
{
{1,0,0,0}, // ----型
{1,0,0,0},
{1,0,0,0},
{1,0,0,0}
},
|_型:
{
{1,0,0,0}, // 1---型
{1,0,0,0},
{1,1,0,0},
{0,0,0,0}
},
5. 做俄羅斯方塊的思路或演算法是什麼
我用MFC做過俄羅斯方塊:
整個場景是一個10*20的長方形空間,你要建立一個10*20的數組int num[20][10]模仿之,你可以想像這是200個小塊,每個小塊只有0和1兩種狀態,為0時相應該位置為空白,為1時相應該位置畫一個小方塊.
每一個圖形由4個小方塊組成,當他落到底停住時,你就要把數組num的相應數項由0改成1(num數組初始化全為0),同時在OnPaint(可能有時是OnDraw)函數中根據數組的0,1情況重繪,思路就是這樣的.很簡單
6. 尋找關於俄羅斯方塊程序的演算法,不要程序,只要演算法
核心演算法:
這里把游戲的關鍵設計放在三個盒子和一個坐標上:
大盒子:一個兩維數組,記錄著方塊點陣的開與關(把游戲的舞台想像
成一個點陣),在下面也把這個東西稱為地圖
兩個5*5小盒子:兩維數組,一個盛放著正在下落的方塊,一個盛放在
下一個下落的方塊(即next),當然這兩個也必須想像成一個點陣:如長條
的點陣為:
00000
00100
00100
00100
00100
現在你只要有這么一個概念:一個不斷定時下落的小盒子從大盒子頂
部下降到底部,之後再將next盒子放在下落盒子,再進行下一輪的下落...
中間的控制等尚不要太著急.
現在面臨著一個問題:
下落的盒子和地圖之間要怎麼聯系起來?
一個好的方法是再定義一個坐標:x,y,保存著小盒子左上角在地圖上對應
的下標(位置),即當x = 0, y = 0時,小盒子處於地圖的左上部.如此,當
小盒子需要移動時,即只須要改變x,y的值.
現在說說旋轉.
小盒子保存著當前下落形狀的點陣,那麼旋轉就只須要將這個點陣旋
轉90度:例如:
00000 00000
00100 00000
00100 -> 01111
00100 00000
00100 00000
這一點實現起來還是不太難的.
判斷碰撞
通常這種情況只須要在有移動小盒或旋轉盒子時發生:也即點陣非空
是互斥的,當小盒要向下移(x++)時,如果小盒裡的點陣與地圖上的點陣(非
空的地方)重疊,則不能下移,(卡住了),旋轉則轉換後的形狀與地圖有沖
突則要放棄旋轉.
到了這里,你應該有一個大概的了解了,至於怎樣在屏幕上畫出來,這
個是比較簡單的
7. 俄羅斯方塊演算法
用二維數組表示方塊所在的整個區域,0表示有方塊,1表示有方塊。從上往下,從左往右開始輸出區域。
判斷消行,也就是當方塊下落後,從它所停留那一行(記錄此行)開始,計算每一行是否全為1,如果全為1,則往下繼續判斷下一行,再記錄消行的行數。
判斷完畢後,開始將這幾行數據全變為0即可。然後就是下降。
比如從第8行開始,消2行,也就是8,9行消掉。此時應該讓前面7行往下落2行。也就是第9行數據等於第7行,第8行數據等於第6行,以此類推。寫一個循環
就可以了。
8. 俄羅斯方塊設計都有哪些方法
求1個基於mfc的C++小游戲程序,類似於俄羅斯方塊,
小Q書桌有
C++用面向對象的方法進行俄羅斯方塊游戲設計:
你都有c的代碼了,改成c++還不簡單么?就是個