• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Scratch制作升級(jí)版計(jì)算器

      2020-01-13 09:46:29
      電腦報(bào) 2020年46期
      關(guān)鍵詞:運(yùn)算符鍵值計(jì)算器

      我們之前曾經(jīng)用Scratch編寫(xiě)過(guò)一個(gè)計(jì)算器,但是那個(gè)計(jì)算器數(shù)字顯示使用Scratch的變量顯示過(guò)于簡(jiǎn)陋,這次我們使用新的思路制作一個(gè)顯示效果優(yōu)秀、加減乘除、有小數(shù)點(diǎn)、連續(xù)運(yùn)算等功能的升級(jí)版計(jì)算器。由于我們之前已經(jīng)介紹過(guò)一種計(jì)算器程序,本文中僅對(duì)升級(jí)版重難點(diǎn)和不同之處做介紹,其他部分可以掃碼下載源代碼自行研究。

      一、界面準(zhǔn)備

      首先用圖片編輯軟件對(duì)一張手機(jī)計(jì)算器截圖進(jìn)行修改,保留需要的功能按鈕,保存圖片高度為360像素,導(dǎo)入作為舞臺(tái)背景。

      自行繪制白色的數(shù)字角色,這個(gè)角色中包含11個(gè)造型,依次是1到9、0、小數(shù)點(diǎn)和負(fù)號(hào),并修改這些造型的命名。根據(jù)顯示效果調(diào)整好角色的大?。▓D1)。

      二、 按鍵定位和輸入

      對(duì)舞臺(tái)背景編程。我們需要通過(guò)偵測(cè)鼠標(biāo)的位置來(lái)確定用戶(hù)點(diǎn)擊了哪里,并利用“二維數(shù)組”為按鈕定位,首先根據(jù)按鈕將界面分為5行4列,比如數(shù)字5就在3行2列、數(shù)字9在4行3列。測(cè)量每個(gè)行列X、Y坐標(biāo)的范圍(如圖1),重復(fù)監(jiān)測(cè)鼠標(biāo)的XY坐標(biāo),并據(jù)此修改變量“計(jì)算機(jī)-行”和“計(jì)算機(jī)-列”的值(圖2)。

      再將鼠標(biāo)位置的行列位置轉(zhuǎn)換對(duì)應(yīng)的變量“鍵值”,就可以讓程序知道用戶(hù)點(diǎn)擊了計(jì)算器的哪個(gè)按鍵了。比如當(dāng)“計(jì)算器-行=2,計(jì)算器-列=4”時(shí),變量鍵值設(shè)為‘+(含單引號(hào)),表示點(diǎn)擊了加號(hào),用單引號(hào)是將數(shù)字鍵和其他功能鍵區(qū)別開(kāi)。用“if參數(shù)1”(監(jiān)控坐標(biāo))、“if參數(shù)2”(監(jiān)控行列)、“if參數(shù)3”(鼠標(biāo)按下)來(lái)表示當(dāng)前的輸入狀態(tài),當(dāng)值為1時(shí)表示有輸入,為0時(shí)表示目前沒(méi)有輸入(圖3)。

      當(dāng)偵測(cè)到鼠標(biāo)點(diǎn)擊的動(dòng)作時(shí),表示輸入了數(shù)字或運(yùn)算符,根據(jù)此時(shí)的鍵值判讀執(zhí)行相應(yīng)的自定義積木(函數(shù))。比如當(dāng)鍵值=‘退格時(shí)調(diào)用退格積木。通過(guò)觀察,我們還可以把功能相同的按鍵歸為一組。比如說(shuō)數(shù)字鍵0~9為一組,當(dāng)按下數(shù)字鍵時(shí),判斷“鍵值>-1”,調(diào)用“數(shù)字鍵”;運(yùn)算符加減乘除為一組,“if參數(shù)3=0”調(diào)用相應(yīng)積木進(jìn)入后續(xù)的判斷。

      比如收到小數(shù)點(diǎn)的鍵值,就執(zhí)行小數(shù)點(diǎn)的積木(函數(shù))(圖4)。

      為了實(shí)現(xiàn)連加操作(不按清除就在結(jié)果上繼續(xù)運(yùn)算),加減乘除和等號(hào)的操作幾乎一樣,不同在于加減乘除時(shí)要先清空一次列表,判斷運(yùn)算符不是等號(hào),完成時(shí)清空運(yùn)算符變量(圖5)。

      三、 數(shù)字顯示

      對(duì)數(shù)字角色編程。輸入的數(shù)字和計(jì)算結(jié)果依次保存在列表“字符串”中,為了在計(jì)算器的液晶屏中顯示出多個(gè)漂亮的數(shù)字,從列表中依次提取數(shù)值用來(lái)控制角色造型的變換,改變數(shù)字角色的造型后再克隆,并用計(jì)算公式根據(jù)數(shù)字的位數(shù)調(diào)整克隆體的放置位置。(圖6)。

      在計(jì)算器的顯示屏上每個(gè)字符寬20,顯示屏上最多可以容納12個(gè)。用計(jì)算公式調(diào)整每個(gè)克隆體的位置。當(dāng)接收到清除命令——清除數(shù)字=Yes時(shí)就可刪除克隆體表現(xiàn)出清屏的效果(圖7)。

      四、 數(shù)值的存入、取出和分解

      通過(guò)對(duì)“字符串”列表的操作完成數(shù)字的這些操作。當(dāng)點(diǎn)擊鼠標(biāo)時(shí),首先進(jìn)行狀態(tài)判斷,如果條件符合就將“鍵值”加入“字符串”列表,這里使用“字符串”列表存儲(chǔ)輸入的數(shù)值,每個(gè)位單獨(dú)存放。當(dāng)需要參與運(yùn)算時(shí),要把列表中臨時(shí)存放的各位數(shù)轉(zhuǎn)換回可計(jì)算的數(shù)字。運(yùn)算符之前輸入的數(shù)字依次賦值給操作數(shù)1,運(yùn)算符之后的數(shù)字賦值給操作數(shù)2,然后根據(jù)運(yùn)算符進(jìn)行運(yùn)算即可。注意每次更新字符串列表后需要把變量“清除數(shù)字=Yes”和“廣播顯示字符串”配合使用,清屏后顯示新的數(shù)字(圖8、圖9)。

      當(dāng)需要從列表中取出數(shù)值用于計(jì)算時(shí),依次取出第1項(xiàng)(最高位)后乘10加上第2項(xiàng)(次高位),直到全部取出存入變量操作數(shù)。遇到小數(shù)點(diǎn)時(shí)需要做一個(gè)很精巧的特別處理,變量i就是用來(lái)記錄小數(shù)點(diǎn)的位置,遇到小數(shù)點(diǎn)時(shí)i歸零,之后i記錄的數(shù)字就是小數(shù)點(diǎn)后的數(shù)位了,當(dāng)i=j時(shí)表示沒(méi)有小數(shù)點(diǎn),當(dāng)不相等時(shí)根據(jù)i的數(shù)值將操作數(shù)除以10的i次方即可得到含小數(shù)點(diǎn)的正確數(shù)值了(圖10)。

      五、 運(yùn)算

      運(yùn)算部分比較簡(jiǎn)單,直接根據(jù)運(yùn)算符對(duì)輸入的變量“操作數(shù)1”和“操作數(shù)2”計(jì)算即可。其中“運(yùn)算符2”設(shè)為鍵值的第二個(gè)字符是因?yàn)檫\(yùn)算符第一個(gè)字符是單引號(hào)(圖11)。

      當(dāng)計(jì)算位數(shù)結(jié)果超出11位時(shí)或在已有運(yùn)算符的情況下輸入新的運(yùn)算符時(shí),需要刷新列表或截取有效部分重新顯示。這里使用自定義積木“分解顯示的數(shù)字”完成這些需求(圖12)。

      以上就是升級(jí)版計(jì)算器的重難點(diǎn),受篇幅所限其他功能的實(shí)現(xiàn)請(qǐng)見(jiàn)33版 掃碼下載后自行研究,注意看程序是如何處理運(yùn)算符和等號(hào)的,以及如何處理小數(shù)點(diǎn)問(wèn)題和運(yùn)算結(jié)果超出顯示屏寬度的問(wèn)題,非常值得學(xué)習(xí)借鑒。(本程序源代碼參考自冉爸學(xué)堂特此感謝?。?/p>

      猜你喜歡
      運(yùn)算符鍵值計(jì)算器
      老祖?zhèn)魇诨具\(yùn)算符
      非請(qǐng)勿進(jìn) 為注冊(cè)表的重要鍵值上把“鎖”
      [計(jì)算器不是萬(wàn)能的]
      一鍵直達(dá) Windows 10注冊(cè)表編輯高招
      一個(gè)損壞的計(jì)算器
      一個(gè)損壞的計(jì)算器
      計(jì)算器游戲
      C++運(yùn)算符重載剖析
      表達(dá)式求值及符號(hào)推導(dǎo)
      C++中運(yùn)算符的重載應(yīng)用
      竹山县| 彭州市| 明溪县| 南投县| 城口县| 新余市| 宜春市| 井冈山市| 雷州市| 龙川县| 京山县| 江都市| 长春市| 眉山市| 麻阳| 灵武市| 工布江达县| 乌苏市| 广河县| 英超| 宁远县| 敖汉旗| 剑川县| 新邵县| 本溪市| 梓潼县| 威海市| 张北县| 东安县| 从江县| 临沂市| 津市市| 汉阴县| 高密市| 蓝田县| 万安县| 宜都市| 六盘水市| 高淳县| 鹤壁市| 湘阴县|