close

在youtube上看到有人用C++寫一個俄羅斯方塊,雖然以前也有看到但是都沒有實際去做,最近就想說來做一下。

影片: Let's make 16 games in C++: TETRIS - YouTube

要做這個俄羅斯方塊要使用SFML這套函式庫,我也有寫一篇SFML設置教學。

SFML設置超連結


我主要是要講解程式&俄羅斯方塊的設計,所以底下的程式並不是完整的程式碼。

 

●建立一個空視窗

○顯示圖片至視窗中

●製造方塊

○旋轉&移動

●邊界的偵測

○方塊顏色的變化

●行的檢查


建立一個空視窗

image


 

顯示圖片至視窗中

介紹: Sprites and textures (SFML / Learn / 2.5 Tutorials) (sfml-dev.org)

image


製造方塊

image

 

image

 

程式右邊第一個for所做的事,第二個for就是把剛剛運算的東西把一個方塊複製成4個就會是我們在視窗中所看到的。

image


 

旋轉&移動

鍵盤事件跟移動比較簡單,難的是在轉向。

image

 

下面這些是轉向的運算。

image

 

image

 

這兩行是配使用的,time就是這兩行之間的時間,是從視窗開啟計算,所以delay越小,速度越快。

image


邊界的偵測

這個部分算是我覺得最疑惑的地方,因為你根本不知道這行程式它的功用,也算是我覺得最難想的地方。

 

image

 

 

image


方塊顏色的變化

image


行的檢查

image

檢查是否有行可以消,因為空間不足所以這個圖就是10*10的,首先有兩行for第一行for9~0下到上一直跑,而第2for0~9右到左一直跑,其實就跟九九乘法表一樣的for

 

image

我們看第6count的值是8,所以小於N9,就不會有動作。

 

 

image

 

image

當我們多了一個方塊,放進來是不是count的值是9,並沒有小於9,所以k不會減1,那i的值跟k的值是連動的,只要k的值沒有減,k的值是不是會變成上一行的,也就是說,其實並沒有行的值被削掉,只是被上一行取代而已。

 


 

大致上俄羅斯方塊的運作流程都講完了,我覺得最難理解的地方是邊界的判斷,我還只是推測他是這樣子去做判斷的我也沒有100趴地確定,如果有錯的地方我會更改,當然如果有不懂的可以到底下留言(如果我會的話)。

 

有些圖片+文字會比較小是因為我是在ppt上面畫完之後在複製過來的,所以有些文字+圖片會比較小請見諒。

arrow
arrow
    創作者介紹
    創作者 讀書小天地 的頭像
    讀書小天地

    書籍分享天地

    讀書小天地 發表在 痞客邦 留言(0) 人氣()