--- tags: 程式設計,第一個作業,教師版,互動藝術程式創作入門,Creative Coding --- # 第一個作業 [演算法影片說明](https://youtu.be/PF_IdMQiBgM) {%youtube PF_IdMQiBgM %} --- 啟動你的程式碼 ## 步驟一 ![](https://hackmd.io/_uploads/B1Ut10f29.png) ![螢幕擷取畫面 2023-11-06 115225.png](https://hackmd.io/_uploads/Hyaf7y8Qp.png) ```javascript= function setup() { createCanvas(windowWidth, windowHeight); background(0); } var x =25; //宣告一個畫方框的x軸變數(var 宣告變數為一個全域變數) var y =25; //宣告一個畫方框的y軸變數(var 宣告變數為一個全域變數) var r_b = 50 var w=50; //宣告一個畫方框的寬度變數(var 宣告變數為一個全域變數) var r_s =20 function draw() { stroke(255) noFill() ellipse(x,y,r_b) //畫一個圓 } function draw() { createCanvas(windowWidth,windowHeight); background("#70d6ff"); rectMode(CENTER) //設定方框中心點為方框座標點 noFill() stroke("#f72585") strokeWeight(2) ellipse(50,50,100) //圓心為100/2,畫方框,設定框線與線條粗細 } ``` --- ## 步驟二 ![](https://hackmd.io/_uploads/Sy_p1Rzh5.png) ![螢幕擷取畫面 2023-11-06 115055.png](https://hackmd.io/_uploads/HyR2MyLQ6.png) ```javascript= function setup() { createCanvas(windowWidth, windowHeight); background(0); } var x =25; //宣告一個畫方框的x軸變數(var 宣告變數為一個全域變數) var y =25; //宣告一個畫方框的y軸變數(var 宣告變數為一個全域變數) var r_b = 50 var w=50; //宣告一個畫方框的寬度變數(var 宣告變數為一個全域變數) var r_s =20 function draw() { stroke(255) noFill() rectMode(CENTER) //設定方框中心 ellipse(x,y,r_b) //畫一個圓 rect(x,y,w) //畫一個方框 } function draw() { createCanvas(windowWidth,windowHeight); background("#70d6ff"); rectMode(CENTER) //設定方框中心點為方框座標點 noFill() stroke("#f72585") strokeWeight(2) ellipse(50,50,100) //圓心為100/2,畫方框,設定框線與線條粗細 stroke("#e9ff70") strokeWeight(2) rect(50,50,100) //方框以左上為座標點 } ``` --- ## 步驟三 ![](https://hackmd.io/_uploads/Hy41eRMh9.png) ![螢幕擷取畫面 2023-11-06 120504.png](https://hackmd.io/_uploads/HkyWU1LXT.png) ```javascript= function setup() { createCanvas(windowWidth, windowHeight); background(0); } var x =25; //宣告一個畫方框的x軸變數(var 宣告變數為一個全域變數) var y =25; //宣告一個畫方框的y軸變數(var 宣告變數為一個全域變數) var r_b = 50 var w=50; //宣告一個畫方框的寬度變數(var 宣告變數為一個全域變數) var r_s =20 function draw() { stroke(255) noFill() rectMode(CENTER) //設定方框中心 ellipse(x,y,r_b) //畫一個圓 rect(x,y,w) //畫一個方框 ellipse(x+w/2,y+w/2,r_s) x = x+ w + 5 //把下一個要畫的方框,加上方框的寬度與方框間的距離 } function draw() { createCanvas(windowWidth,windowHeight); background("#70d6ff"); rectMode(CENTER) //設定方框中心點為方框座標點 noFill() stroke("#e9ff70") strokeWeight(2) rect(50,50,100) //方框以左上為座標點 stroke("#f72585") strokeWeight(2) ellipse(50,50,100) //圓心為100/2,畫方框,設定框線與線條粗細 stroke(255,0,0) strokeWeight(2) ellipse(100,100,50) } ``` --- ## 步驟四 ![](https://hackmd.io/_uploads/ByDZe0Mnq.png) ![螢幕擷取畫面 2023-11-06 122457.png](https://hackmd.io/_uploads/r1iscy876.png) ```javascript= function setup() { createCanvas(windowWidth, windowHeight); background(0); } var x =25; //宣告一個畫方框的x軸變數(var 宣告變數為一個全域變數) var y =25; //宣告一個畫方框的y軸變數(var 宣告變數為一個全域變數) var r_b = 50 var w=50; //宣告一個畫方框的寬度變數(var 宣告變數為一個全域變數) var r_s =20 function draw() { stroke(255) noFill() rectMode(CENTER) //設定方框中心 ellipse(x,y,r_b) //畫一個圓 rect(x,y,w) //畫一個方框 ellipse(x+w/2,y+w/2,r_s) x = x+ w + 5 //把下一個要畫的方框,加上方框的寬度與方框間的距離 } var w = 100 function draw() { createCanvas(windowWidth,windowHeight); background("#70d6ff"); rectMode(CENTER) //設定方框中心點為方框座標點 noFill() //for(var y=50;y<=height+50;y=y+h){ for(var x=50;x<=width+50;x=x+w){ stroke("#f72585") strokeWeight(2) ellipse(x,50,w) //圓心為100/2,畫方框,設定框線與線條粗細 stroke("#e9ff70") strokeWeight(2) rect(x,50,w) //方框以左上為座標點 stroke(255,0,0) strokeWeight(2) ellipse(x+50,100,50) } } ``` --- ## 步驟五 ![](https://hackmd.io/_uploads/r1j6lRf29.png) ![螢幕擷取畫面 2023-11-06 122457.png](https://hackmd.io/_uploads/Skz29kUQ6.png) ```javascript= function setup() { createCanvas(windowWidth, windowHeight); background(0); } var x =25; //宣告一個畫方框的x軸變數(var 宣告變數為一個全域變數) var y =25; //宣告一個畫方框的y軸變數(var 宣告變數為一個全域變數) var r_b = 50 var w=50; //宣告一個畫方框的寬度變數(var 宣告變數為一個全域變數) var r_s =20 function draw() { stroke(255) noFill() rectMode(CENTER) //設定方框中心 ellipse(x,y,r_b) //畫一個圓 rect(x,y,w) //畫一個方框 ellipse(x+w/2,y+w/2,r_s) x = x+ w + 5 //把下一個要畫的方框,加上方框的寬度與方框間的距離 if(x>width){ //當x軸的值(x)已經超過視窗寬度(width) x = 0 //讓x軸回到最左邊(0) y = y + w + 5 //y軸的值要加上方框的高(h)與框間距離(w) } } var w = 100 function draw() { createCanvas(windowWidth,windowHeight); background("#70d6ff"); rectMode(CENTER) //設定方框中心點為方框座標點 noFill() //for(var y=50;y<=height+50;y=y+h){ for(var x=50;x<=width+50;x=x+w){ stroke("#f72585") strokeWeight(2) ellipse(x,50,w) //圓心為100/2,畫方框,設定框線與線條粗細 stroke("#e9ff70") strokeWeight(2) rect(x,50,w) //方框以左上為座標點 stroke(255,0,0) strokeWeight(2) ellipse(x+50,100,50) } } ``` --- ## 步驟六 ![](https://hackmd.io/_uploads/SykDl0M35.png) ```javascript= function setup() { createCanvas(windowWidth, windowHeight); background(0); } var x =25; //宣告一個畫方框的x軸變數(var 宣告變數為一個全域變數) var y =25; //宣告一個畫方框的y軸變數(var 宣告變數為一個全域變數) var r_b = 50 var w=50; //宣告一個畫方框的寬度變數(var 宣告變數為一個全域變數) var r_s =20 function draw() { stroke(255) noFill() rectMode(CENTER) //設定方框中心 ellipse(x,y,r_b) //畫一個圓 rect(x,y,w) //畫一個方框 ellipse(x+w/2,y+w/2,r_s) x = x+ w + 5 //把下一個要畫的方框,加上方框的寬度與方框間的距離 if(x>width){ //當x軸的值(x)已經超過視窗寬度(width) x = 0 //讓x軸回到最左邊(0) y = y + w + 5 //y軸的值要加上方框的高(h)與框間距離(w) } } ``` --- ## 步驟七 ![](https://hackmd.io/_uploads/S1ZKl0f39.png) ```javascript= function setup() { createCanvas(windowWidth, windowHeight); background(0); } var x =25; //宣告一個畫方框的x軸變數(var 宣告變數為一個全域變數) var y =25; //宣告一個畫方框的y軸變數(var 宣告變數為一個全域變數) var r_b = 50 var w=50; //宣告一個畫方框的寬度變數(var 宣告變數為一個全域變數) var r_s =20 function draw() { stroke(255) noFill() rectMode(CENTER) //設定方框中心 ellipse(x,y,r_b) //畫一個圓 rect(x,y,w) //畫一個方框 ellipse(x+w/2,y+w/2,r_s) x = x+ w + 5 //把下一個要畫的方框,加上方框的寬度與方框間的距離 if(x>width){ //當x軸的值(x)已經超過視窗寬度(width) x = 0 //讓x軸回到最左邊(0) y = y + w + 5 //y軸的值要加上方框的高(h)與框間距離(w) } } ``` --- ## 步驟八 ![](https://hackmd.io/_uploads/Sy6ce0f39.png) ![螢幕擷取畫面 2023-11-06 122732.png](https://hackmd.io/_uploads/B1jHoyImp.png) ```javascript= function setup() { createCanvas(windowWidth, windowHeight); background(0); } var x =25; //宣告一個畫方框的x軸變數(var 宣告變數為一個全域變數) var y =25; //宣告一個畫方框的y軸變數(var 宣告變數為一個全域變數) var r_b = 50 var w=50; //宣告一個畫方框的寬度變數(var 宣告變數為一個全域變數) var r_s =20 function draw() { stroke(255) noFill() rectMode(CENTER) //設定方框中心 ellipse(x,y,r_b) //畫一個圓 rect(x,y,w) //畫一個方框 ellipse(x+w/2,y+w/2,r_s) x = x+ w + 5 //把下一個要畫的方框,加上方框的寬度與方框間的距離 if(x>width){ //當x軸的值(x)已經超過視窗寬度(width) x = 25 //讓x軸回到最左邊(0) y = y + w + 5 //y軸的值要加上方框的高(h)與框間距離(w) } } var w = 100 var h = 100 function draw() { createCanvas(windowWidth,windowHeight); background("#70d6ff"); rectMode(CENTER) //設定方框中心點為方框座標點 noFill() for(var y=50;y<=height+50;y=y+h){ for(var x=50;x<=width+50;x=x+w){ stroke("#f72585") strokeWeight(2) ellipse(x,y,w) //圓心為100/2,畫方框,設定框線與線條粗細 stroke("#e9ff70") strokeWeight(2) rect(x,y,w) //方框以左上為座標點 stroke(255,0,0) strokeWeight(2) ellipse(x+50,y+50,w/2) } } } ``` --- ![](https://i.imgur.com/NQ9ftJZ.gif) ![2023_4.gif](https://hackmd.io/_uploads/ry2GWk8Q6.gif) ```javascript= //https://youtu.be/PF_IdMQiBgM var sound1 function preload(){ sound1 = loadSound("mixkit-cat-walk-371.mp3") //先把音樂檔載入到sound1程式碼中 } function setup() { createCanvas(windowWidth,windowHeight); background("#70d6ff") analyzer = new p5.Amplitude(); analyzer.setInput(sound1) } var w = 100 var h = 100 var fc,fc1 function draw() { background("#70d6ff"); rectMode(CENTER) //設定方框中心點為方框座標點 noFill() textSize(50) text("412730706羅小璇",width-500,height-50) if(sound1.isPlaying()) { //音樂有撥放 fc = map(analyzer.getLevel(),0,1,0,100) fc1 = map(analyzer.getLevel(),0,1,0,100) } else{ //音樂沒撥放 fc = map(mouseX,0,width,0,100) fc1 = map(mouseY,0,width,0,100) } for(var y=50;y<=height+50;y=y+h){ for(var x=50;x<=width+50;x=x+w){ stroke("#f72585") strokeWeight(2) ellipse(x,y,w+fc) //圓心為100/2,畫方框,設定框線與線條粗細 stroke("#e9ff70") strokeWeight(2) rect(x,y,w+fc) //方框以左上為座標點 stroke(255,0,0) strokeWeight(2) ellipse(x+50,y,w+fc) } } } function mousePressed(){ if(sound1.isPlaying()){ sound1.stop(); }else{ sound1.play(); } } ```