第四十三章 第一次接觸
聽老爹這么一說,我心里居然產(chǎn)生了一種勝利就在前方的感覺,照這么算來(lái)的話,C語(yǔ)言的內(nèi)容也不是很多嘛。
當(dāng)然了,隨著我對(duì)編程世界的了解逐漸加深,才深感我這個(gè)時(shí)候還是too young too simple。C語(yǔ)言就像是「道生一,一生二,二生三,三生萬(wàn)物」中的三,催生了程序的萬(wàn)物。
「指針」這詞語(yǔ)被老爹提起不是一次兩次了,現(xiàn)在老爹由對(duì)塔它如此推崇備至,不免讓我對(duì)它產(chǎn)生那么一絲絲好奇。
函數(shù)這部分內(nèi)容涉及到的理論知識(shí)的確還是太多了,在老爹的帶領(lǐng)下,我們重頭到位將理論知識(shí)實(shí)踐了三遍才理解透徹。到了這一步,自然少不了把推箱子游戲優(yōu)化完成。畢竟我能夠堅(jiān)持到這個(gè)時(shí)候,很大程度上取決于想將這個(gè)程序?qū)懞谩?p> 由于我和小弦子的開發(fā)經(jīng)驗(yàn)的確是太少了,所以一時(shí)之間根本就沒有辦法在現(xiàn)有代碼的基礎(chǔ)上抽出關(guān)鍵信息。老爹思慮了一番,決定以此為契機(jī),培養(yǎng)我們?cè)谶@方面的意識(shí)。
「我們先來(lái)剖析一下,在對(duì)灰太狼上下左右四個(gè)方向按鍵的邏輯處理上的相同點(diǎn)和不同點(diǎn)。首先來(lái)說相同點(diǎn):需要判斷灰太狼移動(dòng)的方向下一個(gè)位置,下下個(gè)位置,以此來(lái)決定是否進(jìn)行移動(dòng)。如果要移動(dòng),進(jìn)行相應(yīng)的邏輯處理,如修改地圖數(shù)組中內(nèi)容,移動(dòng)灰太狼圖片。
不同點(diǎn)其實(shí)只有一個(gè):方向不同,因?yàn)榉较虿煌斐苫姨窍聜€(gè)位置,下下個(gè)位置不同。
按照我們之前的邏輯,我們是在代碼中是根據(jù)方向來(lái)確定灰太狼的下一個(gè)位置、下下個(gè)位置的坐標(biāo),如果我們事先知道了下個(gè)和下下個(gè)位置的坐標(biāo),那么邏輯處理是不是就能夠統(tǒng)一了?」
老爹一句點(diǎn)醒夢(mèng)中人,我和小弦子在一瞬間恍然大悟。歸根究底,一切的不同就是因?yàn)榉较颍M(jìn)而造成了確定灰太狼下個(gè)、下下個(gè)位置的坐標(biāo)的過程不同。
如果確定了下個(gè)、下下個(gè)位置的坐標(biāo),在進(jìn)行判斷的時(shí)候就可以直接通過坐標(biāo)來(lái)獲取地圖數(shù)組對(duì)應(yīng)位置的值進(jìn)行判斷即可,那么判斷邏輯自然就統(tǒng)一了!
分析到這里,我感覺問題已經(jīng)解決了,恨不得立刻動(dòng)手,先寫為快。
「所以現(xiàn)在問題來(lái)了,我們應(yīng)該如何根據(jù)方向來(lái)確定灰太狼下個(gè)和下下個(gè)位置的坐標(biāo)。
目前我們已知的條件是灰太狼當(dāng)前位置的坐標(biāo)以及灰太狼移動(dòng)的方向,答案肯定要從這兩個(gè)已知條件來(lái)獲取。
給你們10分鐘的考慮時(shí)間,看看能不能確定這其中的關(guān)系?!?p> 老爹笑了笑,說完就燒開水泡茶去了。
我和小弦子聞言后就開始思考這個(gè)問題,只見小弦子不斷在空中比劃,好像是在演算什么。
我的空間想象能力不如小弦子,于是只能取來(lái)筆和紙畫了一個(gè)網(wǎng)格,開始尋找這其中的關(guān)系。
在我剛剛將灰太狼前后左右的坐標(biāo)標(biāo)出來(lái)后,我好像就發(fā)現(xiàn)了其中的規(guī)律所在。
假設(shè)灰太狼當(dāng)前的位置坐標(biāo)為x=3,y=4,那么它向上移動(dòng)的下一個(gè)位置的坐標(biāo)就是x=2,y=4;向下移動(dòng)的下一個(gè)位置的坐標(biāo)是x=4,y=4;向左移動(dòng)的下一個(gè)位置的坐標(biāo)是x=3,y=3,;向右移動(dòng)的一個(gè)位置的坐標(biāo)是x=3,y=5。
也就是說,如果向上或者向下移動(dòng),是對(duì)x做加減,向左或者向右移動(dòng),是對(duì)y做加減。
等等,按照這個(gè)邏輯,下下個(gè)位置的坐標(biāo)好像也能夠確定了。
向上,下下個(gè)位置的坐標(biāo)為x=1,y=4;
向下,下下個(gè)位置的坐標(biāo)為x=5,y=4;
向左,下下個(gè)位置的坐標(biāo)為x=3,y=2;
向下,下下個(gè)位置的坐標(biāo)為x=3,y=6;
上下方向的規(guī)律是:下個(gè)位置坐標(biāo)的x=灰太狼坐標(biāo)的x±1,下下個(gè)位置坐標(biāo)的x=灰太狼坐標(biāo)的x±2。
同理左右方向的規(guī)律是:下個(gè)位置坐標(biāo)的y=灰太狼坐標(biāo)的y±1,下下個(gè)位置坐標(biāo)的y=灰太狼坐標(biāo)的y±2。
「邏輯是沒錯(cuò),關(guān)系也很容易的出來(lái),通過switch語(yǔ)句來(lái)判定方向,然后就能夠確定下個(gè)位置和下下個(gè)位置的坐標(biāo)了。
這樣實(shí)現(xiàn)功能是沒有什么問題了,但總覺得似乎還有其他的辦法?能不能不通過switch來(lái)判斷方向?對(duì)了,方向按鍵有自己的鍵值,左37,上38,右39,下40,這其中會(huì)不會(huì)有什么聯(lián)系?」
在將坐標(biāo)和方向的關(guān)系理清了后,我又開始考慮如何在不使用switch語(yǔ)句的情況下來(lái)計(jì)算出下一個(gè)位置以及下下個(gè)位置的坐標(biāo)。
一旁的小弦子摸著下巴,眉頭緊皺,想必也是陷入了某個(gè)死胡同當(dāng)中。
10分鐘悄然而過,然而我還是沒有想出如何通過鍵值和灰太狼當(dāng)前的位置坐標(biāo)來(lái)推算出下一個(gè)位置坐標(biāo)。
「怎么樣,小家伙們?有沒有什么收獲呀?」
老爹笑著問道。
「上下方向的規(guī)律是:下個(gè)位置坐標(biāo)的x=灰太狼坐標(biāo)的x±1,下下個(gè)位置坐標(biāo)的x=灰太狼坐標(biāo)的x±2。
左右方向的規(guī)律是:下個(gè)位置坐標(biāo)的y=灰太狼坐標(biāo)的y±1,下下個(gè)位置坐標(biāo)的y=灰太狼坐標(biāo)的y±2?!?p> 我和小弦子一起回答道。
然而我們倆卻不約而同地露出了一副苦瓜臉,絲毫沒有因?yàn)榈贸隽诉@個(gè)規(guī)律而沾沾自喜。
不僅如此,就連坐在一旁的六叔叔都露出了一副沉思的樣子。
「對(duì)呀,那你們兩個(gè)小家伙還一副愁眉苦臉的樣子?」
老爹啞然。
「老爹,我總覺得按鍵的鍵值和這個(gè)規(guī)律應(yīng)該是有某種聯(lián)系的,如果能夠找出來(lái)這種聯(lián)系,我們就可以不使用switch了!可是我想了半天也沒有想出這種關(guān)系是什么?!?p> 我嘆了一口氣。
「我贊同玥玥的說法,也認(rèn)為鍵值和這個(gè)規(guī)律必然存在某種聯(lián)系!可惜始終沒有找到這其中的關(guān)鍵所在?!?p> 小弦子也是皺著眉頭說道。
「嗯,不錯(cuò)不錯(cuò),你們已經(jīng)在開始鉆研算法的問題了,算是和它的第一次接觸了吧!雖然還很淺顯,但這是一個(gè)好的開端。你們說得沒錯(cuò),鍵值的確和這個(gè)規(guī)律有著聯(lián)系,一旦找到了這個(gè)聯(lián)系,就可以通過計(jì)算的方式把規(guī)律給呈現(xiàn)出來(lái),從而達(dá)到不使用switch的目的?!?p>