姜陽(yáng)
在實(shí)際教學(xué)中,如何通過(guò)計(jì)算思維解決問(wèn)題呢?下面,通過(guò)對(duì)“石頭剪子布”游戲的思維解讀,讓學(xué)生依次經(jīng)歷“探究問(wèn)題,總結(jié)規(guī)則—抽象問(wèn)題特征—建立結(jié)構(gòu)模型—編程解決部分問(wèn)題—遷移解決全部問(wèn)題”的完整過(guò)程,體驗(yàn)程序設(shè)計(jì)中運(yùn)用計(jì)算思維解決問(wèn)題的方法。
運(yùn)用計(jì)算機(jī)解決問(wèn)題的第一步是將現(xiàn)實(shí)世界中的事物進(jìn)行抽象和設(shè)計(jì),“石頭剪子布”游戲的完成,首先要做好游戲思維的抽象,構(gòu)建游戲的屬性、規(guī)則和方法。
1.“石頭剪子布”游戲的起源
“石頭剪子布”游戲是一款猜拳游戲,又稱為“猜丁殼”,起源于中國(guó),最早記載于《全唐詩(shī)》中的《招手令》,詩(shī)中用比喻的手法生動(dòng)地描述了類似的游戲。明朝李日華《六研齋筆記》載云:“俗飲,以手指屈伸相搏,謂之豁拳,又名豁指頭?!彪S著世界貿(mào)易的發(fā)展,這款游戲傳播到世界各地,在很多比賽中,由于該游戲簡(jiǎn)單快速且不需要任何道具,被選擇用來(lái)決定比賽的先發(fā)戰(zhàn)隊(duì)。
2.“石頭剪子布”游戲的規(guī)則
游戲規(guī)則:石頭打剪刀,布包石頭,剪刀剪布。
根據(jù)游戲規(guī)則,會(huì)產(chǎn)生如下頁(yè)表所示的結(jié)果。
題目要求:編寫一個(gè)程序,讓計(jì)算機(jī)同我們一起玩“石頭剪子布”游戲。人輸了,則輸出“輸了”;人贏了,則輸出“贏了”;人與計(jì)算機(jī)平了,則輸出“平局”。
困惑:①計(jì)算機(jī)如何能夠像人類一樣用手來(lái)顯示“石頭”“剪子”“布”?②人類用手顯示“石頭”“剪子”“布”,計(jì)算機(jī)如何能看懂?③如何讓計(jì)算機(jī)隨機(jī)選擇“石頭”“剪子”“布”模擬人類游戲的過(guò)程?
解決方法:
第一個(gè)問(wèn)題:計(jì)算機(jī)如何能夠像人類一樣用手來(lái)顯示“石頭”“剪子”“布”?
計(jì)算機(jī)沒有人類一樣的手和腳,不能夠像人一樣用肢體直接進(jìn)行游戲,因此,我們只能站在計(jì)算機(jī)的角度思考問(wèn)題。計(jì)算機(jī)只能處理數(shù)字化的信息,首先要考慮如何將游戲數(shù)字化,也就是將游戲的主體“石頭”“剪子”“布”數(shù)字化。解決這個(gè)問(wèn)題非常簡(jiǎn)單:根據(jù)人為規(guī)定的數(shù)字,通過(guò)一系列計(jì)算能夠?qū)崿F(xiàn)就可以。例如,為游戲做了如下規(guī)定:用數(shù)字0代表“石頭”,數(shù)字1代表“布”,數(shù)字2代表“剪刀”。為什么選用這三個(gè)數(shù)字呢?一是便于記憶。三個(gè)數(shù)字簡(jiǎn)單、連續(xù),編寫程序人員可以快速記錄下來(lái)。二是形象。用手實(shí)現(xiàn)“石頭”時(shí),同時(shí)也是數(shù)字“0”的表達(dá)手勢(shì),用手實(shí)現(xiàn)“剪刀”時(shí),也是數(shù)字“2”的表達(dá)手勢(shì),根據(jù)數(shù)字的連續(xù)性,規(guī)定“1”來(lái)表達(dá)“布”。三是容易程序?qū)崿F(xiàn)。因?yàn)?、1、2三個(gè)數(shù)字簡(jiǎn)單、連續(xù),運(yùn)用一系列運(yùn)算可以很容易實(shí)現(xiàn)?!笆^”“剪子”“布”可以運(yùn)用任何一個(gè)數(shù)字來(lái)代表,不是必須用0、1、2三個(gè)數(shù)字。
第二個(gè)問(wèn)題:人類用手顯示“石頭”“剪子”“布”,計(jì)算機(jī)如何能看懂?
計(jì)算機(jī)沒有眼睛和思維,看不見人類的動(dòng)作,也思考不出來(lái)代表的意義,所以,需要我們站在計(jì)算機(jī)的角度分析這個(gè)問(wèn)題。既然人類的表示計(jì)算機(jī)看不懂,就選擇計(jì)算機(jī)和人類都能讀懂的方式,運(yùn)用文字、圖片或者圖案等創(chuàng)設(shè)游戲畫面,運(yùn)用鼠標(biāo)單擊等進(jìn)行動(dòng)作的選擇,代替了人類肢體語(yǔ)言的表達(dá),如圖1所示。
第三個(gè)問(wèn)題:如何讓計(jì)算機(jī)隨機(jī)選擇“石頭”“剪子”“布”模擬人類游戲的過(guò)程?
在計(jì)算機(jī)語(yǔ)言中有一種函數(shù)是隨機(jī)函數(shù),可以輕松解決問(wèn)題。隨機(jī)數(shù):①真正的隨機(jī)數(shù)是運(yùn)用物理現(xiàn)象產(chǎn)生的,如擲錢幣、骰子、轉(zhuǎn)輪、核裂變等。②隨機(jī)產(chǎn)生的數(shù)據(jù)特點(diǎn)是后面的數(shù)據(jù)與前面產(chǎn)生的數(shù)據(jù)沒有任何聯(lián)系。③計(jì)算機(jī)產(chǎn)生隨機(jī)數(shù)的方法有二,一是產(chǎn)生[0,1]區(qū)間上均勻分布的隨機(jī)數(shù)的方法,二是離散型均勻分布的隨機(jī)數(shù)的方法。兩種方法都是運(yùn)用數(shù)學(xué)的相關(guān)理論和公式進(jìn)行推導(dǎo),我們就不再深入地研究和探討了。本例中運(yùn)用VB語(yǔ)言的隨機(jī)數(shù)(rnd和randomize),隨機(jī)產(chǎn)生0、1、2三個(gè)數(shù)字,模擬實(shí)現(xiàn)計(jì)算機(jī)進(jìn)行“石頭”“剪子”“布”的選擇。
運(yùn)用計(jì)算機(jī)實(shí)現(xiàn)“石頭剪子布”游戲的思維框圖如下頁(yè)圖2所示。
界面設(shè)計(jì)如下頁(yè)圖3所示。
程序?qū)崿F(xiàn)(具體代碼省略)。
1.直接提供程序界面
學(xué)生剛剛進(jìn)入程序設(shè)計(jì)的初級(jí)學(xué)習(xí),只會(huì)簡(jiǎn)單的順序結(jié)構(gòu)和選擇結(jié)構(gòu),因此,程序的界面可以由教師直接提供給學(xué)生,這樣有利于后續(xù)問(wèn)題的分析和理解。
2.提供部分程序框架
為了節(jié)省課堂教學(xué)時(shí)間,高效率地解決問(wèn)題,教師可以提供程序的框架,如選擇“石頭”程序,提供部分框架內(nèi)容:
Private Sub Picture1_Click()
Dim x As Integer
Label4.Caption = "石頭" (人顯示“石頭”)
隨機(jī)產(chǎn)生0,1,2三個(gè)數(shù)字
程序核心部分:如果是0(石頭對(duì)石頭),結(jié)果是平;如果是1(石頭對(duì)布),結(jié)果是輸;如果是2(石頭對(duì)剪子),結(jié)果是贏。
3.引導(dǎo)學(xué)生完成程序代碼編寫
根據(jù)程序框架中的提示,運(yùn)用學(xué)習(xí)過(guò)的程序語(yǔ)言知識(shí),填寫完整的代碼。程序核心部分是典型的選擇結(jié)構(gòu),運(yùn)用三個(gè)If語(yǔ)句或者If語(yǔ)句的嵌套,完成選擇和判斷。
4.方法遷移,完成游戲程序其他部分
借鑒選擇“石頭”程序分析和代碼實(shí)現(xiàn),完成選擇“布”和選擇“剪子”兩部分代碼程序。
“石頭剪子布”游戲的實(shí)現(xiàn),運(yùn)用計(jì)算思維方法,從計(jì)算機(jī)的角度分析問(wèn)題、解決問(wèn)題,引導(dǎo)學(xué)生運(yùn)用數(shù)字化抽象和推理,建立結(jié)構(gòu)模型,利用數(shù)字化工具自動(dòng)解決問(wèn)題,培養(yǎng)了學(xué)生處理數(shù)字環(huán)境中的問(wèn)題的重要思維方式。