# Drape (Drawing Programming Environment) # Drape (繪圖與程式環境) ###### tags:`drape`,`programming`,`tutorial`,`download` 原作者: `Mark Overmars` 改寫: `蔡仁杰` # 下載 [Drape3.0](https://drive.google.com/file/d/1-2u0r8LNo8eocZcNosL_IZibAHAo5Ra4/view?usp=drive_link) 請點選上面「Drape3.0」下載後解壓縮,直接點選開啟程式,若執行時遇Smartscreen阻擋,出現【Windows 已保護您的電腦】的訊息時,請按【其他資訊】,並選擇【仍要執行】即可繼續執行此程式。 # 程式的概觀 Drape(Drawing Programming Environment) 程式為教導學生認識程式基本概念而開發。 程式中內建許多指令,用來完成一些小任務,可以用輸入文字執行;或是以滑鼠拖曳,將指令集合一起之後執行。前一種方式輸入指令名稱時不能出錯,需要一些經驗;Drape屬於後者,它提供一個以滑鼠拖曳就能完成程式的設計環境,容易操作並驗證結果,適合初學者使用。 Drape 中有許多指令組成,有繪製線條和形狀的指令、移動到特定位置的指令、設定屬性的指令:如顏色、線寬和尺寸大小。控制指令:例如重複指令、呼叫程序指令和測試滑鼠按鈕等指令,不同指令由不同小圖示表示。 將指令區小圖示拖曳到長形欄位(工作區,如圖)中的指令槽區,可以用:1.按滑鼠右鍵不放來拖曳,或2.在圖示上方點一下滑鼠中鍵,並將滑鼠移到工作區中,再點一下滑鼠左鍵來完成。 ![](https://hackmd.io/_uploads/HyEajlIKa.jpg) ) ) 以下的程序是繪製一個正方形。 ![](https://i.imgur.com/zPPe6gQ.png) 第一個指令指示要繪製一條線(先暫時不管左邊的紫色的菱形,它代表一個程序)。下一個指令是將方向旋轉 90 度。接下來繪製第二條線……等等,這些指令驅使游標作相對應的動作,執行後會在畫布上繪製一個邊長為一單位的正方形。 這是另一個例子,程式繪製了 3 個相鄰的藍色邊圓圈。 ![](https://i.imgur.com/qrm7pJk.png) 第一個指令是將顏色設定為藍色。接下來畫一個圓。第三個指令是將位置向右移動。繪製另一個圓圈…,依此類推。 請閱讀本文檔並查看範例。執行這些範例並自由地改變它們來熟悉程式的運作方式。 ## 系統需求 適用於Windows作業系統。 本程式約需要 800KB 的空間。 ## 安裝和移除 要安裝該程序:只需將壓縮檔解壓縮到你選擇的資料夾中即可 要移除Drape,只需刪除資料夾即可。 # 使用 Drape 本文概述如何使用 Drape,將告訴你 `程式的視窗外觀`、`如何撰寫程序`、`如何執行`以及`如何做文件管理`。Drape 所有的程式撰寫都可以用滑鼠和輸入參數完成。若不知道指令的功能,只要將滑鼠移到圖示上面不動,約一秒後,就會顯示出該指令的提示。 ## 開始使用 點選啟動Drape後,因要將程式外觀之長與寬最適化的緣故,會把螢幕解析度自動調整為800x600像素值;當退出程式時,螢幕解析度會恢復原來的設定。 ## 視窗概觀 視窗由以下部分組成:最上面有一排按鈕,用於載入和儲存程式、以不同速度執行程式以及退出程式。在它的下方左邊是指令區,有許多小圖示,它們可被拖曳到工作區。右邊有一個空白的長方形(畫布)。程式執行結果會畫在上面。在底下工作區中,6種不同顏色的菱形代表6個程序,最多有6行程序。可以將指令拖曳到這些菱形右邊指令槽。程式的起點會有一個黑色框框,是程式的起頭,從此處開始執行程式。左邊有一個垃圾桶圖示,可以將指令拖曳到垃圾桶做刪除。![](https://i.imgur.com/SpJqLuQ.jpg) ## 在程序中增加指令 使用拖曳增加指令:在指令區選擇一個指令,之後按住滑鼠左鍵並拖曳到指令槽中,放開滑鼠按鈕放下。若放錯指令,可用滑鼠鼠點選並拖曳到正確位置即可。要刪除指令,將其拖曳到左側的垃圾桶。要複製指令,在滑鼠點選指令同時按住 <Ctrl> 鍵來達成。 圖片中的三角形圖示代表畫筆位置,稱為游標,執行繪製指令時,程式會精確地以此游標位置畫記。你可以更改游標的角度,也可以更改尺寸大小以繪製更小的形狀或移動更小的距離。 Drape中有三個指令頁面-「簡單」、「標準」、「進階」。「簡單」的頁面,適合初學者;想多做一些,請按指令上方標有「標準」的指令頁面用以選擇更多的指令;一旦使用習慣後,你就可以使用標有「進階」的指令頁面,這裏有許多新指令並給予更多彈性來寫程式。 ## 程式執行 撰寫 Drape 程序後,可以用多種方式執行該程序。第一步要指定應執行程序的哪一部分。一個程式由六個程序組成。可以用滑鼠單擊它前面的菱形符號來指示要執行那個程序。被點到的菱形周圍會出現一個黑色方框。沒有指定的話預設程序是最上面紫色菱形的程序。若這不是你想要執行的,請點擊另一個。如果想檢查程式執行順序是否正確,使用以下按鈕來慢速執行: ![](https://i.imgur.com/NHRD8Ob.png) *執行(慢)* 它很慢地執行程序。注意指令上方的紅色小倒三角形,它顯示了程序現在執行到哪裡。在繪圖區域,你將看到繪製圖形出現。三角形游標顯示當下位置、方向和一步的長度。如果你想更慢地運行程序,請先按暫停按鈕(見下文)。現在你可以重複使用以下按鈕來一步步執行你的程序: ![](https://i.imgur.com/FPGgaWp.png) *執行(一步)* 若已經用慢速執行的方式執行過,沒有錯誤時,可以按下面的按鈕來快速執行: ![](https://i.imgur.com/qNJtBe7.png) *執行(快)* 請注意若沒經過上述驗證,當程式有錯誤,用快速執行會卡在錯誤的指令而停止運作,此時程式處於暫停模式,可嘗試用慢速執行以及STOP![](https://i.imgur.com/l00xz7r.png)按鍵來跳離,若用上述步驟電腦仍然不運作,可以同時按下Ctrl+Alt+Del鍵,在工作管理對話框內找到點選Drape程式並結束處理程序,才能在短時間內脫離程式(不過所寫的程序無法存檔)。 關閉游標: ![](https://i.imgur.com/vhIzTjx.png) *游標切換* 也可以在更大的範圍視窗螢幕內執行程序,按以下按鈕會擴大畫布的面積,再按一次恢復成小螢幕: ![](https://i.imgur.com/owVStWZ.png) *螢幕切換* 在執行程序期間,可以使用暫停按鈕暫停程序: ![](https://i.imgur.com/dr4Twta.png) *暫停* 執行程式時如果出現問題,你可以使用以下按鈕停止: ![](https://i.imgur.com/l00xz7r.png) *停止* (也可以按鍵盤上的<Esc>鍵停止程式的執行)可以在執行過程中切換快慢執行,或者隱藏游標(但程序運行時無法更改畫布大小)。 ## 開啟、存檔和印出程序 Drape 有用於開新檔案、開啟舊檔和儲存你撰寫的程式的按鍵。程式檔的副檔名為 .drp(本質上它們是文字檔案,可以用文字處理程式打開,修改或儲存)。有以下按鍵: ![](https://i.imgur.com/G6nMsPn.png) *開新程式* ![](https://i.imgur.com/RA3vocg.png) *載入程式* ![](https://i.imgur.com/gETed6D.png) *儲存程式* 也可以在螢幕上列印出程序的中文描述。請按以下按鈕: ![](https://i.imgur.com/bqa1bkH.png) *列印程式* 會出現一個帶有程序的表單,該表單以可讀的文字呈現。你可以拖曳捲軸瀏覽它並可用列印程式按鍵印出指令。 ## 儲存圖片 儲存程式描繪的圖形。請使用按鈕: ![](https://i.imgur.com/glv79Vh.png) *存圖至檔案* 請輸入檔案名稱,圖片儲存為點陣圖(.BMP 格式)。 ## 結束Drape 要結束Drape,按下按鍵: ![](https://i.imgur.com/WfcpXlG.png) *離開* # 「簡單」的指令 這裡介紹在「簡單」頁面下呈現的指令。 ![](https://i.imgur.com/SkYc4X9.png) ### 指令介紹 顏色設定:「簡單」頁面提供六種不同的顏色供你選擇: ![](https://i.imgur.com/249bCno.png)*紅,*![](https://i.imgur.com/HlligHm.png)*藍,*![](https://i.imgur.com/7iGF2lV.png)*綠,*![](https://i.imgur.com/38greFQ.png)*黃,*![](https://i.imgur.com/JDAi3CY.png)*白,*![](https://i.imgur.com/z2FF3r9.png)*黑。* 此類指令之後的部分都以新顏色繪製。 比例縮放: ![](https://i.imgur.com/h0IXU2S.png) *放大,*![](https://i.imgur.com/lOcgt0I.png) *放大一點,*![](https://i.imgur.com/0BobQAJ.png) *縮小,*![](https://i.imgur.com/X5tgfVD.png) *縮小一點。* 方向調整:Drape中基本的想法是用程序控制游標(三角形)。要向不同方向移動,你必須更改游標的方向。有以下指令: ![](https://i.imgur.com/bZIEMPU.png) *朝正90度轉 (逆時鐘),*![](https://i.imgur.com/tL12Vfr.png) *朝正45度轉,*![](https://i.imgur.com/fH0SaVY.png) *朝負90度轉 (順時鐘),*![](https://i.imgur.com/IYUVMof.png) *朝負45度轉。* 根據當前的游標方向做改變,以逆時鐘為正,順時鐘為負。 繪製圓形: ![](https://i.imgur.com/BtHhrch.png) *畫正方形,*![](https://i.imgur.com/BSinlek.png) *畫長方形,*![](https://i.imgur.com/oeeqy8s.png) *畫扁長方形,*![](https://i.imgur.com/OFV7RqF.png) *畫圓,*![](https://i.imgur.com/EzY8f2c.png) *畫三角形,*![](https://i.imgur.com/GseZQta.png) *畫扁三角形。* 填滿:你可以使用填滿指令填充平面中的區域。它會以設定的顏色,從游標當下的位置開始填充每一個像素,一直填到不同顏色的區域為止。 ![](https://i.imgur.com/MucrymG.png) *填滿* 清除:要清除螢幕,請使用以下指令: ![](https://i.imgur.com/oYP8pMX.png) *清除* 移動指令:下指令將游標移動到不同的位置、或繪製線條。游標的方向是朝著三角形的尖端。當你移動或繪製一條線時,會在游標方向上完成。有以下指令: ![](https://i.imgur.com/sLvYCMN.png) *向前移動,*![](https://i.imgur.com/tRNZbWg.png) *向後移動,*![](https://i.imgur.com/oYiF7nI.png) *向前畫線,*![](https://i.imgur.com/FP64DaG.png) *向後畫線。* 了解如何將游標移至所需位置,對寫更複雜的程序是非常必要的。 重複指令:若使用重複指令可以更輕鬆地完成此操作。程式撰寫時經常需要多次重複的指令(或指令群),可以用重複指令來使程式精簡。重複指令的功能是重複下一個指令。之後的所有指令操作都只完成一次不重複。有以下重複指令: ![](https://i.imgur.com/ThASSiu.png) *重複2次,*![](https://i.imgur.com/4KcaQ9t.png) *重複3次,*![](https://i.imgur.com/0wBOFtX.png) *重複4次,*![](https://i.imgur.com/ExrbKGM.png) *重複5次,*![](https://i.imgur.com/3sxq7Hy.png) *重複10次,*![](https://i.imgur.com/Zl8puC6.png) *重複100次。* 呼叫程序:你看到的Drape程式中有六個不同顏色的菱形,右邊有六個相對應的指令槽,可以在其中一個放置指令,但只能執行那一行指令槽,如何跳到另一行執行程序呢?可以拖曳與該程序對應的指令圖示,放置在它該被執行的位置來完成。 呼叫過程擴充 Drape 的功能,當一個指令槽中的空間用完時(每一個指令槽最多可以放28個指令),也可以使用呼叫程序,就是在它的末尾呼叫第二個程序並繼續。 ![](https://i.imgur.com/FZLukcJ.png) *呼叫程序1,*![](https://i.imgur.com/4PGspeP.png) *呼叫程序2,*![](https://i.imgur.com/50Sdg2g.png) *呼叫程序3,*![](https://i.imgur.com/ki7takJ.png) *呼叫程序4,*![](https://i.imgur.com/uGQWXpT.png) *呼叫程序5,*![](https://i.imgur.com/33eqaaL.png) *呼叫程序6。* 區塊:若需要重複一系列動作。可以將這個序列放在一個區塊中來完成,區塊開頭及結束應放在同一個指令槽,否則會有意外結果產生。 ![](https://i.imgur.com/cJtOZge.png) *區塊開始,*![](https://i.imgur.com/ew4Pasp.png) *區塊結束。* # 「標準」的指令 介紹在「標準」頁面下的指令,為配合程式範例,指令不按位置次序介紹。 ![](https://i.imgur.com/2z58pL1.png) ## (一)繪圖相關 移動指令(同前): ![](https://i.imgur.com/sLvYCMN.png) *向前移動*,![](https://i.imgur.com/tRNZbWg.png) *向後移動,*![](https://i.imgur.com/oYiF7nI.png) *向前畫線,*![](https://i.imgur.com/FP64DaG.png) *向後畫線。* 範例:![](https://i.imgur.com/dmsrAWT.png) 上面的小程序會畫出兩條線段(中間是空的)。 若要讓游標歸位回到畫布的中心,請使用:![](https://i.imgur.com/6QL3Rr1.png) *移到中心* 變更方向(同前,加上正負6度): ![](https://i.imgur.com/bZIEMPU.png) *朝正90度轉 (逆時鐘),*![](https://i.imgur.com/tL12Vfr.png) *朝正45度轉,*![](https://i.imgur.com/hdKJUVz.png) *朝正6度轉,*![](https://i.imgur.com/fH0SaVY.png) *朝負90度轉 (順時鐘),*![](https://i.imgur.com/IYUVMof.png) *朝負45度轉,*![](https://i.imgur.com/oFSx859.png) *朝負6度轉*比較小的角度可用於繪製螺旋之類的東西。 範例:![](https://i.imgur.com/66vY7RI.png) 上面的小程序是通過四次畫一條線並旋轉 90 度來畫一個正方形。 設定顏色(同前): ![(https://i.imgur.com/HdMTTl1.png) *藍*](https://i.imgur.com/249bCno.png)*紅,*![](https://i.imgur.com/HlligHm.png)*藍,*![](https://i.imgur.com/7iGF2lV.png)*綠,*![](https://i.imgur.com/38greFQ.png)*黃,*![](https://i.imgur.com/JDAi3CY.png)*白,* ![](https://i.imgur.com/z2FF3r9.png)*黑。* 範例:![](https://i.imgur.com/cIoeOhg.png) 上面示範以四種不同的顏色繪製正方形的四個邊。 設定線寬 更改使用的線條寬度:![](https://i.imgur.com/2UPfRuc.png) *細線 (像素:1),*![](https://i.imgur.com/UxTqpnd.png) *一般線(像素:3),*![](https://i.imgur.com/P9wzm5s.png) *粗線 (像素:7)。* 繪製形狀 繪製實心圓形、三角形等(預設它們的邊框是黑色。): ![](https://i.imgur.com/BtHhrch.png) *畫正方形,*![](https://i.imgur.com/BSinlek.png) *畫長方形,*![](https://i.imgur.com/oeeqy8s.png) *畫扁長方形,*![](https://i.imgur.com/OFV7RqF.png) *畫圓,*![](https://i.imgur.com/EzY8f2c.png) *畫三角形,*![](https://i.imgur.com/GseZQta.png) *畫扁三角形。* ![](https://i.imgur.com/aZwwqLA.png) 上面的範例是在相同的中心點上繪製藍色正方形,黃色圓形與紅色三角形。 在「標準」頁面下有以下六個指令,是以當時設定的顏色來描繪邊框,這些繪製的形狀是空心的(填充顏色為背景顏色)。 ![](https://i.imgur.com/e55DjAT.png) *空正方形,*![](https://i.imgur.com/1oqfrJk.png) *空長方形,*![](https://i.imgur.com/shllo6g.png) *空扁長方形,*![](https://i.imgur.com/0PdMQIh.png) *空圓,*![](https://i.imgur.com/sjwXIXf.png) *空三角形,*![](https://i.imgur.com/f1vJc7L.png) *空扁三角形。* 填滿和清除(同前) ![](https://i.imgur.com/MucrymG.png) *填滿* 範例:![](https://i.imgur.com/oMuaVU1.png) 上面是一個繪製紅色正方形並用黃色填滿這方塊的小例子。 ![](https://i.imgur.com/oYP8pMX.png) *清除* 範例:![](https://i.imgur.com/XNW1YEg.png) 這個程序將清除畫布上所有圖形,並把背景設為白色。 放大與縮小(同前): ![](https://i.imgur.com/h0IXU2S.png) *放大,*![](https://i.imgur.com/lOcgt0I.png) *放大一點,*![](https://i.imgur.com/MsJqjbI.png) *放大一點點,*![](https://i.imgur.com/0BobQAJ.png) *縮小,*![](https://i.imgur.com/X5tgfVD.png) *縮小一點,*![](https://i.imgur.com/fB6D8uA.png) *縮小一點點,* 例如,以下程序會在正方形內部繪製多個正方形。 ![](https://i.imgur.com/3kr5aOu.png) 下面的程序畫了螺旋線。 ![](https://i.imgur.com/NOeWXLo.png) ## (二)程序相關 Drape程式工作區有六個不同顏色的菱形,菱形右邊有六個相對應的指令槽,你可以在其中一個放置指令,並用相對應顏色的菱形(如下,同前)來跳行。 ![](https://i.imgur.com/FZLukcJ.png) *呼叫程序1,*![](https://i.imgur.com/4PGspeP.png) *呼叫程序2,*![](https://i.imgur.com/50Sdg2g.png) *呼叫程序3,*![](https://i.imgur.com/ki7takJ.png) *呼叫程序4,*![](https://i.imgur.com/uGQWXpT.png) *呼叫程序5,*![](https://i.imgur.com/33eqaaL.png) *呼叫程序6。* 範例:![](https://i.imgur.com/GKmycba.png) 上面的程序是通過呼叫綠色程序來繪製紅色和藍色正方形。 你也可以呼叫自己,這時程序變成無限循環。注意無限循環,可能會讓其中相關的變數變大,結果會造成堆疊溢位錯誤,請小心使用。 ## (三)重複指令 ![](https://i.imgur.com/ThASSiu.png) *重複2次,*![](https://i.imgur.com/4KcaQ9t.png) *重複3次,*![](https://i.imgur.com/0wBOFtX.png) *重複4次,*![](https://i.imgur.com/ExrbKGM.png) *重複5次,*![](https://i.imgur.com/3sxq7Hy.png) *重複10次,*![](https://i.imgur.com/Zl8puC6.png) *重複100次。* 範例:![](https://i.imgur.com/y3dnaeY.png) 上面範例繪製線段5次。 如果你需要將指令重複不同的次數,你可以組合重複指令,例如以下程序繪製50條水平線。 ![](https://i.imgur.com/YGKn0fp.png) 若需要重複一系列動作,就要將這個序列放在一個區塊中來完成。如以下指令: ![](https://i.imgur.com/cJtOZge.png) *區塊開始,*![](https://i.imgur.com/ew4Pasp.png) *區塊結束。* 下面的程序是畫一個正方形: ![](https://i.imgur.com/2ifPAGZ.png) 區塊和重複語句可以交疊,例如,下面的程序繪製三個相鄰的正方形。 ![](https://i.imgur.com/dIXlepZ.png) 使用重複指令撰寫繪製一個螺旋線: ![](https://i.imgur.com/W0YApGT.png) ## (四)任意點 Drape提供隨機指定任意位置,或在任意位置畫一條線,指令如下: ![](https://i.imgur.com/PKDIPin.png) *移到任意點,*![](https://i.imgur.com/ADJBQv6.png) *畫到任意點。* 例如,以下程序隨機在畫布上繪製 100 個方塊: ![](https://i.imgur.com/EVTP1WA.png) 下面程序在畫布上繪製 100 條隨機線段: ![](https://i.imgur.com/A5l9HEr.png) ## (五)滑鼠位置相關 讓游標位置依附在滑鼠座標: ![](https://i.imgur.com/85dzv4D.png) *移到滑鼠位置,*![](https://i.imgur.com/yC1j52i.png) *畫到滑鼠位置。* 範例: ![](https://i.imgur.com/VMVcyDm.png) 上面的程序在滑鼠座標位置繪製圓圈。移動滑鼠會產生許多圓圈。 以下程序在移動滑鼠時產生線條。 ![](https://i.imgur.com/zEyYE8S.png) ## (六)事件條件判斷 Drape 包含一些條件表示指令,有以下指令: ![](https://i.imgur.com/aw9u5fk.png) *若按下左鍵,*![](https://i.imgur.com/mrD5esN.png) *若按下右鍵,*![](https://i.imgur.com/cPCmCEp.png) *若不按鍵。* 以下程序讓你在按下滑鼠左鍵時在畫布上照滑鼠移動軌跡來繪圖。 ![](https://i.imgur.com/xDFvyzo.png) 還有一些指令可以檢查游標位置下像素的顏色。,![](https://i.imgur.com/SmYT6MI.png)*若為紅,*![](https://i.imgur.com/8lkbm0r.png) *若為藍,以此類推…* 下面是一個笨拙的程序,在畫布中隨機繪製了 10 個紅色圓圈,然後隨機移動游標位置,凡是游標中心有碰觸到紅色圓圈的,那個圓圈會被改塗成藍色。 ![](https://i.imgur.com/0UIgu4u.png) # 「進階」的指令 進入到有「進階」的指令頁面,這裡你可以對顏色、旋轉角度、位置等設定進行更多控制。 ![1](https://hackmd.io/_uploads/HJqch0LOT.bmp) 當你將某些指令拖曳到指令槽時,系統會出現彈出式視窗並要求你輸入相關資料。若想要修改,可用滑鼠右鍵點擊指令以出現視窗。有以下指令: ## (一)設定屬性 ![](https://i.imgur.com/SVOF95m.png) *設定顏色* 指令中有「自行定義色彩」選項選顏色,顏色共有16777216色可選,每個顏色都有相對應的整數值。 ![](https://i.imgur.com/YbnT9rA.png) *設定線寬* 可以將線寬設定為任意值。(0 表示沒有線寬。用在繪製形狀指令上,會得到沒有邊框的圖形。) ![](https://i.imgur.com/UGFNsFi.png) *設定角度* 輸入的角度以度為單位,以逆時針為正,順時針為負。例如,值輸入 90 表示向左成直角90度。一般而言輸入角度會加上游標當下的角度。例如,如果當下游標角度是 30 度角,你取 90 度角時,會得到 120 度角。不過,若你勾選標有「以水平線為基準來旋轉角度」的核取方塊,得到的角度不加角度上游標當下角度。此時若當下游標角度是 30 度角,取 90 度角時並不會得到 120 度角,而只是 90 度。 ![](https://i.imgur.com/oegwDRv.png) *改變大小* 可以增加或減少尺寸大小。輸入值預設是有加百分號。例如,輸入值為 200 表示你將大小變兩倍。輸入值為 50 意味著你將大小減半。與上述「設定角度」相同概念,改變大小是相對於當下尺寸大小的。如果你想要絕對尺寸,請勾選標有「以預設的尺寸為基準」的核取方塊。例如,若要將大小設定回 1 倍,輸入值 100 並將點選核取方塊打勾即可。 ## (二)移動和圖形 ![](https://i.imgur.com/rXDL6Ip.png) *移動到* 指定移動的水平距離和垂直距離(取決於當時游標的角度)。注意此移動與當時的位置有關。你給的值就是移動的步數。步長的大小由當下的尺寸大小而定。(你可以指定小於 1 的值。) 但若你勾選標有「絕對座標」的框,則會移動到絕對位置而不是相對位置,就與當時角度、步長和位置無關。圖片的中心位置為 (0,0),所以可以設定 (0,0) 的絕對座標模式來移動到畫布的中心。 ![](https://i.imgur.com/Zeesoe2.png) *畫到* 與上面的移動指令有相同的移動位置,但畫一條線到新位置。 ![](https://i.imgur.com/thUa5Vz.png) *印文字* 在游標當時在畫布上的位置印出指定文字(角度可旋轉),可以輸入字型,及選擇是否為粗體。 ![](https://i.imgur.com/B40C29j.png) *從檔案載入圖形* 系統會要求你輸入要載入的圖像的檔案名稱。可以是 .bmp、.jpg、.ico 和 .png 圖像。可以直接輸入檔案名稱,但最好按下標有「…」的按鈕來搜索檔案。通常,圖像將根據當下大小值進行縮放。如果要維持原尺寸大小,請勾選標有「圖形尺寸不縮放」的方框。 ![](https://i.imgur.com/61XWfTr.png) *圖形存入檔案* 須指定用於儲存圖像的案名稱。(檔案將存成.bmp 文件。) ## (三)聲音播放 可以為你的程序添加聲音效果: ![](https://i.imgur.com/IIshWuv.png) *聲音播放* 提供音效的檔案名稱。你可以輸入檔案名稱,最好是按下標有「…」的按鈕來搜索檔案。這個指令適用於播放wav、midi和mp3 檔。 ## (四)控制程序 能夠從程序內部停止程序,有時會用到STOP與EXIT兩種指令: ![](https://i.imgur.com/Bc3wETH.png) *程式停止* 執行此指令會使程式停止,不會再執行。 ![](https://i.imgur.com/ZjrGuRc.png) *離開目前程序* 執行此指令會使程式跳離指令所在的程序而繼續執行,使用此指令的程序必須從外部(另一行指令槽)被呼叫到,否則,程式無法跳離,仍舊會停止在原有指令行上,例如: ![](https://i.imgur.com/mgQ58Oa.png) 上面的程式會在你用滑鼠左鍵點擊的位置繪製圓圈,並在你點擊滑鼠右鍵時退到第一個程序,在滑鼠位置上印出文字,然後停止。 ![區塊指令](https://hackmd.io/_uploads/H1BLTRL_T.bmp) *跳出區塊* 此指令應置於某個區塊中,當執行到此指令時,會無條件跳離區塊。 ![](https://i.imgur.com/zBYJDui.png) *重複若干次* 可以任意指定重複次數。 ![](https://i.imgur.com/5h2bf1w.png) *休眠* 程式執行到此會停止一段時間再繼續,指定的時間單位是毫秒(1/1000秒)。 ![](https://i.imgur.com/LOTq3QW.png) *顏色檢查* 指定一種顏色,執行程式時若當時滑鼠位置的顏色是這個顏色時,執行下一步(或下一個區塊),否則跳過下一步。 當操作者按下鍵盤上的某個鍵時,也可以執行某些判斷。 Drape偵測操作者按下的最後一個按鍵。你可以使用以下指令檢查它: ![](https://i.imgur.com/Mlmtgew.png) *按鍵檢查* 指令需輸入一個字母。程式執行到此時會偵測該字母是否被按下,若是,則執行下一步(區塊),若否,則跳過。 ## (五)環境變數 環境變數由三個變數組成:位置、角度和尺寸大小。通常當你加入或更改一個指令內容時,都會牽涉到更改環境變數。通常繪製某些內容時你會改動到很多的設定。若想恢復成某個步驟時的設定時,與其將設定一個一個改回來,不如在改變之前儲存環境並在之後恢復它。有以下指令: ![](https://i.imgur.com/6KCzluL.png) *儲存環境變數* ![](https://i.imgur.com/tXE78Mj.png) *恢復環境變數* 在這兩種情況下都需要輸入一個名稱來命名環境變數。若你的程序需要在不同的步驟繪製不同位置、角度和尺寸大小圖案時,可以輸入不同環境變數的名稱而呼叫出不同設定。 ## (六)呼叫其他程式 有時需要將之前編寫的程序用作當下步驟的一部分,比方說,如果你寫了一個漂亮的螺旋線程式並存檔,現在你想繪製 10 個螺旋,那麼不需要重複拖曳指令來完成,呼叫已編寫好的程式是另一種更簡潔的作法。有以下指令: ![](https://i.imgur.com/YfKvQH4.png) *從檔案執行程式* 需輸入呼叫程式的檔案名稱。你可以鍵盤輸入檔案名稱,但更好的方式是按下標有「…」的按鈕來搜索檔案。程式檔必須與呼叫它的程式儲存在同一資料夾中,否則可能無法執行。 ## (七)數值和關係式 許多進階指令都必須輸入數值,例如表示移動的距離、設定的角度等。你可以輸入文字關係式,而不是提供簡單的值。例如,你可以將角度設定為 360/5 度。關係式可以根據需求製作成複雜的形式。你可以使用標準運算符(+、-、\*、/),可以使用括號,還可以在 | 之間放置關係式取其絕對值。例如,3\*(-4+8)-|12-16|是一個有效的表達(其值為 8)。你可以使用符號 ~ 將小數點後面的數值無條件捨去,例如~(8/3) 等於2,「@」、「\$」、「!」分別代表三角函數中的cos、sin以及arctan函數(以度為單位),例如@(90)等於0;$(90)等於1;!(1)等於45(度),「\^」代表次方,例如2^3等於8。 你還可以使用一些預設有意義的值。Drape有以下的保留字:x、y、angle、size、linewidth以及color,分別代表游標的x座標、y座標、角度、尺寸大小以及當時設定的顏色。例如,要當下游標位置作鏡像,可以用絕對移動到位置 (-x,-y)。其他有 pwidth 和 pheight,它們表示螢幕的寬度和高度,xmouse 和 ymouse 表示當下滑鼠座標位置,ccolor 表示游標位置下方的顏色,而 large 表示畫布是否切換到大螢幕:是 (1)或否 (0)。 lmouse 和 rmouse 值指示是按下滑鼠左鍵還是滑鼠右鍵。還有值 true (1) 和 false (0)。此外,可以定義常見顏色的名稱(*red, blue, green, yellow, white, black, lightblue, purple*)。最後,一個特殊的保留字是「random」,使用它時,會輸出一個介於 0 和 1 之間的隨機數值。 為什麼要使用上面的這些保留字呢?我們將在底下說明。可以自己定義變數,並為它們賦值。存在以下指令: ![](https://i.imgur.com/eVWCYlq.png) *設定變數* 輸入變數的名稱和數值,就可以為變數賦值,注意變數名稱一定由26個小寫英文字母構成,內定不能以大寫或混雜數字或標點當變數名稱。數值可以是含有變數名稱或運算子的運算式,例如:將a設定為2,將b設定為3,將c設定為a\*b,此時的c值應為6,注意當要在輸入數值而使用某變數名之前,一定要先定義某變數名,否則程式執行時會產生「變數不存在」錯誤訊息。變數名稱也可以設定保留字:x、y、angle、size、linewidth以及color,會將當下游標的相關變數值傳到新的變數名稱中,不要改變這些保留字的意義以免造成混亂。例如,要將當下繪圖顏色設定為游標下方的顏色,你可以用color當變數名,把值設定為ccolor。 有時執行某些程序後會想知道變數的變化,它的值當下是多少,用到下列指令: ![](https://i.imgur.com/bE2V68S.png) *顯示變數* 會要求輸入:1.變數名稱。2.精度(四捨五入取到小數點後幾位)。3.是否印出變數名稱。其中變數名稱需為先前已經有定義的或保留字,可以在游標位置上顯示變數及它的值。 Drape提供一種方法同時顯示許多(最多10個)變數,方法是將變數寫入文字檔中,使用下列指令: ![](https://i.imgur.com/8syJ2Zi.png) *變數寫入文字* 需要輸入:1.變數(或文字)名稱。2.精度(四捨五入取到小數點後幾位)。3.是否為文字。第1點,輸入不同的變數名稱時,需用「,」將變數區隔開來(注意輸入字串不能有空格,若有,會導致錯誤)。第3點,關於本指令是可以輸入文字,作為備註或欄位,若為備註,請於開頭加上「//」字樣,搭配下文中指令「文字轉入陣列」將資料轉入系統時,會忽略開頭為「//」的那一行而跳到下一行讀取資料。若為欄位,通常是輸入變數名稱,不同變數用「,」來作區隔,若指定輸入文字,則第2點的精度值是被捨棄的。輸入的分隔標示「,」,轉入文字檔後會以「#」呈現,並儲存於「Var.txt」文字檔中,此檔案被指定放在與程式檔相同資料夾下,執行本指令後,可開啟此文件檔檢視。 ![](https://i.imgur.com/3i028JS.png) *變數比較* 需要提供一個關係條件式。當此關係式為真(1)時將執行下一步(區塊),為假(0)時會跳過一步(區塊),使用公認的比較運算子。例如,你可以輸入是否x>xmouse 或color=red等等。可用的運算子有 <, >, =, <=, >=, <> ,最後一個意思是「不等於」。要測試兩個以上的條件,需使用括號區分條件的陳述,之後以「+」連接,代表「或」,意思是兩條件中只要有一個條件為真,結果即為真。「\*」連接,代表「且」,意思是兩條件都要為真,結果才為真。例如 (x<pwidth/2)\*(x>-pwidth/2) 測試 x 位置是否在畫布的範圍內。 另一個保留字:frozen。當你將frozen 設定為真(1)時,螢幕不會被更新,此時畫布不會一步一步顯示程序繪圖過程,而只有呈現程序執行結束時的結果。只有將frozen 設定回假(0) 時,所有過程才可見。當繪製很多東西時,速度會快很多,它還可以用於動畫。 ## (八)陣列相關指令 如同前面所學到的,你可以設定許多的變數並作運算,但每個變數只能儲存一個資料,若要儲存多筆資料時,設定變數就顯得麻煩,可以把相同型態的資料一起做處理嗎?可以,那就是陣列在做的事。陣列是由相同型態的元素集合起來的一種資料型態,關於陣列Drape有以下指令: ![](https://i.imgur.com/5KCvlvF.png) *滑鼠位置寫入文字檔* 使用此指令前會需要輸入儲存文字檔名,接下來執行此指令時,會將滑鼠座標寫入指定的文字檔(不存在時會新增一個文字檔案)。程式執行到某些事件被觸發時(看下文),紀錄滑鼠座標。每行有四筆資料,分別為序號、滑鼠X座標、滑鼠Y座標、觸發按鍵的編號(左鍵:0、中鍵:1、右鍵:2)。資料間用「#」作分隔。每通過一次指令會在文件檔底端新增一行,所以在執行前應檢視文件檔中有無資料,需將舊資料清除以免混淆。之後就可用此文件檔回溯滑鼠移動的軌跡,搭配繪圖指令將此軌跡繪製出來(須注意滑鼠座標值與畫布座標值差64倍,電腦預設的縱向座標與平面上Y座標是上下相反的,故若取滑鼠座標要以移動與繪製指令來輸出時,1.需要設絕對座標。2.輸入X座標需除以64。3. 輸入Y座標需除以-64。)。 關於滑鼠按鍵的指令,如前所述有「若按下左鍵」、「若按下右鍵」、「若不按鍵」三種指令,但這些指令在滑鼠按下按鍵時,將一直不斷地告訴系統案件正被壓下,因而觸發許多而非單一的事件,若配合紀錄滑鼠位置時,那怕是按一下馬上放開按鍵,還是會回傳多筆相同的座標紀錄,因此紀錄滑鼠座標需要搭配下列三種指令: ![](https://i.imgur.com/JcTASYz.png) *放開滑鼠左鍵* ![](https://i.imgur.com/g7JC38C.png) *放開滑鼠中鍵* ![](https://i.imgur.com/H5nlqyb.png) *放開滑鼠右鍵* 在放開滑鼠按鍵時,只觸發單一事件,配合獲取滑鼠座標,就可以取得一行紀錄了。 ![](https://i.imgur.com/9fZ9NCQ.png) *游標位置寫入文字* 與前述滑鼠位置寫入文字功能相似,一樣需輸入儲存文字檔名,但指令紀錄的是游標座標,不需搭配滑鼠按鍵指令,紀錄時每行有三筆資料,分別為序號、滑鼠X座標、滑鼠Y座標(須注意滑鼠座標值與畫布座標值差32倍,故若取滑鼠座標要以移動與繪製指令來輸出時,1.需要設絕對座標。2.輸入X座標需除以32。3. 輸入Y座標需除以32。)。 資料可以輸出到文字檔,文字檔也可以輸入系統的陣列資料中,有以下指令: ![](https://i.imgur.com/Va7NFf5.png) *文字轉入陣列A* ![](https://i.imgur.com/Z0l5mT7.png) 需要指定輸入資料的文字檔名稱,資料量大小預設為10000\*10,最多可以放10000行10列的資料。文字檔中同行不同列的資料以「#」符號作分隔,例如,你可以這樣輸入文字檔,讓它執行指令後被初始化成為3\*3的陣列: -1#3#2.43 -4.8#6#0 0#0#2.76 請注意,陣列中每個元素值均需為純數字,否則會造成錯誤。例外是你也可以在文件檔中輸入註記:要在行的開頭輸入「//」標記,在其後可以寫備註,預設是將資料轉入系統時,會略過開頭為「//」的那一行而跳到下一行讀取資料,系統不讀入備註文字,不會產生錯誤。 執行「文字轉入陣列A」的指令後,會在系統中將陣列初始話並賦值,此時要提取陣列A元素,有下面的指令: ![](https://i.imgur.com/DpNhqX8.png) *選擇陣列A元素* 使用這一個指令,需於下表中輸入資料: ![](https://i.imgur.com/0JOMeoz.png) 陣列A元素會先存在變數中,請先輸入變數名稱(變數的名稱僅能由26個英文小寫字母構成)。牽涉到元素的運算時,直接輸入變數即可。第二行需輸入元素的行,列值,有兩種輸入方式:第一種是輸入數字,例如輸入0,1(中間用「,」隔開),可以得到第0行,第1列的元素值,以此類推。第二種是輸入變數。例如輸入a,1,可以得到第a行,第1列的元素值,而a是可變的(一定要先定義變數a,否則會發生錯誤)。2.輸入行,列值時請注意它的範圍:行值需介於0到10000間,列值需介於0~9間,超過範圍會發生錯誤。3.輸入行,列值時可輸入數字或變數,但變數不在此作運算,例如,於此欄位輸入a+1,1時會發生錯誤,若要作運算,請先使用「設定變數」指令來完成。 也可以開啟另一個文字檔,儲存到陣列B,並選擇陣列B元素,有以下指令: ![](https://i.imgur.com/TFKGueh.png)*文字轉入陣列B,*![](https://i.imgur.com/tPuHG1e.png)*選擇陣列B元素。* 以上是由文字檔轉入陣列,相對地也可將數值或變數一筆一筆地輸入陣列,有以下指令: ![](https://i.imgur.com/P05eXdN.png)*元素轉入陣列C* 使用指令前,會顯示表單如下,填入變數名稱或一個值,輸入存入行、列,執行程序時就會把值存入矩陣中。 ![](https://i.imgur.com/FQklLnG.png) 搭配上一個指令,要將陣列C中的元素值取出,有以下指令: ![](https://i.imgur.com/9xiHYd8.png)*選擇陣列C元素* 先將其放在一個指定的變數中,再做運算。 ![](https://i.imgur.com/j857OjF.png) ## (九)矩陣相關指令 這裡有三個指令與矩陣有關,第一個是求矩陣的值: ![](https://i.imgur.com/tM7ORv1.png)*求矩陣值* 這裡需輸入要求值方陣的文字檔,以及方陣值要輸出存入的變數名稱。 ![](https://i.imgur.com/SNzYU12.png) 再者,求反矩陣: ![](https://i.imgur.com/rZak2C8.png)*求反矩陣* 輸入要運算矩陣的文字檔,求出反矩陣後會存到Inv.txt中。 ![](https://i.imgur.com/TCr8jeU.png) 最後,以下指令求矩陣相乘: ![](https://i.imgur.com/0mhCyyt.png)*矩陣相乘* 選取矩陣乘積輸出的文字檔,要相乘的兩個矩陣,需先放在MtxA.txt與MtxB.txt中。 ![](https://i.imgur.com/3o714jw.png) 以上圖為例,相乘之後的結果,將放在Multp.txt中。 以上是跟Drape有關的指令,只要了解它的運作規則,相信你會很快上手。 玩得愉快!! ## 附錄:標準指令的範例 下載範例: [範例一](https://drive.google.com/file/d/1kGd_WM-qsRsqlDBG6V62psrWlZbpotHG/view?usp=sharing)、 [範例二](https://drive.google.com/file/d/1jOKCANFjq7B2H3ZnK32_AUqu0_IiZgdm/view?usp=sharing)、 [範例三](https://drive.google.com/file/d/1d9DXOWa1M_HDClBHkrrNBUXqQ3w6lZcf/view?usp=sharing)、[範例四](https://drive.google.com/file/d/1PRGJbYbPl6fUP6YuUmXvxJYgk4_Jmvl3/view?usp=sharing)。請將下載的文字檔與Drape.exe放在同一資料夾中,要執行前先點選載入程式![](https://i.imgur.com/RA3vocg.png) 。 程式原始碼圖片: ![](https://i.imgur.com/y86HhwU.jpg)