---
# System prepended metadata

title: IEH Workshop004：基礎程式設計三

---

# IEH Workshop004：基礎程式設計三

程式設計課程規定(違規視情況扣分，並影響學期末成績。)
1. 上課時請專心,禁止玩遊戲。下課時間可以玩遊戲沒問題。
2. 課程中若需要討論,請控制音量,不要干擾其他同學。
3. 每次的課堂作業,應於當天完成。
4. 課堂中有問題,請舉手發問。
5. 課堂中禁止飲食,只能帶水至教室。

* https://ieh.mattc.art
* https://editor.p5js.org


# 前兩堂作業解答

## Workshop002
印出 1+1=2

```javascript
function setup(){
  createCanvas(400,500)
}
function draw(){
  background(200)
  let num1=1
  let num2=1
  let str=num1+"+"+num2+"="+(num1+num2)
  let x=50
  let y=50
  text(str, x, y)
}
```
### 更多練習: 請印出 3-2=1

## Workshop003

```javascript
let circleX = 100
let circleY = 100
let circleSize = 30
let velocityX = 5
let velocityY = 5

function setup(){
    createCanvas(400,500)
}
function draw(){
    background(0)
    circle(circleX, circleY, circleSize)

    circleY = circleY + velocityY
    circleX = circleX + velocityX

    if (circleY > height || circleY < 0){
        velocityY = -velocityY
    }
    if (circleX > width || circleX < 0){
        velocityX = -velocityX
    }
}
```

```javascript
function randomColor(){
    // random number between 0 - 255
    r = random(255); 
    g = random(255);
    b = random(255);
    fill(r, g, b, 255);
}
```

請依據前面範例，讓球在碰撞牆壁時改變顏色

# 基礎程式
## 1. 註解
Ctrl + / (Windows/Linux) or Cmd + / (Mac)
```
//
```
## 2. class 物件

```javascript
class Particle {
  constructor(){
    this.x = random(0,width);
    this.y = random(0,height);
    this.r = random(1,8);
    this.xSpeed = random(-2,2);
    this.ySpeed = random(-1,1.5);
  }

  createParticle() {
    noStroke();
    fill('rgba(200,169,169,0.5)');
    circle(this.x,this.y,this.r);
  }

  moveParticle() {
    if(this.x < 0 || this.x > width)
      this.xSpeed*=-1;
    if(this.y < 0 || this.y > height)
      this.ySpeed*=-1;
    this.x+=this.xSpeed;
    this.y+=this.ySpeed;
  }

  joinParticles(particles) {
    particles.forEach(element =>{
      let dis = dist(this.x,this.y,element.x,element.y);
      if(dis<85) {
        stroke('rgba(255,255,255,0.04)');
        line(this.x,this.y,element.x,element.y);
      }
    });
  }
}

let particles = [];

function setup() {
  createCanvas(720, 400);
  for(let i = 0;i<width/10;i++){
    particles.push(new Particle());
  }
}

function draw() {
  background('#0f0f0f');
  for(let i = 0;i<particles.length;i++) {
    particles[i].createParticle();
    particles[i].moveParticle();
    particles[i].joinParticles(particles.slice(i));
  }
}

```

## 課堂作業
1. 請針對上述範例，改變粒子顏色，並隱藏"連線"

2. Car範例

```javascript
let car;

function setup() {
  createCanvas(400, 200);
  car = new Car();
}

function draw() {
  background(220);
  car.move();
  car.display();
}

class Car {
  constructor() {
    this.x = 0;
    this.y = height / 2;
    this.speed = 2;
  }

  display() {
    rect(this.x, this.y, 50, 30);
  }

  move() {
    this.x += this.speed;

    if (this.x > width) {
      this.x = -50;
    }
  }
    
}

```

請針對上述範例，改成上到下，且新增變色特效

提示:
```javascript
randomColor(){
    // random number between 0 - 255
    let r = random(255); 
    let g = random(255);
    let b = random(255);
    fill(r, g, b, 255);
}
```