第二十六章 收尾(上)
于是在這些知識的支撐下,推箱子游戲地圖的加載問題迎刃而解?,F(xiàn)在地圖數(shù)據(jù)裝在了一個八行八列的二維數(shù)組中,只需要使用雙重for循環(huán)遍歷數(shù)組下標就能夠取出其中的元素了。
在遍歷二維數(shù)組時使用if來判斷當前元素的值,為0時什么都不做,為1時加載灰太狼的圖片,為2時加載懶羊羊的圖片,為3時加載樹,為4時加載煮羊的大黑鍋,最后再根據(jù)當前數(shù)組元素的下標來計算出圖片在窗體中的位置就大功告成了。
這其中的知識點可謂和環(huán)環(huán)相扣,難怪老爹會用這個例子來讓我學習這些知識。
人啊,永遠是貪心的。
一開始我總想著要如何實現(xiàn)加載地圖這個功能,現(xiàn)在實現(xiàn)了,我又不滿足于此,想要把整個游戲全部都完成。
老爹當然沒有理由拒絕我想要完成這個游戲的請求,因為老爹他本身就是一個有始有終的人,自然不會讓我半途而廢。
當然,主要原因是我如今的知識儲備已經(jīng)完成能夠完成這個游戲的核心功能了。
以上的兩點內(nèi)容純屬我個人想象。
多年以后,我回顧這段時間才發(fā)現(xiàn),我還是年輕,太天真,老爹讓我做的每一件事都有他的深意。換句話說,從學習C語言開始,老爹就步步為營,為我設(shè)下了無數(shù)的陷阱,正等著我往里面踩呢。
別看一個推箱子游戲操作起來簡單,但這其中涉及到的邏輯還是挺復雜的,從分析到實現(xiàn),整整用了兩天。
因為這其中的邏輯著實有點繞,我聽完第一遍的時候完全是一臉問號,不知道老爹說了些什么。于是老爹又從頭到尾,仔仔細細地給我又說了一遍,我這才明白了七七八八。
即便如此,在實現(xiàn)過程中還是向老爹問了不少問題。
就拿移動一步來說,首先需要判斷下一個位置是什么,如果是空,那就直接移動過去,并且將地圖數(shù)組中灰太狼現(xiàn)在對應(yīng)的元素從1修改成0,下一個位置對應(yīng)的元素從0修改成1,最后再修改灰太狼的在窗體的位置就好了;如果是樹,就什么也不干。這兩種情況是最簡單的,實現(xiàn)也不過分分鐘的事情。
難就難在下一個位置是羊、黑鍋以及羊正在黑鍋里。
如果下一個位置是羊,還需要判斷下下個位置是什么,這時又有五種可能:空、樹、羊、黑鍋、羊正在鍋里。
其中下下個位置為樹、羊、羊正在黑鍋里邊是最簡單的,因為這個時候灰太狼是不能移動的,即什么都不做。麻煩的是下下個位置是為空和黑鍋。
如果下下個位置是空,那么灰太狼將會把羊推到這個位置,而灰太狼自己則會在羊原來的位置,所以需要把下下個位置在地圖數(shù)組中對應(yīng)的元素從0修改成2,羊原來的位置從2修改成1,灰太狼原來的位置從1修改成0,最后再修改圖片在窗體中的位置就好了。
下下個位置如果是黑鍋的話,要相對簡單一些,需要做的就是把羊扔進鍋里,即黑鍋的位置對應(yīng)的地圖數(shù)組元素要從原來的4變成6,因為2代表羊,4代表鍋,4+2=6,所以6代表羊在鍋里。
而羊原來的位置就從2變成1,灰太狼原來的位置從1變成0,最后修改它們在窗體中的位置。
這只是下一個位置為羊的這種情況,另外還有下一個位置是黑鍋、以及羊在黑鍋里邊。
下一個位置是黑鍋這種情況比較簡單,除了要把黑鍋在地圖數(shù)組中對應(yīng)的元素值從4改為5(1代表狼,4代表鍋,4+1=5,所以5代表狼在鍋里)之外,其他的操作和為空幾乎一模一樣。
不過這一點我有點不滿,灰太狼自己怎么能夠進鍋里面呢?直播鐵鍋燉自己么?
對于我提出的這點詬病,老爹丟下了一句話:「覺得不滿意就自己改?!?p> 這肯定不能忍,于是我就加了一點邏輯,當?shù)貓D數(shù)組元素的值等于5時,把黑鍋隱藏起來,只顯示灰太狼,其他的邏輯不變。
對于我的不將就,老爹給予了充分的贊許。
不過我還來不及高興,就被最后一種情況給虐得體無完膚,因為這種情況比是羊還麻煩。
和下個位置是羊一樣,需要考慮下下個位置分別是空、樹、羊、黑鍋和羊在黑鍋里五種情況。
其中下下個位置是樹、羊和羊在黑鍋里不用做任何處理,因為灰太狼推不動。
首先是下下個位置如果是空,那么羊就從鍋里面推出來了,而灰太狼自己掉進了鍋里,本來也不怎么復雜,將下下個位置對應(yīng)在地圖數(shù)組里的元素從0修改成2,下個位置從原來的6變成5,灰太狼的位置從1變成0,然后再修改他們在窗體中的位置。
但是因為我自己作死,之前添加了灰太狼掉進鍋里的時候隱藏鍋。既然那邊都添加了邏輯,這邊肯定也不能落下啊。
現(xiàn)在就剩下最后一種情況,下下個位置是黑鍋。這個時候羊從一個鍋移動到了另外一個鍋,所以下下個位置在地圖數(shù)組中對應(yīng)的元素就從原來的4變成了6,緊接這灰太狼掉進了原來羊所在的鍋,所以這個鍋在地圖數(shù)組中對應(yīng)的元素從6變成了5,灰太狼原來的位置從1變成了0。
這個時候我有點想抽自己兩下,沒得事自作聰明修改個什么勁兒?這不是自己坑自己么?
有道是:天作孽,猶可恕。自作孽,不可活。自己挖的坑,哭著也要往里面跳。
在費盡九牛二虎之力后,推箱子這個游戲的核心功能終于讓我給完成了!此時我覺得成就感爆棚,仿佛自己真的就成了造物主,創(chuàng)造了一個世界。
但是我總覺得好像少了點什么,不過哪能想這么多,先玩兒一把過過癮。
為了方便分析,老爹找的這個地圖很簡單,根本不用腦子就能完成,此時我有些不滿足這個游戲的難度,于是在網(wǎng)上找了一個比較難的地圖,用肉眼解析,將地圖數(shù)組中的數(shù)據(jù)換了。
這個時候我就感受到了使用數(shù)組來存放地圖數(shù)據(jù)以及用for和if結(jié)合來加載地圖的好處,因為雖然我換了數(shù)據(jù),其他邏輯完全不受影響。
所以如果要切換關(guān)卡,就只需要修改地圖數(shù)組中的數(shù)據(jù)就行了。
花了些時間將所有的羊都推進了黑鍋,我終于意識到了問題所在。