C 俄羅斯方塊

2021-06-26 08:55:51 字數 2488 閱讀 1763

因為要得找工作了,不得不寫些文章讓hr更多的了解到我,同時能幫到別的同學也是好的。因為接觸unity時間不是特別久,所以這裡先帖出早期開發的c#遊戲,然後再帖unity遊戲。

另外提醒,我的所有作品都是自己開發的,絕無抄襲(程式**和程式設計思想絕沒超抄過別人的),最多也就是高仿別人的遊戲(貪吃蛇算嗎?俄羅斯方塊算嗎?炸彈超人算嗎?五子棋算嗎?)。

辣椒皮兒塞牙了╮

遊戲說明:

1.這是我2014-1-16寒假在家裡時寫的,前後總共3天。3天每一天都是十多個小時在程式設計,第一天把核心功能實現了;第二天重新建了乙個專案全部從頭來,優化**優化介面;第三天,哈哈,加入了很好玩的功能,絕對算創新。這是我所寫的所有c#遊戲中我最喜歡的其中之一,接近完美,1500行**。 

2.和我們小時候玩的俄羅斯方塊的遊戲機很像,連右側下個下落方塊也做了出來,每種形狀有一種顏色

3.可記錄消掉的總行數,一次消掉的行數越多,獲得的金幣也越多,金幣可以用來手動兌換下一次出現的方塊形狀,比如我想要豎條的那種來一次消掉四行,只要金幣夠就可以了。隨著消掉行數的增加,方塊下落速度也越來越快,難度增加。

4.方塊下落可選擇「瞬間下落」和「快速下落」,瞬間下落就是一次性下落到所能夠下落的最底部

5.金幣可以用來手動兌換下一次出現的方塊形狀,還可以直接消除底層的3-5行,哪怕這3-5行沒有摞滿一樣可以消除,而且消除時有顯示動畫

開發思想:

1.好的辦法是建立乙個shape類為基類,7中不同的形狀來派生,這樣,在第乙個方塊下落到底部後,只要shape=new shape()一下,就可以繼續控制第二個方塊了。不過程式裡我用的是乙個普通的shape類,shapes列舉(block = 0, two, intwo, strip, mount, seven, inseven)表示7種形狀,大同小異。

2.「底盤」是乙個10*20的陣列,public static int[,] arrays = new int[cntgridh, cntgridw];,其實用bool型別都可以,用int以備擴充,比如以後想儲存顏色資訊或者其他什麼。對應的還要例項化乙個10*20的picturebox,lable,button,什麼都可以,用來顯示遊戲畫面,我用的lable,感覺可能會稍微節省點記憶體,不知道感覺對了沒。

3.point point = new point[4];           來表示7種形狀的方塊每個(4個)格仔的座標,比如我按了左,那麼point[0-3].x都減1就好了。

4.畫面重新整理,即,比如我的方塊下落了一行,那麼剛才的位置應該顯示成背景色,這裡有三個小辦法。a),再來乙個point[4]儲存上一步的位置,每走一步把上一步的位置渲染成背景色,再渲染現在格仔位置的顏色。b),看操作,我按左,則把右的位置染成背景色,我按下,把上的位置設定成背景色。c)大刀闊斧的方法,效率不高,這裡就用到了上邊int型的「底盤」來儲存顏色,每走一步,把整個畫面全清成預設背景色,根據這個int來對應的刷顏色,再顯示shape的位置的顏色。 程式中我選的方法b

5.碰撞檢測,每走一步,走之前把shape的4個座標每乙個都檢測下int中對應位置是否儲存值為0,也就是說這個點的位置是否已經有方塊了。所以又要分情況了,左和右如果有衝突的,那就是不能左右移動,不做任何處理。如果是向下移動(分自動向下,和手動按向下),有衝突了,那這個形狀就要固定在這裡,再例項化乙個新的shape了。

6.變換形狀,按上方向鍵,shape順時針90度旋轉,這個很簡單也很麻煩,簡單是只要更改point[4]中的座標就好了,更改前也要先檢測是否有衝突;麻煩是7種形狀,有6個有旋轉變化,好在有的只變化2種樣子。所以我的shape類,800行,其中400行都是在處理變換形狀的。。。

7.消除底行,每次乙個shape到底了後,都要檢測下是不是某一行滿了(檢測「底盤」int中的值是不是全為1),然後用乙個int[4]來標記即將要消除的行號。鍊錶也行,不過不好。int[4]是因為一次最多消除4行,碰見消除了4行,上面下落後可以繼續消除的情況,實際是另一次消除的計算了,所以4個足以。這裡可以再加乙個變數,來統計本次消除的行數,比如本次消除了1行,增加100金幣,消除了2行,增加300金幣,消除了3行,增加600金幣,等等,以此提高可玩性。

8.在右側,下乙個方塊的提前顯示,很簡單,做成全域性變數就可以了,每次乙個shape落底後,把這個變數付給新shape,再把這個變數random一下。所以花金幣手動選擇下乙個下落的方塊問題也解決了。

9.快速下落和瞬間下落,專門寫乙個函式處理shape往下移動一格,再來乙個timer控制自動下落,時間到了就呼叫一次這個函式。快速下落就是用keydown,按著不動時,呼叫一次重新整理一次。瞬間下落就是,拼命的呼叫這個函式,直到shape的座標有跟「底盤」int中的值有衝突時,然後再重新整理畫面。

俄羅斯方塊高階 AI俄羅斯方塊

前文回顧 致青春 python實現俄羅斯方塊 人工智慧大火的今天,如果還是自己玩俄羅斯方塊未免顯得太low,為什麼不對遊戲公升級,讓機器自己去玩俄羅斯方塊呢?有了這個想法之後利用週六週日兩天的時間去蒐集了大量的資料,在電腦宕機好多次之後終於將ai俄羅斯方塊實現了。所謂讓機器自己去玩俄羅斯方塊,就是讓...

俄羅斯方塊 C

include include include include includeusing namespace std define a1 0 a代表長條型,b為方塊,c為l型,d為閃電型 實在無法描述那個形狀 define a2 1 define b 2 define c11 3 define c1...

俄羅斯方塊

俄羅斯方塊 tetris,俄文 是一款風靡全球的電視遊戲機 和掌上遊戲機遊戲,它由俄羅斯人阿列克謝 帕基特諾夫 發明,故得此名。俄羅斯方塊的基本規則是移動 旋轉和擺放遊戲自動輸出的各種方塊,使之排列成完整的一行或多行並且消除得分。由於上手簡單 老少皆宜,從而家喻戶曉,風靡世界。俄羅斯方塊的開發者是阿...