---
tags: 程式設計,期中作業
---
# 2021-11-28 程式設計期中報告
#### 教科一A 許軒豪 410730013
---
## 程式介紹
### 大綱
* 畫出 臉、眼睛、鏡框 跟著移動
* 利用 ARC 寫出嘴巴笑容上揚
* 使用 var 宣告自由落體的變動數值
* 利用 if(mouseIsPressed) 做出變化
---
## 第一段
### 畫出臉、左右眼睛和耳朵並跟滑鼠移動

---
```javascript=
function draw() {
background(255);
noStroke();
var r1=mouseX //定義
var r2=mouseY //定義
var Color_R= r1/2+30 //定義
var Color_G= r1/2+50+r2 //定義
var Color_B= r1/2+10 //定義
fill(Color_R, Color_G, Color_B)
noStroke();
ellipse(mouseX - 120, mouseY - 170, 150, 150);
fill(128,42,42)
noStroke();
ellipse(mouseX - 120, mouseY - 170, 100, 100);
fill(255)
noStroke();
ellipse(mouseX + 120, mouseY - 170, 150, 150);
fill(128,42,42)
noStroke();
ellipse(mouseX + 120, mouseY - 170, 100, 100);
// ------ 臉部(黃色) ------ //
fill(255, 225, 0);
ellipse(mouseX, mouseY, 400, 400);
// ------ 眼睛左邊 ------ //
fill(0)
noStroke();
ellipse(mouseX - 80, mouseY - 60, 100, 100);
// ------ 眼睛右邊 ------ //
fill(0)
noStroke();
ellipse(mouseX + 80, mouseY - 60, 100, 100);
```
---
### 把眼睛加上超大眼白

---
```javascript=
function draw() {
background(100); //背景覆蓋
noFill(); //請勿填滿
stroke(255) //邊框白色
strokeWeight(50); //邊框粗細
ellipse(mouseX - 80, mouseY - 60, 130, 130); //繪製兩個圓
ellipse(mouseX + 80, mouseY - 60, 130, 130); //繪製兩個圓
}
```
---
### 畫出微笑曲線

---
```javascript=
function draw() {
// ------ 微笑 ------ //
stroke(0);
strokeWeight(8);
noFill();
arc(x, y, 300, 300, 0.25, PI - 0.25) //300 曲度, 0.25剛剛好放成正的
}
```
---
### 整個臉都組合起來跟著滑鼠移動

---
```javascript=
function setup() {
createCanvas(windowWidth, windowHeight);
background(255);
}
function draw() {
background(255);
var r1=mouseX //定義
var r2=mouseY //定義
var Color_R= r1/2+30 //定義
var Color_G= r1/2+50+r2 //定義
var Color_B= r1/2+10 //定義
fill(Color_R, Color_G, Color_B)
noStroke();
ellipse(mouseX - 120, mouseY - 170, 150, 150);
fill(128,42,42)
noStroke();
ellipse(mouseX - 120, mouseY - 170, 100, 100);
fill(255)
noStroke();
ellipse(mouseX + 120, mouseY - 170, 150, 150);
fill(128,42,42)
noStroke();
ellipse(mouseX + 120, mouseY - 170, 100, 100);
// ------ 臉部 ------ //
fill(255, 225, 0);
ellipse(mouseX, mouseY, 400, 400);
// ------ 眼睛左邊 ------ //
fill(0)
noStroke();
ellipse(mouseX - 80, mouseY - 60, 100, 100);
// ------ 眼睛右邊 ------ //
fill(0)
noStroke();
ellipse(mouseX + 80, mouseY - 60, 100, 100);
// ------ 超大眼白 ------ //
noFill();
stroke(255)
strokeWeight(50);
ellipse(mouseX - 80, mouseY - 60, 130, 130);
ellipse(mouseX + 80, mouseY - 60, 130, 130);
// ------ 微笑 ------ //
stroke(0);
strokeWeight(8);
noFill();
arc(mouseX, mouseY, 300, 300, 0.25, PI - 0.25) //曲度width/2+ height/2
}
```
---
## 第二段
### 做出自由落體先 var 宣告
---
```javascript=
// ------ 宣 告 ------ //
var x =100 // X座標
var y =100 // X座標
var v_x =3 // 往右的速度
var v_y =3 // 往下的速度
```
---
### 將程式碼內的坐標都更換為x, y, v_x, v_y
---
```javascript=
// ------ 臉部 ------ //
fill(255, 225, 0);
ellipse(x, y, 400, 400);
// ------ 眼睛左邊 ------ //
fill(0)
noStroke();
ellipse(x - 80, y - 60, 50, 50);
// ------ 眼睛右邊 ------ //
fill(0)
noStroke();
ellipse(x + 80, y - 60, 50, 50);
// ------ 超大眼白 ------ //
noFill();
stroke(255)
strokeWeight(50);
ellipse(x - 80, y - 60, 130, 130);
ellipse(x + 80, y - 60, 130, 130);
// ------ 微笑 ------ //
stroke(0);
strokeWeight(8);
noFill();
arc(x, y, 300, 300, 0.25, PI - 0.25) //300 曲度, 0.25剛剛好放成正的
x=x+v_x //每次執行都加回去,x=100
y=y+v_y
v_y=v_y+0.2
if(y>=height){
v_y=-v_y*0.8
```
---
### 滑鼠移動跟著移動,長按滑鼠自由落體

---
```javascript=
if(mouseIsPressed){ //滑鼠點擊
// ------ 臉部 ------ //
fill(255, 225, 0);
ellipse(x, y, 400, 400);
// ------ 眼睛左邊 ------ //
fill(0)
noStroke();
ellipse(x - 80, y - 60, 50, 50);
// ------ 眼睛右邊 ------ //
fill(0)
noStroke();
ellipse(x + 80, y - 60, 50, 50);
// ------ 超大眼白 ------ //
noFill();
stroke(255)
strokeWeight(50);
ellipse(x - 80, y - 60, 130, 130);
ellipse(x + 80, y - 60, 130, 130);
// ------ 微笑 ------ //
stroke(0);
strokeWeight(8);
noFill();
arc(x, y, 300, 300, 0.25, PI - 0.25) //300 曲度, 0.25剛剛好放成正的
x=x+v_x
y=y+v_y
v_y=v_y+0.2
if(y>=height){
v_y=-v_y*0.8
}
}
else
{
var r1=mouseX //定義
var r2=mouseY //定義
var Color_R= r1/2+30 //定義
var Color_G= r1/2+50+r2 //定義
var Color_B= r1/2+10 //定義
fill(Color_R, Color_G, Color_B)
noStroke();
ellipse(mouseX - 120, mouseY - 170, 150, 150);
fill(128,42,42)
noStroke();
ellipse(mouseX - 120, mouseY - 170, 100, 100);
fill(255)
noStroke();
ellipse(mouseX + 120, mouseY - 170, 150, 150);
fill(128,42,42)
noStroke();
ellipse(mouseX + 120, mouseY - 170, 100, 100);
// ------ 臉部 ------ //
fill(255, 225, 0);
ellipse(mouseX, mouseY, 400, 400);
// ------ 眼睛左邊 ------ //
fill(0)
noStroke();
ellipse(mouseX - 80, mouseY - 60, 100, 100);
// ------ 眼睛右邊 ------ //
fill(0)
noStroke();
ellipse(mouseX + 80, mouseY - 60, 100, 100);
// ------ 超大眼白 ------ //
noFill();
stroke(255)
strokeWeight(50);
ellipse(mouseX - 80, mouseY - 60, 130, 130);
ellipse(mouseX + 80, mouseY - 60, 130, 130);
// ------ 微笑 ------ //
stroke(0);
strokeWeight(8);
noFill();
arc(mouseX, mouseY, 300, 300, 0.25, PI - 0.25) //曲度width/2+ height/2
}
}
```
---
### 加上座標顯示、姓名

---
```javascript=
// 我是座標顯示
fill(0)
background(50,90,50);
stroke(255)
strokeWeight(10);
textSize(40)
text("X:"+int(mouseX)+"Y:"+int(mouseY),50,50)
// 我是name顯示
stroke(255)
strokeWeight(5);
textSize(20)
text("410730013 許軒豪",1690,40)
// 我是name顯示
noStroke();
textSize(200)
text("TKUET",width/2,height/2)
```
---
### 完整程式碼
```javascript=
function setup() {
createCanvas(windowWidth, windowHeight);
background(255);
}
// [ 宣 告 ] //
var x =100 // X座標
var y =100 // X座標
var v_x =3 // 往右的速度
var v_y =3 // 往下的速度
function draw() {
background(50,90,50);
noStroke();
// 我是座標顯示
fill(0)
background(50,90,50);
stroke(255)
strokeWeight(10);
textSize(40)
text("X:"+int(mouseX)+"Y:"+int(mouseY),50,50)
// 我是name顯示
stroke(255)
strokeWeight(5);
textSize(20)
text("410730013 許軒豪",1690,40)
// 我是name顯示
noStroke();
textSize(200)
text("TKUET",width/2,height/2)
if(mouseIsPressed){ //滑鼠點擊
// ------ 臉部 ------ //
fill(255, 225, 0);
ellipse(x, y, 400, 400);
// ------ 眼睛左邊 ------ //
fill(0)
noStroke();
ellipse(x - 80, y - 60, 50, 50);
// ------ 眼睛右邊 ------ //
fill(0)
noStroke();
ellipse(x + 80, y - 60, 50, 50);
// ------ 超大眼白 ------ //
noFill();
stroke(255)
strokeWeight(50);
ellipse(x - 80, y - 60, 130, 130);
ellipse(x + 80, y - 60, 130, 130);
// ------ 微笑 ------ //
stroke(0);
strokeWeight(8);
noFill();
arc(x, y, 300, 300, 0.25, PI - 0.25) //300 曲度, 0.25剛剛好放成正的
x=x+v_x
y=y+v_y
v_y=v_y+0.2
if(y>=height){
v_y=-v_y*0.8
}
}
else
{
var r1=mouseX //定義
var r2=mouseY //定義
var Color_R= r1/2+30 //定義
var Color_G= r1/2+50+r2 //定義
var Color_B= r1/2+10 //定義
fill(Color_R, Color_G, Color_B)
noStroke();
ellipse(mouseX - 120, mouseY - 170, 150, 150);
fill(128,42,42)
noStroke();
ellipse(mouseX - 120, mouseY - 170, 100, 100);
fill(255)
noStroke();
ellipse(mouseX + 120, mouseY - 170, 150, 150);
fill(128,42,42)
noStroke();
ellipse(mouseX + 120, mouseY - 170, 100, 100);
// ------ 臉部 ------ //
fill(255, 225, 0);
ellipse(mouseX, mouseY, 400, 400);
// ------ 眼睛左邊 ------ //
fill(0)
noStroke();
ellipse(mouseX - 80, mouseY - 60, 100, 100);
// ------ 眼睛右邊 ------ //
fill(0)
noStroke();
ellipse(mouseX + 80, mouseY - 60, 100, 100);
// ------ 超大眼白 ------ //
noFill();
stroke(255)
strokeWeight(50);
ellipse(mouseX - 80, mouseY - 60, 130, 130);
ellipse(mouseX + 80, mouseY - 60, 130, 130);
// ------ 微笑 ------ //
stroke(0);
strokeWeight(8);
noFill();
arc(mouseX, mouseY, 300, 300, 0.25, PI - 0.25) //曲度width/2+ height/2
}
}
```