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