# 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.在圖示上方點一下滑鼠中鍵,並將滑鼠移到工作區中,再點一下滑鼠左鍵來完成。

)
)
以下的程序是繪製一個正方形。

第一個指令指示要繪製一條線(先暫時不管左邊的紫色的菱形,它代表一個程序)。下一個指令是將方向旋轉 90 度。接下來繪製第二條線……等等,這些指令驅使游標作相對應的動作,執行後會在畫布上繪製一個邊長為一單位的正方形。
這是另一個例子,程式繪製了 3 個相鄰的藍色邊圓圈。

第一個指令是將顏色設定為藍色。接下來畫一個圓。第三個指令是將位置向右移動。繪製另一個圓圈…,依此類推。
請閱讀本文檔並查看範例。執行這些範例並自由地改變它們來熟悉程式的運作方式。
## 系統需求
適用於Windows作業系統。
本程式約需要 800KB 的空間。
## 安裝和移除
要安裝該程序:只需將壓縮檔解壓縮到你選擇的資料夾中即可
要移除Drape,只需刪除資料夾即可。
# 使用 Drape
本文概述如何使用 Drape,將告訴你 `程式的視窗外觀`、`如何撰寫程序`、`如何執行`以及`如何做文件管理`。Drape 所有的程式撰寫都可以用滑鼠和輸入參數完成。若不知道指令的功能,只要將滑鼠移到圖示上面不動,約一秒後,就會顯示出該指令的提示。
## 開始使用
點選啟動Drape後,因要將程式外觀之長與寬最適化的緣故,會把螢幕解析度自動調整為800x600像素值;當退出程式時,螢幕解析度會恢復原來的設定。
## 視窗概觀
視窗由以下部分組成:最上面有一排按鈕,用於載入和儲存程式、以不同速度執行程式以及退出程式。在它的下方左邊是指令區,有許多小圖示,它們可被拖曳到工作區。右邊有一個空白的長方形(畫布)。程式執行結果會畫在上面。在底下工作區中,6種不同顏色的菱形代表6個程序,最多有6行程序。可以將指令拖曳到這些菱形右邊指令槽。程式的起點會有一個黑色框框,是程式的起頭,從此處開始執行程式。左邊有一個垃圾桶圖示,可以將指令拖曳到垃圾桶做刪除。
## 在程序中增加指令
使用拖曳增加指令:在指令區選擇一個指令,之後按住滑鼠左鍵並拖曳到指令槽中,放開滑鼠按鈕放下。若放錯指令,可用滑鼠鼠點選並拖曳到正確位置即可。要刪除指令,將其拖曳到左側的垃圾桶。要複製指令,在滑鼠點選指令同時按住 <Ctrl> 鍵來達成。
圖片中的三角形圖示代表畫筆位置,稱為游標,執行繪製指令時,程式會精確地以此游標位置畫記。你可以更改游標的角度,也可以更改尺寸大小以繪製更小的形狀或移動更小的距離。
Drape中有三個指令頁面-「簡單」、「標準」、「進階」。「簡單」的頁面,適合初學者;想多做一些,請按指令上方標有「標準」的指令頁面用以選擇更多的指令;一旦使用習慣後,你就可以使用標有「進階」的指令頁面,這裏有許多新指令並給予更多彈性來寫程式。
## 程式執行
撰寫 Drape 程序後,可以用多種方式執行該程序。第一步要指定應執行程序的哪一部分。一個程式由六個程序組成。可以用滑鼠單擊它前面的菱形符號來指示要執行那個程序。被點到的菱形周圍會出現一個黑色方框。沒有指定的話預設程序是最上面紫色菱形的程序。若這不是你想要執行的,請點擊另一個。如果想檢查程式執行順序是否正確,使用以下按鈕來慢速執行:
 *執行(慢)*
它很慢地執行程序。注意指令上方的紅色小倒三角形,它顯示了程序現在執行到哪裡。在繪圖區域,你將看到繪製圖形出現。三角形游標顯示當下位置、方向和一步的長度。如果你想更慢地運行程序,請先按暫停按鈕(見下文)。現在你可以重複使用以下按鈕來一步步執行你的程序:
 *執行(一步)*
若已經用慢速執行的方式執行過,沒有錯誤時,可以按下面的按鈕來快速執行:
 *執行(快)*
請注意若沒經過上述驗證,當程式有錯誤,用快速執行會卡在錯誤的指令而停止運作,此時程式處於暫停模式,可嘗試用慢速執行以及STOP按鍵來跳離,若用上述步驟電腦仍然不運作,可以同時按下Ctrl+Alt+Del鍵,在工作管理對話框內找到點選Drape程式並結束處理程序,才能在短時間內脫離程式(不過所寫的程序無法存檔)。
關閉游標:
 *游標切換*
也可以在更大的範圍視窗螢幕內執行程序,按以下按鈕會擴大畫布的面積,再按一次恢復成小螢幕:
 *螢幕切換*
在執行程序期間,可以使用暫停按鈕暫停程序:
 *暫停*
執行程式時如果出現問題,你可以使用以下按鈕停止:
 *停止*
(也可以按鍵盤上的<Esc>鍵停止程式的執行)可以在執行過程中切換快慢執行,或者隱藏游標(但程序運行時無法更改畫布大小)。
## 開啟、存檔和印出程序
Drape 有用於開新檔案、開啟舊檔和儲存你撰寫的程式的按鍵。程式檔的副檔名為 .drp(本質上它們是文字檔案,可以用文字處理程式打開,修改或儲存)。有以下按鍵:
 *開新程式*
 *載入程式*
 *儲存程式*
也可以在螢幕上列印出程序的中文描述。請按以下按鈕:
 *列印程式*
會出現一個帶有程序的表單,該表單以可讀的文字呈現。你可以拖曳捲軸瀏覽它並可用列印程式按鍵印出指令。
## 儲存圖片
儲存程式描繪的圖形。請使用按鈕:
 *存圖至檔案*
請輸入檔案名稱,圖片儲存為點陣圖(.BMP 格式)。
## 結束Drape
要結束Drape,按下按鍵:
 *離開*
# 「簡單」的指令
這裡介紹在「簡單」頁面下呈現的指令。

### 指令介紹
顏色設定:「簡單」頁面提供六種不同的顏色供你選擇:
*紅,**藍,**綠,**黃,**白,**黑。* 此類指令之後的部分都以新顏色繪製。
比例縮放:
 *放大,* *放大一點,* *縮小,* *縮小一點。*
方向調整:Drape中基本的想法是用程序控制游標(三角形)。要向不同方向移動,你必須更改游標的方向。有以下指令:
 *朝正90度轉 (逆時鐘),* *朝正45度轉,* *朝負90度轉 (順時鐘),* *朝負45度轉。* 根據當前的游標方向做改變,以逆時鐘為正,順時鐘為負。
繪製圓形:
 *畫正方形,* *畫長方形,* *畫扁長方形,* *畫圓,* *畫三角形,* *畫扁三角形。*
填滿:你可以使用填滿指令填充平面中的區域。它會以設定的顏色,從游標當下的位置開始填充每一個像素,一直填到不同顏色的區域為止。
 *填滿*
清除:要清除螢幕,請使用以下指令:
 *清除*
移動指令:下指令將游標移動到不同的位置、或繪製線條。游標的方向是朝著三角形的尖端。當你移動或繪製一條線時,會在游標方向上完成。有以下指令:
 *向前移動,* *向後移動,* *向前畫線,* *向後畫線。*
了解如何將游標移至所需位置,對寫更複雜的程序是非常必要的。
重複指令:若使用重複指令可以更輕鬆地完成此操作。程式撰寫時經常需要多次重複的指令(或指令群),可以用重複指令來使程式精簡。重複指令的功能是重複下一個指令。之後的所有指令操作都只完成一次不重複。有以下重複指令:
 *重複2次,* *重複3次,* *重複4次,* *重複5次,* *重複10次,* *重複100次。*
呼叫程序:你看到的Drape程式中有六個不同顏色的菱形,右邊有六個相對應的指令槽,可以在其中一個放置指令,但只能執行那一行指令槽,如何跳到另一行執行程序呢?可以拖曳與該程序對應的指令圖示,放置在它該被執行的位置來完成。
呼叫過程擴充 Drape 的功能,當一個指令槽中的空間用完時(每一個指令槽最多可以放28個指令),也可以使用呼叫程序,就是在它的末尾呼叫第二個程序並繼續。
 *呼叫程序1,* *呼叫程序2,* *呼叫程序3,* *呼叫程序4,* *呼叫程序5,* *呼叫程序6。*
區塊:若需要重複一系列動作。可以將這個序列放在一個區塊中來完成,區塊開頭及結束應放在同一個指令槽,否則會有意外結果產生。
 *區塊開始,* *區塊結束。*
# 「標準」的指令
介紹在「標準」頁面下的指令,為配合程式範例,指令不按位置次序介紹。

## (一)繪圖相關
移動指令(同前):
 *向前移動*, *向後移動,* *向前畫線,* *向後畫線。*
範例:
上面的小程序會畫出兩條線段(中間是空的)。
若要讓游標歸位回到畫布的中心,請使用: *移到中心*
變更方向(同前,加上正負6度):
 *朝正90度轉 (逆時鐘),* *朝正45度轉,* *朝正6度轉,* *朝負90度轉 (順時鐘),* *朝負45度轉,* *朝負6度轉*比較小的角度可用於繪製螺旋之類的東西。
範例:
上面的小程序是通過四次畫一條線並旋轉 90 度來畫一個正方形。
設定顏色(同前):
*紅,**藍,**綠,**黃,**白,* *黑。*
範例:
上面示範以四種不同的顏色繪製正方形的四個邊。
設定線寬
更改使用的線條寬度: *細線 (像素:1),* *一般線(像素:3),* *粗線 (像素:7)。*
繪製形狀
繪製實心圓形、三角形等(預設它們的邊框是黑色。):
 *畫正方形,* *畫長方形,* *畫扁長方形,* *畫圓,* *畫三角形,* *畫扁三角形。*

上面的範例是在相同的中心點上繪製藍色正方形,黃色圓形與紅色三角形。
在「標準」頁面下有以下六個指令,是以當時設定的顏色來描繪邊框,這些繪製的形狀是空心的(填充顏色為背景顏色)。
 *空正方形,* *空長方形,* *空扁長方形,* *空圓,* *空三角形,* *空扁三角形。*
填滿和清除(同前)
 *填滿*
範例:
上面是一個繪製紅色正方形並用黃色填滿這方塊的小例子。
 *清除*
範例:
這個程序將清除畫布上所有圖形,並把背景設為白色。
放大與縮小(同前):
 *放大,* *放大一點,* *放大一點點,* *縮小,* *縮小一點,* *縮小一點點,*
例如,以下程序會在正方形內部繪製多個正方形。

下面的程序畫了螺旋線。

## (二)程序相關
Drape程式工作區有六個不同顏色的菱形,菱形右邊有六個相對應的指令槽,你可以在其中一個放置指令,並用相對應顏色的菱形(如下,同前)來跳行。
 *呼叫程序1,* *呼叫程序2,* *呼叫程序3,* *呼叫程序4,* *呼叫程序5,* *呼叫程序6。*
範例:
上面的程序是通過呼叫綠色程序來繪製紅色和藍色正方形。
你也可以呼叫自己,這時程序變成無限循環。注意無限循環,可能會讓其中相關的變數變大,結果會造成堆疊溢位錯誤,請小心使用。
## (三)重複指令
 *重複2次,* *重複3次,* *重複4次,* *重複5次,* *重複10次,* *重複100次。*
範例:
上面範例繪製線段5次。
如果你需要將指令重複不同的次數,你可以組合重複指令,例如以下程序繪製50條水平線。

若需要重複一系列動作,就要將這個序列放在一個區塊中來完成。如以下指令:
 *區塊開始,* *區塊結束。*
下面的程序是畫一個正方形:

區塊和重複語句可以交疊,例如,下面的程序繪製三個相鄰的正方形。

使用重複指令撰寫繪製一個螺旋線:

## (四)任意點
Drape提供隨機指定任意位置,或在任意位置畫一條線,指令如下:
 *移到任意點,* *畫到任意點。*
例如,以下程序隨機在畫布上繪製 100 個方塊:

下面程序在畫布上繪製 100 條隨機線段:

## (五)滑鼠位置相關
讓游標位置依附在滑鼠座標:
 *移到滑鼠位置,* *畫到滑鼠位置。*
範例:

上面的程序在滑鼠座標位置繪製圓圈。移動滑鼠會產生許多圓圈。
以下程序在移動滑鼠時產生線條。

## (六)事件條件判斷
Drape 包含一些條件表示指令,有以下指令:
 *若按下左鍵,* *若按下右鍵,* *若不按鍵。*
以下程序讓你在按下滑鼠左鍵時在畫布上照滑鼠移動軌跡來繪圖。

還有一些指令可以檢查游標位置下像素的顏色。,*若為紅,* *若為藍,以此類推…*
下面是一個笨拙的程序,在畫布中隨機繪製了 10 個紅色圓圈,然後隨機移動游標位置,凡是游標中心有碰觸到紅色圓圈的,那個圓圈會被改塗成藍色。

# 「進階」的指令
進入到有「進階」的指令頁面,這裡你可以對顏色、旋轉角度、位置等設定進行更多控制。

當你將某些指令拖曳到指令槽時,系統會出現彈出式視窗並要求你輸入相關資料。若想要修改,可用滑鼠右鍵點擊指令以出現視窗。有以下指令:
## (一)設定屬性
 *設定顏色*
指令中有「自行定義色彩」選項選顏色,顏色共有16777216色可選,每個顏色都有相對應的整數值。
 *設定線寬*
可以將線寬設定為任意值。(0 表示沒有線寬。用在繪製形狀指令上,會得到沒有邊框的圖形。)
 *設定角度*
輸入的角度以度為單位,以逆時針為正,順時針為負。例如,值輸入 90 表示向左成直角90度。一般而言輸入角度會加上游標當下的角度。例如,如果當下游標角度是 30 度角,你取 90 度角時,會得到 120 度角。不過,若你勾選標有「以水平線為基準來旋轉角度」的核取方塊,得到的角度不加角度上游標當下角度。此時若當下游標角度是 30 度角,取 90 度角時並不會得到 120 度角,而只是 90 度。
 *改變大小*
可以增加或減少尺寸大小。輸入值預設是有加百分號。例如,輸入值為 200 表示你將大小變兩倍。輸入值為 50 意味著你將大小減半。與上述「設定角度」相同概念,改變大小是相對於當下尺寸大小的。如果你想要絕對尺寸,請勾選標有「以預設的尺寸為基準」的核取方塊。例如,若要將大小設定回 1 倍,輸入值 100 並將點選核取方塊打勾即可。
## (二)移動和圖形
 *移動到*
指定移動的水平距離和垂直距離(取決於當時游標的角度)。注意此移動與當時的位置有關。你給的值就是移動的步數。步長的大小由當下的尺寸大小而定。(你可以指定小於 1 的值。)
但若你勾選標有「絕對座標」的框,則會移動到絕對位置而不是相對位置,就與當時角度、步長和位置無關。圖片的中心位置為 (0,0),所以可以設定 (0,0) 的絕對座標模式來移動到畫布的中心。
 *畫到*
與上面的移動指令有相同的移動位置,但畫一條線到新位置。
 *印文字*
在游標當時在畫布上的位置印出指定文字(角度可旋轉),可以輸入字型,及選擇是否為粗體。
 *從檔案載入圖形*
系統會要求你輸入要載入的圖像的檔案名稱。可以是 .bmp、.jpg、.ico 和 .png 圖像。可以直接輸入檔案名稱,但最好按下標有「…」的按鈕來搜索檔案。通常,圖像將根據當下大小值進行縮放。如果要維持原尺寸大小,請勾選標有「圖形尺寸不縮放」的方框。
 *圖形存入檔案*
須指定用於儲存圖像的案名稱。(檔案將存成.bmp 文件。)
## (三)聲音播放
可以為你的程序添加聲音效果:
 *聲音播放*
提供音效的檔案名稱。你可以輸入檔案名稱,最好是按下標有「…」的按鈕來搜索檔案。這個指令適用於播放wav、midi和mp3 檔。
## (四)控制程序
能夠從程序內部停止程序,有時會用到STOP與EXIT兩種指令:
 *程式停止*
執行此指令會使程式停止,不會再執行。
 *離開目前程序*
執行此指令會使程式跳離指令所在的程序而繼續執行,使用此指令的程序必須從外部(另一行指令槽)被呼叫到,否則,程式無法跳離,仍舊會停止在原有指令行上,例如:

上面的程式會在你用滑鼠左鍵點擊的位置繪製圓圈,並在你點擊滑鼠右鍵時退到第一個程序,在滑鼠位置上印出文字,然後停止。
 *跳出區塊*
此指令應置於某個區塊中,當執行到此指令時,會無條件跳離區塊。
 *重複若干次*
可以任意指定重複次數。
 *休眠*
程式執行到此會停止一段時間再繼續,指定的時間單位是毫秒(1/1000秒)。
 *顏色檢查*
指定一種顏色,執行程式時若當時滑鼠位置的顏色是這個顏色時,執行下一步(或下一個區塊),否則跳過下一步。
當操作者按下鍵盤上的某個鍵時,也可以執行某些判斷。 Drape偵測操作者按下的最後一個按鍵。你可以使用以下指令檢查它:
 *按鍵檢查*
指令需輸入一個字母。程式執行到此時會偵測該字母是否被按下,若是,則執行下一步(區塊),若否,則跳過。
## (五)環境變數
環境變數由三個變數組成:位置、角度和尺寸大小。通常當你加入或更改一個指令內容時,都會牽涉到更改環境變數。通常繪製某些內容時你會改動到很多的設定。若想恢復成某個步驟時的設定時,與其將設定一個一個改回來,不如在改變之前儲存環境並在之後恢復它。有以下指令:
 *儲存環境變數*
 *恢復環境變數*
在這兩種情況下都需要輸入一個名稱來命名環境變數。若你的程序需要在不同的步驟繪製不同位置、角度和尺寸大小圖案時,可以輸入不同環境變數的名稱而呼叫出不同設定。
## (六)呼叫其他程式
有時需要將之前編寫的程序用作當下步驟的一部分,比方說,如果你寫了一個漂亮的螺旋線程式並存檔,現在你想繪製 10 個螺旋,那麼不需要重複拖曳指令來完成,呼叫已編寫好的程式是另一種更簡潔的作法。有以下指令:
 *從檔案執行程式*
需輸入呼叫程式的檔案名稱。你可以鍵盤輸入檔案名稱,但更好的方式是按下標有「…」的按鈕來搜索檔案。程式檔必須與呼叫它的程式儲存在同一資料夾中,否則可能無法執行。
## (七)數值和關係式
許多進階指令都必須輸入數值,例如表示移動的距離、設定的角度等。你可以輸入文字關係式,而不是提供簡單的值。例如,你可以將角度設定為 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 之間的隨機數值。
為什麼要使用上面的這些保留字呢?我們將在底下說明。可以自己定義變數,並為它們賦值。存在以下指令:
 *設定變數*
輸入變數的名稱和數值,就可以為變數賦值,注意變數名稱一定由26個小寫英文字母構成,內定不能以大寫或混雜數字或標點當變數名稱。數值可以是含有變數名稱或運算子的運算式,例如:將a設定為2,將b設定為3,將c設定為a\*b,此時的c值應為6,注意當要在輸入數值而使用某變數名之前,一定要先定義某變數名,否則程式執行時會產生「變數不存在」錯誤訊息。變數名稱也可以設定保留字:x、y、angle、size、linewidth以及color,會將當下游標的相關變數值傳到新的變數名稱中,不要改變這些保留字的意義以免造成混亂。例如,要將當下繪圖顏色設定為游標下方的顏色,你可以用color當變數名,把值設定為ccolor。
有時執行某些程序後會想知道變數的變化,它的值當下是多少,用到下列指令:
 *顯示變數*
會要求輸入:1.變數名稱。2.精度(四捨五入取到小數點後幾位)。3.是否印出變數名稱。其中變數名稱需為先前已經有定義的或保留字,可以在游標位置上顯示變數及它的值。
Drape提供一種方法同時顯示許多(最多10個)變數,方法是將變數寫入文字檔中,使用下列指令:
 *變數寫入文字*
需要輸入:1.變數(或文字)名稱。2.精度(四捨五入取到小數點後幾位)。3.是否為文字。第1點,輸入不同的變數名稱時,需用「,」將變數區隔開來(注意輸入字串不能有空格,若有,會導致錯誤)。第3點,關於本指令是可以輸入文字,作為備註或欄位,若為備註,請於開頭加上「//」字樣,搭配下文中指令「文字轉入陣列」將資料轉入系統時,會忽略開頭為「//」的那一行而跳到下一行讀取資料。若為欄位,通常是輸入變數名稱,不同變數用「,」來作區隔,若指定輸入文字,則第2點的精度值是被捨棄的。輸入的分隔標示「,」,轉入文字檔後會以「#」呈現,並儲存於「Var.txt」文字檔中,此檔案被指定放在與程式檔相同資料夾下,執行本指令後,可開啟此文件檔檢視。
 *變數比較*
需要提供一個關係條件式。當此關係式為真(1)時將執行下一步(區塊),為假(0)時會跳過一步(區塊),使用公認的比較運算子。例如,你可以輸入是否x>xmouse 或color=red等等。可用的運算子有 <, >, =, <=, >=, <> ,最後一個意思是「不等於」。要測試兩個以上的條件,需使用括號區分條件的陳述,之後以「+」連接,代表「或」,意思是兩條件中只要有一個條件為真,結果即為真。「\*」連接,代表「且」,意思是兩條件都要為真,結果才為真。例如 (x<pwidth/2)\*(x>-pwidth/2) 測試 x 位置是否在畫布的範圍內。
另一個保留字:frozen。當你將frozen 設定為真(1)時,螢幕不會被更新,此時畫布不會一步一步顯示程序繪圖過程,而只有呈現程序執行結束時的結果。只有將frozen 設定回假(0) 時,所有過程才可見。當繪製很多東西時,速度會快很多,它還可以用於動畫。
## (八)陣列相關指令
如同前面所學到的,你可以設定許多的變數並作運算,但每個變數只能儲存一個資料,若要儲存多筆資料時,設定變數就顯得麻煩,可以把相同型態的資料一起做處理嗎?可以,那就是陣列在做的事。陣列是由相同型態的元素集合起來的一種資料型態,關於陣列Drape有以下指令:
 *滑鼠位置寫入文字檔*
使用此指令前會需要輸入儲存文字檔名,接下來執行此指令時,會將滑鼠座標寫入指定的文字檔(不存在時會新增一個文字檔案)。程式執行到某些事件被觸發時(看下文),紀錄滑鼠座標。每行有四筆資料,分別為序號、滑鼠X座標、滑鼠Y座標、觸發按鍵的編號(左鍵:0、中鍵:1、右鍵:2)。資料間用「#」作分隔。每通過一次指令會在文件檔底端新增一行,所以在執行前應檢視文件檔中有無資料,需將舊資料清除以免混淆。之後就可用此文件檔回溯滑鼠移動的軌跡,搭配繪圖指令將此軌跡繪製出來(須注意滑鼠座標值與畫布座標值差64倍,電腦預設的縱向座標與平面上Y座標是上下相反的,故若取滑鼠座標要以移動與繪製指令來輸出時,1.需要設絕對座標。2.輸入X座標需除以64。3. 輸入Y座標需除以-64。)。
關於滑鼠按鍵的指令,如前所述有「若按下左鍵」、「若按下右鍵」、「若不按鍵」三種指令,但這些指令在滑鼠按下按鍵時,將一直不斷地告訴系統案件正被壓下,因而觸發許多而非單一的事件,若配合紀錄滑鼠位置時,那怕是按一下馬上放開按鍵,還是會回傳多筆相同的座標紀錄,因此紀錄滑鼠座標需要搭配下列三種指令:
 *放開滑鼠左鍵*
 *放開滑鼠中鍵*
 *放開滑鼠右鍵*
在放開滑鼠按鍵時,只觸發單一事件,配合獲取滑鼠座標,就可以取得一行紀錄了。
 *游標位置寫入文字*
與前述滑鼠位置寫入文字功能相似,一樣需輸入儲存文字檔名,但指令紀錄的是游標座標,不需搭配滑鼠按鍵指令,紀錄時每行有三筆資料,分別為序號、滑鼠X座標、滑鼠Y座標(須注意滑鼠座標值與畫布座標值差32倍,故若取滑鼠座標要以移動與繪製指令來輸出時,1.需要設絕對座標。2.輸入X座標需除以32。3. 輸入Y座標需除以32。)。
資料可以輸出到文字檔,文字檔也可以輸入系統的陣列資料中,有以下指令:
 *文字轉入陣列A*

需要指定輸入資料的文字檔名稱,資料量大小預設為10000\*10,最多可以放10000行10列的資料。文字檔中同行不同列的資料以「#」符號作分隔,例如,你可以這樣輸入文字檔,讓它執行指令後被初始化成為3\*3的陣列:
-1#3#2.43
-4.8#6#0
0#0#2.76
請注意,陣列中每個元素值均需為純數字,否則會造成錯誤。例外是你也可以在文件檔中輸入註記:要在行的開頭輸入「//」標記,在其後可以寫備註,預設是將資料轉入系統時,會略過開頭為「//」的那一行而跳到下一行讀取資料,系統不讀入備註文字,不會產生錯誤。
執行「文字轉入陣列A」的指令後,會在系統中將陣列初始話並賦值,此時要提取陣列A元素,有下面的指令:
 *選擇陣列A元素*
使用這一個指令,需於下表中輸入資料:

陣列A元素會先存在變數中,請先輸入變數名稱(變數的名稱僅能由26個英文小寫字母構成)。牽涉到元素的運算時,直接輸入變數即可。第二行需輸入元素的行,列值,有兩種輸入方式:第一種是輸入數字,例如輸入0,1(中間用「,」隔開),可以得到第0行,第1列的元素值,以此類推。第二種是輸入變數。例如輸入a,1,可以得到第a行,第1列的元素值,而a是可變的(一定要先定義變數a,否則會發生錯誤)。2.輸入行,列值時請注意它的範圍:行值需介於0到10000間,列值需介於0~9間,超過範圍會發生錯誤。3.輸入行,列值時可輸入數字或變數,但變數不在此作運算,例如,於此欄位輸入a+1,1時會發生錯誤,若要作運算,請先使用「設定變數」指令來完成。
也可以開啟另一個文字檔,儲存到陣列B,並選擇陣列B元素,有以下指令:
*文字轉入陣列B,**選擇陣列B元素。*
以上是由文字檔轉入陣列,相對地也可將數值或變數一筆一筆地輸入陣列,有以下指令:
*元素轉入陣列C*
使用指令前,會顯示表單如下,填入變數名稱或一個值,輸入存入行、列,執行程序時就會把值存入矩陣中。

搭配上一個指令,要將陣列C中的元素值取出,有以下指令:
*選擇陣列C元素*
先將其放在一個指定的變數中,再做運算。

## (九)矩陣相關指令
這裡有三個指令與矩陣有關,第一個是求矩陣的值:
*求矩陣值*
這裡需輸入要求值方陣的文字檔,以及方陣值要輸出存入的變數名稱。

再者,求反矩陣:
*求反矩陣*
輸入要運算矩陣的文字檔,求出反矩陣後會存到Inv.txt中。

最後,以下指令求矩陣相乘:
*矩陣相乘*
選取矩陣乘積輸出的文字檔,要相乘的兩個矩陣,需先放在MtxA.txt與MtxB.txt中。

以上圖為例,相乘之後的結果,將放在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放在同一資料夾中,要執行前先點選載入程式 。
程式原始碼圖片:
