在youtube上看到有人用C++寫一個俄羅斯方塊,雖然以前也有看到但是都沒有實際去做,最近就想說來做一下。
影片: Let's make 16 games in C++: TETRIS - YouTube
要做這個俄羅斯方塊要使用SFML這套函式庫,我也有寫一篇SFML設置教學。
我主要是要講解程式&俄羅斯方塊的設計,所以底下的程式並不是完整的程式碼。
●建立一個空視窗
○顯示圖片至視窗中
●製造方塊
○旋轉&移動
●邊界的偵測
○方塊顏色的變化
●行的檢查
建立一個空視窗
顯示圖片至視窗中
介紹: Sprites and textures (SFML / Learn / 2.5 Tutorials) (sfml-dev.org)
製造方塊
程式右邊第一個for所做的事,第二個for就是把剛剛運算的東西把一個方塊複製成4個就會是我們在視窗中所看到的。
旋轉&移動
鍵盤事件跟移動比較簡單,難的是在轉向。
下面這些是轉向的運算。
這兩行是搭配使用的,time就是這兩行之間的時間,是從視窗開啟計算,所以delay越小,速度越快。
邊界的偵測
這個部分算是我覺得最疑惑的地方,因為你根本不知道這行程式它的功用,也算是我覺得最難想的地方。
方塊顏色的變化
行的檢查
檢查是否有行可以消,因為空間不足所以這個圖就是10*10的,首先有兩行for第一行for是9~0下到上一直跑,而第2個for是0~9右到左一直跑,其實就跟九九乘法表一樣的for。
我們看第6行count的值是8,所以小於N的9,就不會有動作。
當我們多了一個方塊,放進來是不是count的值是9,並沒有小於9,所以k不會減1,那i的值跟k的值是連動的,只要k的值沒有減,k的值是不是會變成上一行的,也就是說,其實並沒有行的值被削掉,只是被上一行取代而已。
大致上俄羅斯方塊的運作流程都講完了,我覺得最難理解的地方是邊界的判斷,我還只是推測他是這樣子去做判斷的我也沒有100趴地確定,如果有錯的地方我會更改,當然如果有不懂的可以到底下留言(如果我會的話)。
有些圖片+文字會比較小是因為我是在ppt上面畫完之後在複製過來的,所以有些文字+圖片會比較小請見諒。