Scratch貪吃蛇游戲制作筆記_第1頁
Scratch貪吃蛇游戲制作筆記_第2頁
Scratch貪吃蛇游戲制作筆記_第3頁
Scratch貪吃蛇游戲制作筆記_第4頁
Scratch貪吃蛇游戲制作筆記_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、Scratch貪吃蛇游戲制作筆記由丁信息技術課程采用了新的教材,開始涉及Scratch的內(nèi)容,被迫開始學習Scratch的使用。作為編程入門的小軟件,上手還是比較容易,但像玩出些花 樣還是有點難度。使用腳本控制角色的方法,與按鍵精靈有點相似。上了一次培訓課后,萌生了做一個貪吃蛇游戲的想法。 本文記述了本次制作 游戲的過程。一、初探本來覺得這樣的小游戲應該還是蠻簡單的。蛇頭:通過“事件”中的按鍵模塊使用上下左右來控制蛇頭面向0 90 180 -90四個角度。在碰觸 蘋果的顏色時,做一次廣播 get。蘋果:通過“事件”中接收廣播的模塊,使用“動作”中的“移動到x y ”, 在x和y中加入“數(shù)字和邏

2、輯運算”中的“在 到 問隨機選一個數(shù)”,分別填 入舞臺的寬度和長度:“一240240”、 - 1 8 01 8 0 ”。通過這些感覺,這個游戲的大部分就完成了,基本上就已經(jīng)可以玩了。瞬間, 很有成就感。然而,真正的麻煩才剛剛開始。蛇身部分才是本游戲的真正難點, 難到根本就沒有想法。二、各種想法1 .在不知所措點來點去時,看到了一個叫“克隆 ”的模塊,覺得這個或 許有用,蛇頭克隆自己跟隨,或許就可以實現(xiàn)了。在蛇頭接收“ get”廣播時, 克隆自身。然后跟隨自己。2 .也在網(wǎng)上找了找,發(fā)現(xiàn)這個貪吃蛇游戲,出現(xiàn)在初中的課程中,簡單 的瞄了幾眼,在其中一個網(wǎng)頁中有提到使用“畫筆”?;蛟S有用吧3.在Sc

3、ratch的官網(wǎng)上還看到了,已經(jīng)做好的實例,很完整,而且還有三種 難度可選。不過看到茫茫多的角色和茫茫多的腳本就不想看下去了。/projects/2415852 /#editor 還是自己再研究研究巴。三、跟隨當技F下移鐮革待 t * delay面向1河,方向當技下上移健蛇頭面向萬向1面向®方回“如何讓一個角色跟著另一個角色”這個問題我想了很久。得出的第一個結(jié)論是“延遲執(zhí)行動作”。所以初期的想法是, 在按下方向按鍵時,第二個角色延遲執(zhí)行。初期的腳本如上面的兩個圖,設定了全局變量delay調(diào)整延遲時間,局部變 量t的預期作用是在克隆之后加1,以

4、增加延遲時間(其實,還沒有確定克隆之 后t是初始值還是當前值,后來試過才知道是當前值的)。蛇身的腳本中,在按下方向鍵后,延遲了一會兒。在只有這兩個角色的時候, 跟隨的效果還是不錯的。但是問題多多,比如無法適應快速的操作,特別是后來 增加了克隆模塊后,常常會有部分蛇身,提前或者延遲了拐彎時間,以至丁蛇身 支離破碎。中“面向第二個想法是,跟隨就是“面向主體移動”。直接使用“動作” 這一模塊,免去延遲,讓蛇身與蛇頭保持同樣的速度,只在蛇身太接近蛇頭的時 候,讓蛇身放慢速度再次拉開距離(拐彎時會縮短距離)當占T空格/將d埠定為EQ當接收到start曲t廣:IS foHow巨己 follow當栓肢到st

5、art y 重晰移助D步垢哭篇到顏芭 ?當按下右移I蟠下上移理 面向福萬廣捂get當犢下下移錐面向方向吉摺收到foltow面向SpntelJ 匚; Els廣摘Start蛇頭蛇身當搔收到get夠到x:在到函。間隨機選一個數(shù)y:S3!)到色。目箍機迭一個教食物同樣有局部變量t在克隆之后加1 ,不過原來的全局變量delay延時,在 這里變成了全局變量d距離。因為無法通過“面向”這一模塊跟著前一個蛇身, 所以只能是所有蛇身都跟著蛇頭,只是距離不同。其實,我是蠻喜歡這個效果的,在轉(zhuǎn)彎的時候,蛇身弧線跟著蛇頭,看起來 自然一點。但是,同樣也有問題:在蛇身增加時,蛇頭直線運動時,后面的蛇身 都是歪著平移的,

6、整體看起來像是在水上漂,而不是爬;另外,可以想象當蛇身 數(shù)量增加到一定的時候,最后一截蛇身到蛇頭的距離超過了舞臺的寬度一半時, 就會出現(xiàn)各種重疊。如果能讓后一段蛇身跟著前一段的蛇身就好了,哎 第三個想法,跟隨是“再一次走過前任走過的路”。這樣的情況下,首先要 做的就是記錄前任走了哪些路。直線的路,沒什么好記錄的,重點記錄的是在哪 里拐彎,拐向了哪邊。丁是這里就用到了鏈表。要保存的數(shù)據(jù)有拐彎時的X坐標、Y坐標及方向,所以用了三個鏈表。蛇頭在拐彎時寫入鏈表,最后一截蛇身(蛇 尾)在拐彎后刪除鏈表第一項。局部變量t (相當丁是蛇身的編號),及全局變量 tail (每多一截蛇身就加1)來判斷是否是蛇尾

7、。同時為了方便控制,增加了一個flag變量,這樣就可以只用空格鍵來控制游戲的開始和結(jié)束罕格曜夠動步定義 X numb fit 1 Y numberZ D number將 nijmberl加到樹弟x 末尾當她到endx坐標Y y坐杯D方向面向方向面向方向如果/到萌色 ?明除第尊勵項,M留表:d 珂瞬篦肯I血從橙衰:K I除露明,從怪褰:V 穢孕I x: 0 y: ©I廠播將flag W京為當糧下右移鍵 將numberZ加到糖表y末屋面向C&B方向?qū)umberJ加到悟玻d末俚當按E上翌鐮delaystart|F: II frl心'I ':! 1Xx坐株Y

8、5;坐株D方向當按下下移鍵面向方向X、蛇頭在這里嘗試了使用新建模塊的功能,新建了一個模塊用來儲存拐彎點的Y坐標及方向當接收到get如果 t =.那么克隆 myself將重t溯的值埒加第。頊k 且y坐標=第吉接收到foliow 重復執(zhí)行JT" 等待秒I移葫步x坐標=面向第CD項d 方向項V那么等待 dely 訕 廣播foNow 1Lo當接收到end移到x: 0y:當作為克隆體啟動時'將登里t 的1'菖培加如果 t = tail那么,刪睜第。項,從鍵表:'刪除第核頊,從疑表:刪除第CD項,從槌表:蛇身蛇身在移動過程中判斷是否到達了蛇頭的拐彎點,如果到達就開始拐彎。

9、同 時,蛇身也通過對比局部變量t和 全局變量tail來判斷自己是否是蛇尾,如果 是,那么就刪除三個鏈表的第一項。在接收到 廣播get之后同樣通過 比對t 和tail來判斷 是否蛇尾,僅蛇尾克隆自身。做到這里開始自認為已經(jīng)完成了所有的要求。 不過在運行過程中,還是出現(xiàn) 了一些問題:在某個條件下會出現(xiàn) 蛇頭和蛇身分離 的狀況。自認為腳本沒有錯 誤,把這個問題歸結(jié)為 軟件性能 和自家破電腦的性能 的問題。在參觀了網(wǎng)上的例子之后,發(fā)現(xiàn)游戲中運行了 60多個角色,茫茫多的腳本 都星無壓力時,才開始思考“自家腳本是不是有I可題? ”。其實,問題很明顯地存在著:每次判斷蛇身是否到達拐彎點, 都是通過比對 鏈

10、表第一項,所以當?shù)谝还?jié)蛇身已經(jīng)完成了第一次拐彎而蛇尾未完成時, 此時鏈 表第一項仍存儲著第一次拐彎的信息,如果此時已經(jīng)開始了第二次拐彎(信息儲 存在鏈表第二項),第一節(jié)蛇身會因為無法比對到第二次拐彎點而脫離。解決這個問題,其實很簡單,只要在蛇身的腳本中增加一個局部變量記錄每 一個蛇身拐彎的次數(shù)就可以。只是這樣就不能刪除鏈表里的信息了, 看著鏈表越 來越長,不爽。犯這個錯誤的原因,也大概是一心想著要刪除鏈表里的信息。不過,現(xiàn)在仍然無法死心,想著要刪除鏈表里的信息。當然還是有辦法的:1. 在刪除鏈表信息后做一次廣播,讓所有的局部變量c都減1。2. 再加幾個變量。下面的圖展示的是第二種方法,增加全局

11、變量l代表蛇頭的拐彎次數(shù),局部變量c代表每一個蛇身的拐彎次數(shù)。在保持刪除鏈表里的項的情況下,l-c永遠都小丁鏈表的長度。因為是在鏈表末尾增加數(shù)據(jù),而在鏈表首部刪除數(shù)據(jù)的。 所以只要每一個蛇身都是比對(鏈表長度-(l-c) +1)項即可。得出這個式子后, 再去想為什么是這樣一個式子就再也想不活楚了。 反正這樣游戲就正常運行就是 了。吉作為亶窿體啟動時將變量t的值堪M廣播follow當接歸到end移到x: Q y: Q當接收到get加果 x坐標=第 c頊X 且Y坐標二第匚項V 那ZKt. 面向第 c d 方將裳里c田值培加O當接收到follow重導一機行將爽食tail的值博加。等待delay秒廣播

12、follow克星 myself當橙購到start當撥下空格旋j 將dday設宏為E |萱I設定為電|'如果flag :=歸廣唇start定安 X riGmberl Y nuinberz D numbers面向fSP方叵numtie rl加到肉擊x 未邕下制法坐標Y Y坐標D方向numhpr 卻熟黑長ynumbers M具仍擊的情婿如。* v 末至r -_J面向方向M坐標Y V坐折D方向xx坐標v y堅標D方向X坐標蛇頭蛇身在每一次拐彎時,全局變量l加1,記錄拐彎次數(shù);蛇身成功拐彎后 局部 變量c加1,記錄蛇身拐彎的次數(shù)。在l到達數(shù)值上限之前都沒有什么問題了, 不過l可能到達數(shù)值上限嗎?

13、這樣一個貪吃蛇的游戲就算是完成了。 至丁那些什么,碰撞死亡的部分,已 經(jīng)沒什么心情去做,就這樣吧。雖然最終還是有一些小問題,比如:在 0.2秒內(nèi) 連續(xù)快速地多按幾次方向鍵,蛇身就會脫離蛇頭。但這屆丁惡意玩家的行為,“我 做的不是游戲,是情懷”這種小事不予考慮。四、畫筆涂抹的身段在自認為已經(jīng)完成貪吃蛇游戲,而對問題不管不顧的階段,也嘗試過利用畫 筆來制作。總的還說還是用畫筆來實現(xiàn)比較方便呀。只要在移動過程中,添加一個“落筆”,小蛇就可以無限增長了。但是咱并 不需要一個無限長的小蛇??s短它才是一個問題。根據(jù)上邊研究跟隨的經(jīng)驗,我的方法是:在后邊跟隨一個蛇尾利用背景色來 擦除蛇身。定義 X numb

14、 er 1 Y number D numbernumberl加到鏈表x 末尾number加到鏈表v 末尾number加到銷熹d 未尾當接收到start面向向重朝丸行I移動步1落望wrioy: &學按下空格鍵W delay設嘉田 將畫筆的大小設定為偃。 '將畫筆的顏色設定為廣墻start 將ilag度定為1廣擂 【一:一endflag 設定為碰到函色廣皤get乂坐標Y v坐標D方向當按下上移檀面向(9方向當揮下左移鍵 面叵CIS)方閆I當按下右替鍵而同CI9方向X X坐標Y Y坐標D方向Xx坐標Y y坐標D方向當按下下移鍵面向(239方向Xk坐標 丫 y坐標 D 方向蛇頭foll

15、ow蛇尾同樣利用鏈表來控制蛇尾跟隨,每次接收到廣播get,延時一次。用畫筆的話雖然小蛇整個看起來像一條大背蟲,但是制作簡單了很多,畢竟不用考慮這么多克隆體的聯(lián)動問題。五、最后展示一下制作出來的效果圖Beachball: fl-agBasebait r Baseball! c " “X .叵 test6當接膜到followx坐標=第頊x 且 y坐標-第頁當接收到start面向方向?qū)嬻淼奶≡O定為將畫筆的顫色設定為 刪除第®項,從fit表:d 刪除第旬。項,從槌表:x刪除第項,從攤表:y當擺收到end當接收到get廣播follow兩個圖分別是克隆版和畫筆版,用了內(nèi)置的 bea

16、chball做蛇頭,beaeball做 蛇身和蛇尾。兩個版本都隱藏了鏈表,其他的變量都顯示著(鏈表很長會遮住蘋 果),可以看到克隆版里有更多的變量。畫筆版中的一些殘影,那是因為兩個ball 中心可能有點不同,在擦除過程中會留下一點,看起來還是蠻帶感的,所以沒有 改在設想中還想自己做幾個欠量圖的,做一個顏色特異的蛇吐信來吃蘋果的。 現(xiàn)在,只存在丁設想中了。還有一些不完整的地方,比如:允許調(diào)頭,碰撞了邊 緣沒有處理,想傳到官網(wǎng)去但是網(wǎng)絡不太好使。兩個源文件的白度盤地址: http:/pan.baidu.eom/s/1qW9aWyw自從做了小學的信息技術教師,基本上就與編程隔絕了。弄來弄去都是和 office打交道,只是偶爾利用按鍵精靈作弊,寫一些異常簡單的腳本。所以,遇 到這個小游

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論