資訊內(nèi)容
Scratch編程實(shí)戰(zhàn) 之 投籃游戲
前幾篇文章了老馮叔叔已經(jīng)講了Scratch編程入門的方方面面,詳見玩轉(zhuǎn)Scratch文章系列,想必大家都已經(jīng)迫不及待地想一試身手!好,我們現(xiàn)在就開始進(jìn)入實(shí)戰(zhàn)階
Scratch編程實(shí)戰(zhàn)之投籃游戲
源碼下載鏈接:https://www.jikexiaojiang.cn/270.html
前幾篇文章了老馮叔叔已經(jīng)講了Scratch編程入門的方方面面,詳見玩轉(zhuǎn)Scratch文章系列,想必大家都已經(jīng)迫不及待地想一試身手!好,我們現(xiàn)在就開始進(jìn)入實(shí)戰(zhàn)階段。
投籃游戲
我們的第一個(gè)例子,是從小貓投籃球開始,效果如下面的視頻:
圖1.Scratch編程實(shí)戰(zhàn)一-小喵投籃視頻
任務(wù)目標(biāo)
貓能夠在場(chǎng)地內(nèi)移動(dòng)投籃位置,并且能夠自由起跳
籃筐能夠在屏幕的右上角的位置,隨機(jī)上下左右移動(dòng),增加小貓投籃的難度
小貓能夠投籃,籃球從上向下穿過籃筐才被認(rèn)作得分
有記分牌,能夠記錄小貓能夠得到多少分
任務(wù)分解
小喵部分
首先在事件中選擇 綠色旗標(biāo)啟動(dòng) 按鈕被點(diǎn)擊的事件
選擇循環(huán)事件,處理左右按鍵的控制,按 左箭頭 鍵小喵向左移動(dòng),按右箭頭 鍵向右移動(dòng)
當(dāng)按向上鍵小喵起跳后,控制小喵的落地速度,同時(shí)控制小喵不要落到地面以下;
注意事項(xiàng):小喵向左移動(dòng)時(shí),默認(rèn)是小喵會(huì)頭朝下的,這里需要選擇翻轉(zhuǎn)方式為左右翻轉(zhuǎn)
整體代碼部分如下圖所示,這里需要設(shè)置一個(gè) cat falling speed 的變量,用來記錄小喵在垂直方向的起落速度;
圖2.Scratch編程實(shí)戰(zhàn)一-小喵左右移動(dòng)
籃球部分
到 sprite 庫中選擇 things 分類,選擇一個(gè)籃球;
同樣,在時(shí)間中選擇 綠色旗標(biāo)啟動(dòng) 按鈕被點(diǎn)擊的事件;
籃球的初始狀態(tài)是隱藏的;
當(dāng) 空格 鍵被點(diǎn)擊時(shí),將籃球的位置設(shè)置為小喵的位置,并將籃球設(shè)置為可見狀態(tài);
同時(shí),給籃球一個(gè)初始的垂直方向上的速度24;
設(shè)置一個(gè)循環(huán)狀態(tài),重復(fù)如下事件:
當(dāng)籃球沒有落地時(shí),修改籃球的水平方向坐標(biāo)+8,根據(jù)籃球的速度修改其垂直方向的坐標(biāo),籃球的垂直方向速度是不斷-2的;
當(dāng)籃球落地以后,將籃球設(shè)置為隱藏狀態(tài);
代碼部分如下圖所示,這里需要設(shè)置一個(gè) ball falling speed 的變量,用來記錄籃球在垂直方向的起落速度;
圖3.Scratch編程實(shí)戰(zhàn)一-籃球部分
籃筐部分
用畫筆工具新建一個(gè)sprite,選擇vector矢量圖模式;
在偏中心的位置勾出一個(gè)橢圓的矢量圖,這個(gè)橢圓表示籃筐;
再用畫筆工具新建一個(gè)sprite,bit圖模式即可,在橢圓中心點(diǎn)對(duì)應(yīng)的位置,點(diǎn)一個(gè)2*2像素的點(diǎn),表示籃筐的中心(老馮叔叔故意點(diǎn)了一個(gè)有顏色的點(diǎn));
橢圓籃筐部分只做一件事,在 綠色旗標(biāo)啟動(dòng) 后,籃筐一直重復(fù)一個(gè)循環(huán),所做的事情就是每隔一秒在限定的右上角范圍內(nèi)變換到一個(gè)隨機(jī)位置;
籃筐中心sprite也只做一件事,就是在 綠色旗標(biāo)啟動(dòng) 后,一直追隨籃筐的中心位置;
代碼部分如下圖所示:
圖4.Scratch編程實(shí)戰(zhàn)一-籃筐部分
圖5.Scratch編程實(shí)戰(zhàn)一-籃筐中心
得分處理
以上每個(gè)部分都完成了之后,我們發(fā)現(xiàn)小喵能動(dòng)了,籃球也能投了,籃筐也是隨機(jī)運(yùn)動(dòng)了,還剩一個(gè)任務(wù),就是小喵投籃得分的處理:
首先,小喵的投籃要從籃筐從上向下穿過籃筐的中心,才能被認(rèn)定為得分
其次,為了增加趣味性,我們可以在小喵得分后,讓籃筐發(fā)出 wonderful 的提示
記分牌上記錄小喵投進(jìn)去的總個(gè)數(shù)
關(guān)鍵的問題來了,也是編程中常見的問題,如何在不同的對(duì)象之間進(jìn)行通訊,比如:這個(gè)游戲中我們判斷得分的標(biāo)識(shí)是
籃球觸碰到了籃筐的中心,在程序中,我們?cè)趺醋尰@筐知道這個(gè)消息呢,畢竟,我們的例子中,籃筐和籃筐中心是兩個(gè)不同的 sprite
?
Scratch 提供了 broadcast 廣播功能,就是一個(gè)
sprite 可以廣播一個(gè)消息出去,而其他的 sprite 可以接收這個(gè)消息并加以處理。
好了,看代碼吧!
籃球部分的代碼修改如下:
圖6.Scratch編程實(shí)戰(zhàn)一-籃球最終
籃筐部分的代碼修改如下:圖7.Scratch編程實(shí)戰(zhàn)一-籃筐最終
任務(wù)總結(jié)
好了,整個(gè)代碼部分就講解完了,你可以手動(dòng)嘗試一下,自己親手做的游戲,玩起來還是非常有意思的。游戲雖然相對(duì)簡(jiǎn)陋,但該有的核心部分已經(jīng)全部包括在其中了。我們看到的大型游戲,也是由一個(gè)個(gè) sprite 組成,他們之間也需要進(jìn)行通訊處理,原理和我們這個(gè)籃球游戲基本一致,只是他們做的更加精細(xì),游戲邏輯相對(duì)更多而已。
這個(gè)例子就到這里,后續(xù)請(qǐng)繼續(xù)關(guān)注公眾號(hào),跟著老馮叔叔和老劉叔叔一起學(xué)習(xí)其他例子吧!
聲明:本文章由網(wǎng)友投稿作為教育分享用途,如有侵權(quán)原作者可通過郵件及時(shí)和我們聯(lián)系刪除
