# Processing 程式設計
## 程式架構
```python=
def setup():
# 畫布的初始設定
def draw():
# 不停重複的在畫布上繪圖
```
- 所有放在setup()和draw()之下的程式碼都需要空四個空格
- 這個觀念在程式語言中稱為「縮排」
- python使用縮排來表示程式的階層架構,被縮排的指令們會歸屬於它的上一層程式框架
- 在以下的例子中,size()和background()就是屬於setup()的指令,當執行到setup()時才會執行到這兩行
```python=
def setup():
size(800, 600)
background(0, 255, 255)
```
## 常用繪圖指令
代號說明:
$r$: 紅色光強度
$g$: 綠色光強度
$b$: 藍色光強度
$x_i$: 第$i$個點的$x$坐標
$y_i$: 第$i$個點的$y$坐標
$w$: 矩形寬度、線條寬度、圓形直徑
$h$: 矩形高度
```fill(r, g, b)```:指定接下來繪製的**圖形**的顏色
```noFill()```:圖形無填滿
```stroke(r, g, b)```:指定接下來繪製的**線條**的顏色
```noStroke()```:無線條
```strokeWeight(w)```:指定線條寬度
```point(x1, y1)```:繪製一個點於$(x_1, y_1)$
```line(x1, y1, x2, y2)```:繪製一條線於$(x_1, y_1)$、$(x_2, y_2)$之間
```circle(x1, y1, w)```:以$(x_1, y_1)$為圓心$w$為直徑畫圓
```rect(x1, y1, w, h)```:以$(x_1, y_1)$為基準(左上角),繪製寬度為$w$高度為$h$的矩形
```triangle(x1, y1, x2, y2, x3, y3)```:繪製三頂點分別為$(x_1, y_1)$、$(x_2, y_2)$、$(x_3, y_3)$的三角形
```random(n)```:自$0~n之中隨機取一整數
## 變數型態
1. 整數(int):不帶小數點的數字
2. 小數(float):帶小數點的數字
3. 字串(str):以 ' ' 或 " " 包夾的文字
## 變數宣吿
語法:<變數名稱> = <初始值>
例如:
```python=
r = 0
w = 1024
s = "a string"
```
變數的命名有一定的規定:
1. 僅能以英文、數字、底線命名
2. 不能以數字開頭
3. 最短長度為1
4. 不能使用一些特殊字詞
## 變數使用
變數一旦被宣告之後,之後對這個變數的操作都是"使用變數"
如需在draw()中修改,請在修改前加上global指令
例如:
```python=
def draw():
global r, g, b
fill(r, g, b) # 以變數的內容決定填色色彩
circle(mouseX, mouseY, 100)
r = r + 1
g = g + 2
b = b + 3
```
## 條件判斷
當程式需要針對不同條件做不同的指令時使用
基本語法:
```python=
if <條件>:
<指令>
```
當上述條件成立時,才執行下面的指令;否則不執行該指令
所有在這個條件之下的指令需要再次縮排
```python=
if <條件1>:
<指令1>
elif <條件2>:
<指令2>
else:
<指令3>
```
當條件1成立時執行指令1;而當條件1不成立且條件2成立時執行指令2;如果兩個條件都不成立,執行指令3
條件可以為兩數的大小關係:
```python=
a > b
a < b
a >= b
a <= b
a == b # 此處的兩個等號才是判斷左右是否相等的意思
a != b
```
### 使用變數和條件判斷實作新功能
```python=
x = 400
y = 300
left = 0 # 當left為0時向右走,當left為1時向左走
def setup():
size(800, 600)
def draw():
global x, y, left
background(0, 255, 255)
fill(255, 255, 0)
```
#### 練習:你能否讓畫出來的圓形也隨著移動的過程改變顏色呢?
### 滑鼠點擊
當使用mousePressed指令時,代表每當滑鼠按下時執行其中的指令內容
```python=
if mousePressed:
rect(mouseX, mouseY, 100, 100)
```
## 迴圈敘述
當程式需要把同一段指令重複執行數次時使用,分成while迴圈與for迴圈
while迴圈基本語法:
```python=
while <條件>:
<指令>
```
當上述條件成立時,重複執行下面的指令;直到條件不成立為止
所有在這個條件之下的指令需要再次縮排
範例:
```python=
x = 0
while x < 1000:
circle(x+100, mouseY, 200)
circle(mouseX, x+100, 200)
x = x + 200
```
注意:當上述範例第5行沒打的時候,會進入無窮迴圈,導致程式離不開這段迴圈的命令
for迴圈基本語法:
```python=
for <計數變數> in range(<初始值>, <終止值>, <變化量>):
<指令>
```
for迴圈三要素:初始值、終止值、變化量
在for迴圈中,<計數變數>會被設定為初始值,每次迴圈執行完之後加上<變化量>,直到<計數變數>大於等於終止值為止,例如:
```python=
for i in range(0, 100, 1):
circle(i, i, 10)
```
在以上範例中,計數變數$i$會依次從0, 1, 2, ......變化到99之後結束迴圈,這個迴圈:
- 一共執行了100次
- $i$從0變化到99
- 在(0, 0)~(99, 99)的位置各畫了一個直徑為10的圓
※補充:
- 當迴圈的變化量為1時,可以省略變化量不寫,例如:```for i in range(0, 100):```
- 當迴圈的變化量為1,且初始值為0時,可以省略初始值與變化量不寫,例如:```for i in range(100):```
- 當迴圈的變化量不為1,但初始值為0時,不可以省略