2018年9月27日 星期四

WEEK4

子彈
按鍵盤射出子彈


void setup(){
size(800,600); } void draw(){ background(255); fill(255,0,0);rect(100,100,100,100); for(int i=0;i<bulletn;i++){ if(bulletflying[i]){ ellipse(bulletx[i],bullety[i],50,50); bulletx[i]+=3; } } } float []bulletx=new float[100]; float []bullety=new float[100]; int bulletn=0; boolean []bulletflying=new boolean[100]; void keyPressed(){ bulletflying[bulletn]=true; bulletx[bulletn]=100; bullety[bulletn]=100; bulletn++; }

week3

void setup(){ size (500,500); } void draw(){ ellipse(250,250,480,480); for(float angle=0; angle<PI*2; angle+=PI/3){ triangle(250,250,250+240*cos(angle),250+240*sin(angle),250+240*cos(angle+PI/3),250+240*sin(angle+PI/3)); } }

PImage imgmario; float marioX=0,marioY=0; void setup(){ size (400,600); imgmario=loadImage("mario.png"); } void draw(){ background(255); image (imgmario,marioX,marioY,100,150); } void keyPressed(){ if(keyCode==UP){marioY-=5;} if(keyCode==DOWN){marioY+=5;} if(keyCode==LEFT){marioX-=5;} if(keyCode==RIGHT){marioX+=5;}

*圖檔不能在draw裡面讀,要在setup裡面



Week03_珮妤的筆記



在圓內畫一個六邊形

void setup(){
   size(500,500);
}
void draw(){
    ellipse(250,250, 480,480);
    for(float angle=0; angle<PI*2; angle+=PI/3){
      triangle(250,250,
              250+240*cos(angle), 250+240*sin(angle),
              250+240*cos(angle+PI/3), 250+240*sin(angle+PI/3) );
    }
}

void setup(){
   size(500,500);
}
void draw(){
    ellipse(250,250, 480,480);
    for(float angle=0; angle<PI*2; angle+=PI/3){
     for(int R=0; R<=240; R+=30){
       noFill();
       triangle(250,250,
              250+R*cos(angle), 250+R*sin(angle),
              250+R*cos(angle+PI/3), 250+R*sin(angle+PI/3) );
    }
  }
}

void setup(){
   size(800,400);
}
void myTriangle(int cx, int cy){
    float a= -PI/2;
     for(int R=15; R>0; R-=5){
       triangle( cx+R*cos(a), cy+R*sin(a),
          cx+R*cos(a+2*PI/3), cy+R*sin(a+2*PI/3),
          cx+R*cos(a-2*PI/3), cy+R*sin(a-2*PI/3) );
    }
  }
void draw() {
    background(255);
    for(int cx=20; cx<800; cx+=40){
      for(int cy=20; cy<800; cy+=40){
     
        myTriangle(cx,cy);
      }
    }
}

PImage imgMario;
float marioX=0, marioY=0, marioVX=5, marioVY=10;
void setup(){
  size(400,600);
  imgMario = loadImage("mario.png");
}
void draw(){
  background(255);
  image(imgMario, marioX, marioY, 100,150);
  marioX += marioVX;
  marioY += marioVY;
}
void keyPressed(){
  if(keyCode==UP)  {marioY-=5;}
  if(keyCode==DOWN)  {marioY+=5;}
  if(keyCode==LEFT)  {marioX-=5;}
  if(keyCode==RIGHT)  {marioX+=5;}
}

PImage imgMario;
float marioX=0, marioY=0, marioVX=2, marioVY=0, marioAX=0, marioAY=0.1;
void setup(){
  size(400,600);
  imgMario = loadImage("mario.png");
}
void draw(){
  //background(255);
  image(imgMario, marioX, marioY, 100,150);
  marioX += marioVX; marioY += marioVY;
  marioVX += marioAX; marioVY += marioAY;
}
void keyPressed(){
  if(keyCode==UP)  {marioY-=5;}
  if(keyCode==DOWN)  {marioY+=5;}
  if(keyCode==LEFT)  {marioX-=5;}
  if(keyCode==RIGHT)  {marioX+=5;}
}

PImage imgMario;
float marioX=0, marioY=100, marioVX=1, marioVY=0, marioAX=0, marioAY=0.1;

void setup(){
  size(400,600);
  imgMario = loadImage("mario.png");
}
void draw(){
  //background(255);
  image(imgMario, marioX, marioY, 100,150);
  marioX += marioVX; marioVX+=0;
  marioY += marioVY; marioVY += 0.98;
  if(marioY>500){
    marioVY = - marioVY * 0.8;
    marioY=500;
}

if(marioX>300) marioVX = -marioVX;
}
void keyPressed(){
  if(keyCode==UP)  {marioY-=5;}
  if(keyCode==DOWN)  {marioY+=5;}
  if(keyCode==LEFT)  {marioX-=5;}
  if(keyCode==RIGHT)  {marioX+=5;}
}

week03_黃惠嘉

🔺2018互動技術&sketch 程式



void setup(){

  size(500,500);

}
void draw(){
  ellipse(250,250,230,230);⇒圓
}

triangle(250,250,250,10,80,150);⇒三角形













void setup(){
  size(500,500);
}
void draw(){
  ellipse(250,250,480,480);
  for(float angle=0;angle<PI*2;angle+=PI/3){
      triangle(250,250,
            250+240*cos(angle),250+240*sin(angle),
            250+240*cos(angle+PI/3),250+240*sin(angle+PI/3));
  }⇒PI是一個數值常數,其值為3.1415927。 它是圓周長與直徑的比值。 它能與三角函數sin()和cos()結合使用。
}
void setup(){
  size(500,500);
}
void draw(){
  ellipse(250,250,480,480);
  for(float angle=0;angle<PI*2;angle+=PI/3){
    for(int R=0;R<=240;R+=30){
      noFill();⇒沒填滿色,如果同時用noStroke()和noFill(),則不會向屏幕繪製任何內容。
      triangle(250,250,
            250+R*cos(angle),250+R*sin(angle),
            250+R*cos(angle+PI/3),250+R*sin(angle+PI/3));
    }
  }
}



void setup(){
  size(500,500);
}
void draw(){
  background(255);
  for(int cx=10;cx<800;cx+=40){
    for(int cy=10;cy<800;cy+=40){
      ellipse(cx,cy,30,30);
    }
  }
}


void setup(){
  size(800,400);
}
void myTriangle(int cx,int cy){
  float R=20,a=-PI/2;
  triangle( cx+R*cos(a),cy+R*sin(a),
            cx+R*cos(a+2*PI/3),cy+R*sin(a+2*PI/3),
            cx+R*cos(a-2*PI/3),cy+R*sin(a-2*PI/3));
}⇒三角形
void draw(){
  background(255);
  for(int cx=10;cx<800;cx+=40){
    for(int cy=10;cy<400;cy+=40){
      //ellipse(cx,cy,30,30);
      myTriangle(cx,cy);
    }
  }
}



void setup(){
  size(800,400);
}
void myTriangle(int cx,int cy){
  float a=-PI/2;
  for(int R=15;R>0;R-=5){
    triangle( cx+R*cos(a),cy+R*sin(a),
              cx+R*cos(a+2*PI/3),cy+R*sin(a+2*PI/3),
              cx+R*cos(a-2*PI/3),cy+R*sin(a-2*PI/3));
  }
}
void draw(){
  background(255);
  for(int cx=10;cx<800;cx+=40){
    for(int cy=10;cy<400;cy+=40){
      //ellipse(cx,cy,30,30);
      myTriangle(cx,cy);
    }
  }
}


void setup(){
  size(800,400);
}
void draw(){
  background(255);
  PImage imgMario = loadImage("mario.png");⇒讀取圖片
  image(imgMario,0,0,100,150);
}



PImage imgMario;
float marioX=0,marioY=0;
void setup(){
  size(400,600);
  imgMario = loadImage("mario.png");
}
void draw(){
  background(255);
  image(imgMario,marioX,marioY,100,150);
}
void keyPressed(){
  if(key==UP)    {marioY-=5;}⇒按按鍵上下左右的上
  if(key==DOWN)  {marioY+=5;}
  if(key==LEFT)  {marioX-=5;}
  if(key==RIGHT) {marioX+=5;}
}


PImage imgMario;
float marioX=0,marioY=0,marioVX=2,marioVY=0,marioAX=0,marioAY=0.1;
void setup(){
  size(400,600);
  imgMario = loadImage("mario.png");
}
void draw(){
  background(255);
  image(imgMario,marioX,marioY,100,150);
  marioX  +=marioVX;
  marioY  +=marioVY;
  marioVX +=marioAX;
  marioVY +=marioAY;
}
void keyPressed(){
  if(key==UP)    {marioY-=5;}
  if(key==DOWN)  {marioY+=5;}
  if(key==LEFT)  {marioX-=5;}
  if(key==RIGHT) {marioX+=5;}
}

PImage imgMario;
float marioX=0,marioY=0,marioVX=2,marioVY=0;
void setup(){
  size(400,600);
  imgMario = loadImage("mario.png");
}
void draw(){
  image(imgMario,marioX,marioY,100,150);
  marioX  +=marioVX; marioY  +=marioVY;
  marioVX +=0;  marioVY +=0.98;
  if(marioY>500){
    marioVY =-marioVY*0.8;
    marioY=500;
  }
  if(marioX>300) marioVX=-marioVX;
  if(marioX<0) marioVX=-marioVX;
}
void keyPressed(){
  if(key==UP)    {marioY-=5;}
  if(key==DOWN)  {marioY+=5;}
  if(key==LEFT)  {marioX-=5;}
  if(key==RIGHT) {marioX+=5;}
}

week03

運用程式畫出簡單幾何圖型

void setup(){
  size(500,500);
}
void draw(){
  ellipse(250,250,480,480);//畫一個圓心座標為(250,250),直徑480的圓
  for(float angle=0;angle<PI*2;angle+=PI/3){
    triangle(250,250,
            250+240*cos(angle),250+240*sin(angle),
            250+240*cos(angle+PI/3),250+240*sin(angle+PI/3));
  }
}



















加入半徑迴圈
void setup(){
  size(500,500);
}
void draw(){
  ellipse(250,250,480,480);
  for(float angle=0;angle<PI*2;angle+=PI/3){
    for(int R=0;R<=240;R+=20){
      noFill();//不要填滿
      triangle(250,250,
            250+R*cos(angle),250+R*sin(angle),
            250+R*cos(angle+PI/3),250+R*sin(angle+PI/3));
    }
  }
}



















畫出漂亮的圖
void setup(){
  size(800,400);
}
void myTriangle(int cx,int cy){
  float a=-PI/2;
  for(int R=15;R>0;R-=5){
    triangle(cx+R*cos(a),cy+R*sin(a),
    cx+R*cos(a+2*PI/3),cy+R*sin(a+2*PI/3),
    cx+R*cos(a-2*PI/3),cy+R*sin(a-2*PI/3));
  }
}
void draw(){
    background(255);
  for(int cx=0;cx<=800;cx+=40){
    for(int cy=0;cy<=400;cy+=40){
      myTriangle(cx,cy);
    }
  }
}












可上下左右移動的馬力歐

void setup(){
  size(400,600);
  imgMario = loadImage("mario.png");//讀入圖檔
      //寫在setup裡,只讀一次,避免浪費記憶體
}
void draw(){
  background(255);
  image(imgMario,marioX,marioY,200,150);
}
void keyPressed(){
  if(keyCode==UP) {marioY-=5;}
  if(keyCode==DOWN) {marioY+=5;}
  if(keyCode==LEFT) {marioX-=5;}
  if(keyCode==RIGHT) {marioX+=5;}
}












從左上墜落的馬力歐
PImage imgMario;
float marioX=0,marioY=100,marioVX=5,marioVY=0,marioAX=0,marioAY=0.1;
//新增速度及加速度
void setup(){
  size(400,600);
  imgMario = loadImage("mario.png");
}
void draw(){
  background(255);
  image(imgMario,marioX,marioY,240,180);
  marioX+=marioVX; marioY+=marioVY;
  marioVX+=marioAX; marioVY+=0.98;
  if(marioY>600-150)marioVY*=-0.9;
  if(marioY>400-100)marioVY*=-1;
  if(marioY<0)marioVY*=-0.9;
  if(marioX<0)marioVX*=-1;
}
void keyPressed(){
  if(keyCode==UP) {marioY-=5;}
  if(keyCode==DOWN) {marioY+=5;}
  if(keyCode==LEFT) {marioX-=5;}
  if(keyCode==RIGHT) {marioX+=5;}
}














碰到牆彈跳的馬力歐
PImage imgMario;
float marioX=0,marioY=100,marioVX=5,marioVY=0,marioAX=0,marioAY=0.1;
void setup(){
  size(400,600);
  imgMario = loadImage("mario.png");
}
void draw(){
  background(255);
  image(imgMario,marioX,marioY,240,180);
  marioX+=marioVX; marioVX+=0;
  marioY+=marioVY; marioVY+=0.98;
  if(marioY>500){
    marioVY=-marioVY*0.8;
    marioY=500;//碰到地板反彈
  }
  if(marioX>300) marioVX=-marioVX;//右邊界
  if(marioX<0) marioVX=-marioVX;//左邊界
}
void keyPressed(){
  if(keyCode==UP) {marioY-=5;}
  if(keyCode==DOWN) {marioY+=5;}
  if(keyCode==LEFT) {marioX-=5;}
  if(keyCode==RIGHT) {marioX+=5;}
}




Week 03 宋侑恩

Week 03 Part 1-1 - 畫出圓形裡面有漂亮的三角形

程式碼:

void setup(){
  size(500,500);
}
void draw(){
  ellipse(250,250,480,480); ///畫圓
  for(float angle=0;angle<PI*2;angle+=PI/3){ ///圓裡面的三角形
    triangle(250,250,
    250+240*cos(angle),250+240*sin(angle),
    250+240*cos(angle+PI/3),250+240*sin(angle+PI/3));
  }
}


Week 03 Part 1-2 - 畫出圓形裡面有多層漂亮的三角形

程式碼:

void setup(){
  size(500,500);
}
void draw(){
  ellipse(250,250,480,480);
  for(float angle=0;angle<PI*2;angle+=PI/3){
    for(int R=0;R<=240;R+=20){ ///加入變數R來代替半徑
      noFill(); ///清空填色
      triangle(250,250,
               250+R*cos(angle),250+R*sin(angle),
               250+R*cos(angle+PI/3),250+R*sin(angle+PI/3));
    } 
  }
}


Week 03 Part 1-3 - 將線畫得更戲更漂亮

程式碼:

void setup(){
  size(500,500);
  noFill();
}
void draw(){
  background(255);
  int cx=width/2,cy=height/2;
  float a0=PI/6.0;
  strokeWeight(1);
  stroke(0);
  for(int r=8;r<=240;r+=8){
    for(float a=a0;a<=2*PI+2.0;a+=PI/3.0){
      triangle(cx,cy,
               cx+r*cos(a),cy+r*sin(a),
               cx+r*cos(a+PI/3),cy+r*sin(a+PI/3));
    } 
  }
}

Week 03 Part 2 - 畫出好看的三角形背景

程式碼:

void setup(){
  size(800,400);
}
void myTriangle(int cx, int cy){
  float a= -PI/2;
  for(int R=15;R>0;R-=5){
    triangle(cx+R*cos(a),cy+R*sin(a),
             cx+R*cos(a+2*PI/3),cy+R*sin(a+2*PI/3),
             cx+R*cos(a-2*PI/3),cy+R*sin(a-2*PI/3));
  }
}
void draw(){
  background(255);
  for(int cx=20;cx<800;cx+=40){
    for(int cy=20;cy<400;cy+=40){
      myTriangle(cx,cy);
    }
  }
}


Week 03 Part 3-1 - 用鍵盤控制瑪莉歐

程式碼:

PImage imgMario;
float marioX=0,marioY=0;
void setup(){
  size(400,600);
  imgMario = loadImage("mario.png"); ///只讀一次
}
void draw(){
  background(255);
  image(imgMario, marioX, marioY, 100, 150);
}
void keyPressed(){
  if(keyCode==UP)        {marioY-=5;}
  if(keyCode==DOWN) {marioY+=5;}
  if(keyCode==LEFT)    {marioX-=5;}
  if(keyCode==RIGHT) {marioX+=5;}
}


Week 03 Part 3-2 - 有重力加速度的瑪莉歐

程式碼:

PImage imgMario;
float marioX=0,marioY=0,marioVX=2,marioVY=0,marioAX=0,marioAY=0.1;
void setup(){
  size(400,600);
  imgMario = loadImage("mario.png");
}
void draw(){
  //background(255);
  image(imgMario, marioX, marioY, 100, 150);
  marioX   += marioVX;   marioY   +=marioVY;
  marioVX+= marioAX;   marioVY+=marioAY;
}
void keyPressed(){
  if(keyCode==UP)         {marioY-=5;}
  if(keyCode==DOWN)  {marioY+=5;}
  if(keyCode==LEFT)     {marioX-=5;}
  if(keyCode==RIGHT)  {marioX+=5;}
}


Week 03 Part 3-3 - 跳跳瑪莉歐

程式碼:

PImage imgMario;
float marioX=0,marioY=100,marioVX=1,marioVY=0,marioAX=0,marioAY=0.1;
void setup(){
  size(400,600);
  imgMario = loadImage("mario.png");
}
void draw(){
  //background(255); ///將背景清除好看出彈跳
  image(imgMario, marioX, marioY, 100, 150);
  marioX += marioVX; marioVX +=0;
  marioY += marioVY; marioVY+=0.98;
  if(marioY>500){
    marioVY = -marioVY * 0.8;
    marioY = 500;
  }
  if(marioX>300) marioVX = -marioVX;
  if(marioX<0)   marioVX = -marioVX;
}
void keyPressed(){
  if(keyCode==UP)    {marioY-=5;}
  if(keyCode==DOWN)  {marioY+=5;}
  if(keyCode==LEFT)  {marioX-=5;}
  if(keyCode==RIGHT) {marioX+=5;}
}


把背景加上,彈跳的瑪莉歐


week03 互動技術筆記@

1.畫出圖形(一)

利用ellipse(250,250,480,480);畫出圓(250為圓中心,480為圓半徑)
再利用triangle(x1,y1,x2,y2,x3,y3);在圓中畫出三角形(xy分別為三個點的座標)


以(250,250)為中心畫出三角形
triangle(250,250,
                250+240*cos(angle),250+240*sin(angle),
                250+240*cos(angle+PI/3),250+240*sin(angle+PI/3));
利用三角函數控制xy座標,做出多個規律三角形(+PI/3會往右-PI/3會往左)


triangle(250,250,
                250+r*cos(angle),250+r*sin(angle),
                250+r*cos(angle+PI/3),250+r*sin(angle+PI/3));
再利用r控制三角形大小,做出大小三角形的效果

2.畫出圖形(二)

跟畫出圖形(一)的方法類似
其結果呈現倒三角,是因為Processing的座標是左上角為原點,
與數學座標系統不同,在PI加上負號就可解決


解決後的成果


最後利用r控制與三角形中心的距離,做出多層次的三角形

3.實作小遊戲,自己寫物理引擎

用鍵盤上下左右做做出點單的移動效果


將座標加上速度,再將速度加上加速度
就能做出簡單的物理引擎

在視窗四周加上邊界,就可做出反彈的效果
ex:
if(imgY>500)  imgVY = -imgVY
如果圖片座標超過視窗邊界,將速度加上負號反轉,即可反彈