[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:01.12,0:00:04.70,Default,,0000,0000,0000,,現在讓我們談談這段時間\N你們一直在使用的東西: Dialogue: 0,0:00:04.70,0:00:05.76,Default,,0000,0000,0000,,函數 Dialogue: 0,0:00:05.76,0:00:09.75,Default,,0000,0000,0000,,每當你使用指令時,像是\Nrect() 或 fill() 或 text() Dialogue: 0,0:00:09.75,0:00:11.58,Default,,0000,0000,0000,,你就在召喚函數 Dialogue: 0,0:00:11.58,0:00:14.84,Default,,0000,0000,0000,,而那些函數依照你的指令去繪圖 Dialogue: 0,0:00:14.84,0:00:16.32,Default,,0000,0000,0000,,函數到底是什麼? Dialogue: 0,0:00:16.32,0:00:19.87,Default,,0000,0000,0000,,它是一連串我們集合起來\N並給予名稱的程式碼 Dialogue: 0,0:00:19.87,0:00:23.77,Default,,0000,0000,0000,,因為我們想能夠多次地\N重複使用哪一點功能 Dialogue: 0,0:00:23.77,0:00:26.32,Default,,0000,0000,0000,,想一想 rect()\Nrect() 做的是什麼? Dialogue: 0,0:00:26.32,0:00:28.61,Default,,0000,0000,0000,,它畫出四條線,對吧? Dialogue: 0,0:00:28.61,0:00:31.51,Default,,0000,0000,0000,,我們也可用 line() 函數\N做出相同的,是吧? Dialogue: 0,0:00:31.51,0:00:34.04,Default,,0000,0000,0000,,而我們也能得到一個貌似矩形的繪圖 Dialogue: 0,0:00:34.04,0:00:36.11,Default,,0000,0000,0000,,但是我們發現 Dialogue: 0,0:00:36.11,0:00:39.36,Default,,0000,0000,0000,,我們也想能夠多次繪畫矩形 Dialogue: 0,0:00:39.36,0:00:43.05,Default,,0000,0000,0000,,如果每次都要計算怎麼\N從一個角落畫直線到另一個角落 Dialogue: 0,0:00:43.05,0:00:45.49,Default,,0000,0000,0000,,再從一個角落到另一個角落\N就會變得很惱人 Dialogue: 0,0:00:45.49,0:00:48.08,Default,,0000,0000,0000,,與其那樣\N我們不如寫一個 rect() 函數 Dialogue: 0,0:00:48.08,0:00:50.67,Default,,0000,0000,0000,,而該函數做的正正就是這 Dialogue: 0,0:00:50.67,0:00:54.56,Default,,0000,0000,0000,,跟那四行編碼做的一模一樣\N只是所需的碼少很多 Dialogue: 0,0:00:54.98,0:00:56.98,Default,,0000,0000,0000,,那還蠻酷的 Dialogue: 0,0:00:56.98,0:01:02.27,Default,,0000,0000,0000,,而 rect() 是其中一個在可汗學院\N所有學習課程中都可使用的函數 Dialogue: 0,0:01:02.27,0:01:07.72,Default,,0000,0000,0000,,但是,你也可以在你的程式裏\N寫自己的函數 Dialogue: 0,0:01:07.72,0:01:10.48,Default,,0000,0000,0000,,例如:我們設計一個程式 Dialogue: 0,0:01:10.48,0:01:13.98,Default,,0000,0000,0000,,讓我們能多次繪製溫斯頓 Dialogue: 0,0:01:13.98,0:01:16.80,Default,,0000,0000,0000,,說不定說個有關他的生命故事 Dialogue: 0,0:01:16.80,0:01:20.16,Default,,0000,0000,0000,,然後展示出他人生裏的\N每個年齡階段 Dialogue: 0,0:01:20.16,0:01:24.24,Default,,0000,0000,0000,,所以我們的溫斯頓繪製碼是可能是這樣: Dialogue: 0,0:01:24.24,0:01:26.100,Default,,0000,0000,0000,,我們有 faceX 和 faceY 變數 Dialogue: 0,0:01:26.100,0:01:28.56,Default,,0000,0000,0000,,來儲存臉的中心位置 Dialogue: 0,0:01:28.56,0:01:30.26,Default,,0000,0000,0000,,然後我們畫上眼和嘴 Dialogue: 0,0:01:30.26,0:01:32.60,Default,,0000,0000,0000,,相對著那些變數 Dialogue: 0,0:01:32.60,0:01:34.72,Default,,0000,0000,0000,,現在程式可以看到編碼 Dialogue: 0,0:01:34.72,0:01:37.69,Default,,0000,0000,0000,,它不是在任何函數中\N所以會直接執行 Dialogue: 0,0:01:37.69,0:01:39.90,Default,,0000,0000,0000,,而且只執行一次 Dialogue: 0,0:01:39.90,0:01:43.47,Default,,0000,0000,0000,,好的,把它變成一個函數 Dialogue: 0,0:01:43.47,0:01:47.55,Default,,0000,0000,0000,,這一步很似我們宣告變數的步驟 Dialogue: 0,0:01:47.55,0:01:49.14,Default,,0000,0000,0000,,因為其實那正是我們在做的 Dialogue: 0,0:01:49.14,0:01:52.06,Default,,0000,0000,0000,,所以我們寫 var drawWinston Dialogue: 0,0:01:52.06,0:01:54.34,Default,,0000,0000,0000,,幫它取個好名字,高描述性 Dialogue: 0,0:01:54.34,0:01:55.71,Default,,0000,0000,0000,,然後一個 =\N Dialogue: 0,0:01:55.71,0:01:59.13,Default,,0000,0000,0000,,但在這,我們不寫一個數字或一個字串 Dialogue: 0,0:01:59.13,0:02:02.90,Default,,0000,0000,0000,,而直接寫 function \N確定你拼對 Dialogue: 0,0:02:02.90,0:02:06.05,Default,,0000,0000,0000,,之後一個空白括號 () Dialogue: 0,0:02:06.05,0:02:08.18,Default,,0000,0000,0000,,然後一個開花括號 { Dialogue: 0,0:02:08.18,0:02:09.72,Default,,0000,0000,0000,,再一個關花括號 } Dialogue: 0,0:02:09.72,0:02:11.26,Default,,0000,0000,0000,,和最後的分號 ; Dialogue: 0,0:02:11.26,0:02:15.40,Default,,0000,0000,0000,,很好,我們需要做的是\N將我們想要的所有東西 Dialogue: 0,0:02:15.40,0:02:18.77,Default,,0000,0000,0000,,放進函數的開和關花括號之間 Dialogue: 0,0:02:18.77,0:02:21.65,Default,,0000,0000,0000,,我們就把所有編碼放進去 Dialogue: 0,0:02:21.65,0:02:25.71,Default,,0000,0000,0000,,放它進我們的函數裏 \N排好內縮,然後 Dialogue: 0,0:02:25.71,0:02:26.70,Default,,0000,0000,0000,,噔噔! Dialogue: 0,0:02:26.70,0:02:28.78,Default,,0000,0000,0000,,現在我們有的便是這變數 Dialogue: 0,0:02:28.78,0:02:30.34,Default,,0000,0000,0000,,它存着一個函數\N Dialogue: 0,0:02:30.34,0:02:34.11,Default,,0000,0000,0000,,也就是說我們給了\N這編碼區塊一個標籤 Dialogue: 0,0:02:34.11,0:02:36.62,Default,,0000,0000,0000,,以便我們於任何時間告訴我們的程式: Dialogue: 0,0:02:36.62,0:02:40.82,Default,,0000,0000,0000,,嘿!找出那個有標籤的\N編碼區塊然後執行它! Dialogue: 0,0:02:40.82,0:02:43.52,Default,,0000,0000,0000,,我們正令這編碼變得可再用 Dialogue: 0,0:02:43.52,0:02:46.39,Default,,0000,0000,0000,,但注意,我們現在沒有任何溫斯頓! Dialogue: 0,0:02:46.39,0:02:48.100,Default,,0000,0000,0000,,我們丟了溫斯頓!\N他跑了去哪裡? Dialogue: 0,0:02:48.100,0:02:52.92,Default,,0000,0000,0000,,好的,當我們放這於函數裏 Dialogue: 0,0:02:52.92,0:02:55.63,Default,,0000,0000,0000,,我們便告訴了程式:\N嘿,這裡有一堆程式碼 Dialogue: 0,0:02:55.63,0:02:57.84,Default,,0000,0000,0000,,我想稍後能夠執行 Dialogue: 0,0:02:57.84,0:03:00.58,Default,,0000,0000,0000,,但只當我叫你去執行時才動手 Dialogue: 0,0:03:00.58,0:03:03.77,Default,,0000,0000,0000,,我們需告訴它去執行程式碼 Dialogue: 0,0:03:03.77,0:03:06.36,Default,,0000,0000,0000,,就是指我們需召喚函數 Dialogue: 0,0:03:06.36,0:03:09.46,Default,,0000,0000,0000,,就如我們執行ellipse() 和 \Nrect() 和 line() 時一樣 Dialogue: 0,0:03:09.46,0:03:13.72,Default,,0000,0000,0000,,我們寫下函數名稱 \NdrawWinston Dialogue: 0,0:03:13.72,0:03:16.04,Default,,0000,0000,0000,,隨後接上一個括號 () Dialogue: 0,0:03:16.04,0:03:18.40,Default,,0000,0000,0000,,當然還有分號 ; Dialogue: 0,0:03:18.40,0:03:19.26,Default,,0000,0000,0000,,噔噔! Dialogue: 0,0:03:19.26,0:03:20.91,Default,,0000,0000,0000,,我們有個溫斯頓了! Dialogue: 0,0:03:20.91,0:03:23.83,Default,,0000,0000,0000,,好,我覺得它很酷\N但你可能不覺它很酷 Dialogue: 0,0:03:23.83,0:03:28.58,Default,,0000,0000,0000,,因為我們做的一切\N就是程式做它之前就會做的 Dialogue: 0,0:03:28.58,0:03:29.95,Default,,0000,0000,0000,,有點好笑吧? Dialogue: 0,0:03:29.95,0:03:32.66,Default,,0000,0000,0000,,函數的用意就在於重複使用 Dialogue: 0,0:03:32.66,0:03:34.60,Default,,0000,0000,0000,,現在就來試試 Dialogue: 0,0:03:34.60,0:03:37.59,Default,,0000,0000,0000,,我們可以復製貼上這函數召喚 Dialogue: 0,0:03:37.59,0:03:40.89,Default,,0000,0000,0000,,噔噔!噔噔!\N一遍又一遍地 Dialogue: 0,0:03:40.89,0:03:44.30,Default,,0000,0000,0000,,嗯,但看起來好像一樣 Dialogue: 0,0:03:44.30,0:03:45.86,Default,,0000,0000,0000,,喔,成功了 Dialogue: 0,0:03:46.40,0:03:48.08,Default,,0000,0000,0000,,它繪出了許多溫斯頓 Dialogue: 0,0:03:48.08,0:03:50.96,Default,,0000,0000,0000,,但問題是它們全在同一個地方 Dialogue: 0,0:03:50.96,0:03:53.90,Default,,0000,0000,0000,,如果我們有X光眼的話\N就是可以看穿畫布 Dialogue: 0,0:03:53.90,0:03:55.55,Default,,0000,0000,0000,,看見三個溫斯頓 Dialogue: 0,0:03:56.40,0:04:00.35,Default,,0000,0000,0000,,但我沒有X光眼 \N(我不知道你) Dialogue: 0,0:04:00.35,0:04:03.16,Default,,0000,0000,0000,,但是,我們可以對函數\N做一些小小的改變 Dialogue: 0,0:04:03.16,0:04:04.58,Default,,0000,0000,0000,,讓它現身 Dialogue: 0,0:04:04.58,0:04:08.75,Default,,0000,0000,0000,,你看 faceX 和 faceY \N它們永遠都是202 和 208 Dialogue: 0,0:04:08.75,0:04:11.66,Default,,0000,0000,0000,,我們可利用\N函數 random() 來改變這 Dialogue: 0,0:04:11.66,0:04:14.49,Default,,0000,0000,0000,,要不 random() 從 50 到 350 Dialogue: 0,0:04:14.49,0:04:16.76,Default,,0000,0000,0000,,它便會隨機產生一個\N於那兩數之間的數字 Dialogue: 0,0:04:16.76,0:04:18.94,Default,,0000,0000,0000,,我們可以在這做一樣的 Dialogue: 0,0:04:18.94,0:04:21.50,Default,,0000,0000,0000,,所以每當這函式被召喚時 Dialogue: 0,0:04:21.50,0:04:23.42,Default,,0000,0000,0000,,它便會產生這新的隨機數 Dialogue: 0,0:04:23.42,0:04:26.69,Default,,0000,0000,0000,,如果我們按 restart\N我們便可得到隨機溫斯頓 Dialogue: 0,0:04:26.69,0:04:28.42,Default,,0000,0000,0000,,太厲害了! Dialogue: 0,0:04:29.86,0:04:31.47,Default,,0000,0000,0000,,好,我覺得這很酷因爲\N Dialogue: 0,0:04:31.47,0:04:34.72,Default,,0000,0000,0000,,如果我們沒有擺它在函式裏\N原本該需要一大堆編碼來寫這 Dialogue: 0,0:04:34.72,0:04:37.33,Default,,0000,0000,0000,,本來會有三倍的程式碼 Dialogue: 0,0:04:38.36,0:04:40.78,Default,,0000,0000,0000,,不過目前仍然不是它用處的極致 Dialogue: 0,0:04:40.78,0:04:43.42,Default,,0000,0000,0000,,因爲我們大概不想要隨機溫斯頓 Dialogue: 0,0:04:43.42,0:04:46.90,Default,,0000,0000,0000,,我們也許想能夠放將溫斯頓\N在螢幕上一個固定的地方 Dialogue: 0,0:04:46.90,0:04:47.90,Default,,0000,0000,0000,,所以請密切留意 Dialogue: 0,0:04:47.90,0:04:51.53,Default,,0000,0000,0000,,因爲我們將講解\N如何傳遞參數給函數 Dialogue: 0,0:04:51.53,0:04:54.38,Default,,0000,0000,0000,,而你便能學會做那