01題目要求
在Scratch圖形化編程中私有變量,克隆和列表的題目是屬于比較難的徘溢,如果結(jié)合了三者則會(huì)更加難吞琐。今天我們就一起看看這道綜合了三者的九宮格題目。
題目要求:用編程的方式做一個(gè)九宮格的游戲然爆,把1-9這些數(shù)字拖入左邊9個(gè)方框內(nèi)站粟,使得每一行,每一列曾雕,斜對(duì)角三個(gè)數(shù)字相加都為15.
正確排列的結(jié)果:
錯(cuò)誤排列的結(jié)果:
這個(gè)游戲涉及的角色如下:
02問題解答
這里大家可能會(huì)有一些疑問奴烙,其實(shí)澄清這些問題之后,這個(gè)題目會(huì)清晰很多剖张,下面我們一起來過一下:
方格為什么不直接用畫圖指令畫切诀,這樣還能畫得更準(zhǔn)確一些?
因?yàn)橛卯媹D指令畫出來的方框搔弄,將無法用碰撞檢測(cè)幅虑,只能通過數(shù)字的X,Y坐標(biāo)來確定落在哪個(gè)格子。舉個(gè)例子顾犹,如果要判斷數(shù)字1是否在第一個(gè)格子倒庵,而第一個(gè)格子的X坐標(biāo)是-120到-80, Y坐標(biāo)是100到170炫刷。那么判斷邏輯是這樣的:?數(shù)字1的X坐標(biāo)是否小于-80并大于-120, 數(shù)字1的Y坐標(biāo)是否小于170并大于100擎宝,如果滿足這個(gè)條件則說明在第一個(gè)格子,否則還需要依次判斷數(shù)字1是否在其他格子里浑玛。每一次判斷认臊,X坐標(biāo)需要做兩次比較運(yùn)算,Y坐標(biāo)也需要做兩次比較運(yùn)算锄奢,一共是4次運(yùn)算失晴。
方格用角色的方式剧腻,可以用碰撞檢測(cè)的方式來判斷每個(gè)方格碰到數(shù)字幾,每次判斷只需要一次碰撞檢測(cè)涂屁,比判斷X,Y坐標(biāo)的4次運(yùn)算更加容易书在。
方格怎么畫出來正正方方的?為什么我畫出來的是長(zhǎng)方形拆又?
按住鍵盤上shift鍵儒旬,再用鼠標(biāo)拖動(dòng)矩形方框就可以畫出來。
為什么不創(chuàng)建9個(gè)格子角色帖族?
因?yàn)榭梢杂每寺≌辉础_@樣同樣的代碼不用復(fù)制到9個(gè)格子角色里;同樣發(fā)現(xiàn)一處問題竖般,不需要改9個(gè)地方甚垦。
為什么數(shù)字角色不用克隆,只用一個(gè)角色9個(gè)造型涣雕?
如果數(shù)字角色用克隆艰亮,格子角色也能判斷出來是否碰到克隆的數(shù)字角色,似乎看起來也行得通挣郭∑#可是再進(jìn)一步思考,我們沒有指令“碰到角色的造型”兑障,“碰到角色的編號(hào)”等等侄非,類似下面這樣的指令只能獲取到角色本體的造型編號(hào),所以我們只能知道某個(gè)格子是否碰到數(shù)字流译,但是沒法檢測(cè)到格子具體碰到哪個(gè)數(shù)字逞怨。所以數(shù)字角色要有9個(gè)。
03具體代碼
方格:
? ?1先蒋,2代碼段運(yùn)行之后,格子的編號(hào)是這樣的:
? ?下面第三段代碼是記錄:格子中放置的數(shù)字宛渐。
數(shù)字的主要代碼竞漾,需要拷貝9份到9個(gè)數(shù)字:
人物的主要代碼:
人物這里有個(gè)技巧,我們用到了自定義積木窥翩,可以讓代碼更加清晰业岁,同時(shí)用到了一個(gè)“停止判斷”廣播來停止其他腳本的技巧,因?yàn)镾cratch的自定義積木中
“停止這個(gè)腳本”指令僅僅會(huì)停止自定義積木中的指令寇蚊,并不能令執(zhí)行過程停止笔时。
而直接調(diào)用“停止該角色的其他腳本”指令也并不會(huì)令執(zhí)行過程停止。
所以我們要加一個(gè)“停止判斷”廣播仗岸。
另外需要注意的是:在拖動(dòng)數(shù)字的時(shí)候需要在運(yùn)行模式允耿,也就是需要點(diǎn)了右上角這個(gè)按鈕到大窗口借笙。否則Scratch不會(huì)把鼠標(biāo)的拖拽動(dòng)作與編程指令掛鉤。
做到這里題目就結(jié)束了较锡。同學(xué)們可以繼續(xù)思考兩個(gè)問題:
如果1個(gè)數(shù)字跨了2個(gè)格會(huì)有什么后果业稼?如何避免這個(gè)問題呢?
能不能換種做法蚂蕴,用1個(gè)數(shù)字角色低散,而格子角色創(chuàng)建9個(gè)呢?
后面看同學(xué)們的響應(yīng)程度再?zèng)Q定是否給出來這兩個(gè)問題的答案骡楼。另外大家關(guān)注“碼小愛”公眾號(hào)回復(fù)“源碼”熔号,將可以得到本次程序的源碼。