第二十一章 神奇的口袋(上)
既然背景圖片加載好了,狼已經(jīng)套住了,那么接下來自然應(yīng)該讓灰太狼最喜歡的肥羊們上場,可是肥羊們應(yīng)該放在哪兒呢?總不能挨著挨著放啊。
這個時候我有點狐貍捉刺猬——無從下手的感覺,所以只能夠向老爹求助了。
老爹笑而不語,默默打開瀏覽器,在搜索引擎里邊輸入「推箱子」三個字,瀟灑干脆地敲擊了回車鍵。
「看到?jīng)],推箱子游戲總共有5中元素:角色、箱子、目標、障礙物和背景,并且這其中蘊含了一些玄機,如果隨便亂放很可能導致箱子根本就沒有辦法全部移動到目標上面?!?p> 老爹打開了一張經(jīng)典推箱子游戲的地圖,詳細和我說起了上面的門道。
「現(xiàn)在咱們的背景是青青草原,角色是灰太狼,箱子自然就是可愛的小羊們了,至于目標嘛,就是這些黑鍋,灰太狼最終的目標是把所有的羊都送進鍋里煮著吃,至于障礙物嘛,就是這些樹咯?!?p> 老爹一邊講解,一邊將昨天冒著坐牢風險爬下來的素材展示給我看。不管是灰太狼還是小羊們,以及黑鍋和樹都被老爹處理成了相同的寬和高。
「灰太狼這貨也是,其他狼都吃生羊肉,它非得吃涮羊肉,多少次小羊們都是在涮羊肉的過程中逃跑了。」
我搖了搖頭感嘆了一句。
「不讓羊跑了那不就沒戲了么?接下來還怎么演?」
老爹無奈地笑了笑。
「有道理!」
我深以為然地點了點頭。
「好了,你現(xiàn)在來數(shù)數(shù),如果把灰太狼、小羊們、黑鍋和樹都當成一個格子的話,這個地圖上有多少個格子?」
「??!真要數(shù)啊,看上去有七八十個吧?!?p> 我苦著臉說道。
「你看哈,這個地圖其實是一個14行15列的表格,只不過這個表格中有些地方是空著的,有的是障礙物、箱子、目標和主角,如果我們一個一個的來加載,確定它們的位置,這是一個多么大的工程量?」
「那怎么辦???要是按照老爹你這么說的話,那得等到何年何月才能完成啊?」
聽完老爹的話,我滿臉愁容。原本以為實現(xiàn)這么一個游戲應(yīng)該不難的,哪曾想是困難重重,看來老爹經(jīng)常說萬事開頭難,中間難,結(jié)尾更難果然是真的。
不過我轉(zhuǎn)念一想,不對,老爹既然這么說肯定有什么解決方法。
「老爹,你直接說怎么解決吧,別賣關(guān)子了?!?p> 我小心試探道。
「你個鬼丫頭,居然這么快就反應(yīng)過來了。好吧,那我就跟你說說怎么解決這個問題。
首先,我們得把窗體的工作區(qū)分成15x14個格子,這樣窗體就和地圖對應(yīng)其起來了,這一步倒是簡單,只需要設(shè)置窗體工作區(qū)的寬度和高度就可以了。
灰太狼、小羊們、黑鍋和樹都是正方形的圖片,并且變長是50像素,那么窗體工作區(qū)的寬度和高度分別是15x50和14x50,也就是750x600像素。
當然了,這個格子是不存在的,只是我們?nèi)藶閯澐值摹!?p> 老爹為了讓我更容易理解,充分利用了畫圖工具,圖文并茂地向我解析這其中的道理。
「為了方便描述和分析,我們先用一個8x8的表格,然后對灰太狼、小羊們、黑鍋和樹進行一個轉(zhuǎn)換,假設(shè)用數(shù)字0代表空白表格,1代表灰太狼,2代表羊,3代表樹,4代表黑鍋的話,那么整個地圖就變成了這樣:
0 0 3 3 3 0 0 0
0 0 3 4 3 0 0 0
0 0 3 0 3 3 3 3
3 3 3 2 0 2 4 3
3 4 0 2 1 3 3 3
3 3 3 3 2 3 0 0
0 0 0 3 4 3 0 0
0 0 0 3 3 0 0 0
現(xiàn)在1也就是灰太狼所在的格子在從零開始數(shù)第4行,第4列中,那么它在窗體工作區(qū)的位置是多少?」
老爹將灰太狼的圖片貼在了他在畫圖工具上繪制的表格中,所以很容易就看出來表格的行數(shù)、列數(shù)和位置的關(guān)系。
「灰太狼位置x=列號x圖片寬度,y=行號x圖片高度,所以x=4x50=200,y=4x200=100?!?p> 我脫口而出道,這種級別的乘法題,都不用經(jīng)過大腦。
「沒錯,這樣一來只要知道灰太狼、小羊們、黑鍋和樹在表格中的行數(shù)和列數(shù),就能夠愛確定它們在窗體中顯示的位置了!」
「哦!」
我恍然大悟道。
「所以現(xiàn)在需要用一種方式把上面的表格和數(shù)字表示出來,然后讓計算機挨著去判斷表格里面的數(shù)字是多少,如果是0,說明是空白,什么都不做。如果是1就加載灰太狼的圖片,并且計算它的位置顯示在窗體中,如果是2就加載羊,3加載樹,4加載鍋。
最終問題鎖定在如果表示表格以及挨著判斷表格里的內(nèi)容,這樣就引出了我們今天的內(nèi)容——數(shù)組。」
老爹擰開水杯喝了一口溫水潤喉,畢竟為了引出這個內(nèi)容繞了這么大的彎子。
「數(shù)組?What this?」
「顧名思義,就是一組數(shù)?!?p> 老爹笑了笑。
「額……」
我有點無言以對,這說了不是跟沒說一樣嘛。
「好吧,數(shù)組其實就是一個魔法袋子。設(shè)想一下,假設(shè)你喜歡吃的薯片被你媽吃光了,這個時候你拉著老爹去超市買薯片?!?p> 「什么?我的薯片又被你老婆偷偷吃光了?這個饞嘴貓,比我嘴都饞!」
聽到這個不幸的消息,我瞬間火氣直往頭上竄。
「不要激動,假設(shè),只是假設(shè)而已!」
看著我雙眼都要噴出火的樣子,老爹立刻將我按在了椅子上。
「好吧,既然是假設(shè),那就沒事了,你繼續(xù)講……」
「……好吧,因為你不想天天去超市買薯片,于是你一次性往購物車里放了10包薯片,這才推著購物車去收銀處付錢。
這個時候收銀的小姐姐看到你買了這么多薯片,但是因為購物車不準推出超市,于是小姐姐問你要不要袋子。
為了方便省事,你當然要袋子咯,于是十包薯片就裝在袋子里提回家了。
而數(shù)組的作用就和這個袋子一樣,只是里面裝的不是薯片了,而是一堆數(shù)據(jù)。在C語言中,我們創(chuàng)建一個數(shù)組需要聲明它的數(shù)據(jù)類型以及長度。如果把int型的數(shù)據(jù)比作一包薯片,那么在C語言中應(yīng)該這么表示:
int arr[10];
arr就是那個袋子的名字,int表示袋子里面放的是什么,[10]表示口袋里最多只能放10個int元素。
但是C語言中的袋子比現(xiàn)實中的袋子更神奇,它會給袋子里的每個元素,相當于現(xiàn)實袋子里的一包薯片進行編號,我們可以通過編號拿到指定的元素,這就是它神奇的地方?!?