顯示具有 04160214_郭晉瑜 標籤的文章。 顯示所有文章
顯示具有 04160214_郭晉瑜 標籤的文章。 顯示所有文章

2018年1月22日 星期一

Week 19 期末作品展示

04160214 郭晉瑜
04162523 劉旆君




Ardiuno 程式碼
const int SW_pin = 2; // digital pin connected to switch output
const int X_pin = 0; // analog pin connected to X output
const int Y_pin = 1; // analog pin connected to Y output


void setup() {
  pinMode(SW_pin, INPUT);
  digitalWrite(SW_pin, HIGH);
  Serial.begin(115200);
}

void loop() {
  Serial.write(digitalRead(2));
  Serial.write(analogRead(A0)/4);
  Serial.write(analogRead(A1)/4);
  delay(150);
}

Processing程式碼
import processing.serial.*;
Serial myPort;
PImage img0,img1,img2,img3,bg;
int stage=0;
int time=0;
void setup(){
  size(600,500);
  img0 = loadImage("Crab.png");
  img1 = loadImage("Bear.png");
  img2 = loadImage("Panda.png");
  img3 = loadImage("fox.png");
  bg = loadImage("sky.jpg");
  myPort = new Serial(this, "COM3", 115200);
}
float grabX=50, grabY=50;
float bearX=150,bearY=200;
float pandaX=350,pandaY=250;
float foxX=500,foxY=300;
float holeX=100,holeY=400;
boolean Gotit=false;
boolean Gotit1=false;
boolean Gotit2=false;
boolean bearAlive=true;
boolean pandaAlive=true;
boolean foxAlive=true;
void draw(){
  background(bg);
 if(myPort.available()>0){
 /*   t=myPort.read();
    if(t=='w') pin2=myPort.read();
    else if(t=='x') x=myPort.read();
    else if(t=='y') y=myPort.read();*/
    int pin2=myPort.read();
    int x=myPort.read();
    int y=myPort.read();
    analyze(y,x);
    if(pin2==1 && dist(grabX,grabY,bearX,bearY)<50)
    {
      Gotit=true;
    }
    else if(dist(bearX,bearY,holeX,holeY)<100){
      bearAlive=false;
    }
    if(pin2==1 && dist(grabX,grabY,pandaX,pandaY)<50){
      Gotit1=true;
    }
    else if(dist(pandaX,pandaY,holeX,holeY)<100){
      pandaAlive=false;
    }
    if(pin2==1 && dist(grabX,grabY,foxX,foxY)<50){
      Gotit2=true;
    }
    else if(dist(foxX,foxY,holeX,holeY)<100){
      foxAlive=false;
    }
    println(x+" "+y);
  }
  if(stage==0){
    textSize(80);
    text("start game",125,250);
  }
  else if(stage==1){
    ellipse(holeX,holeY,100,100);
    if(bearAlive) image(img1,bearX,bearY,100,100);
    if(pandaAlive) image(img2,pandaX,pandaY,100,100);
    if(foxAlive) image(img3,foxX,foxY,100,100);
    fill(200); image(img0,grabX,grabY,120,100);
    if(keyCode==' ' && dist(grabX,grabY,bearX,bearY)<50){
      Gotit=true;
    }
    else if(dist(bearX,bearY,holeX,holeY)<100){
      bearAlive=false;
    }
    if(keyCode==' ' && dist(grabX,grabY,pandaX,pandaY)<50){
      Gotit1=true;
    }
    else if(dist(pandaX,pandaY,holeX,holeY)<100){
      pandaAlive=false;
    }
    if(keyCode==' ' && dist(grabX,grabY,foxX,foxY)<50){
      Gotit2=true;
    }
    else if(dist(foxX,foxY,holeX,holeY)<100){
      foxAlive=false;
    }
    textSize(30);
    text("Time:"+time/60,5,35);
    time--;
    if(time<0) stage=2;
 
  }
  else if(stage==2)
  {
    textSize(80);
    text("Game Over",125,250);
  }
}
void mousePressed(){
  if(stage==0){
    stage=1;   time=60*60;
    grabX=50;  grabY=50;
    bearX=150; bearY=200;
    pandaX=350;pandaY=250;
    foxX=500;  foxY=300;
    holeX=100; holeY=400;
    Gotit=false;
    Gotit1=false;
    Gotit2=false;
    bearAlive=true;
    pandaAlive=true;
    foxAlive=true;
  }
  if(stage==2){
    stage=0;
  }
}
void analyze(int x, int y){
  if(y>200){
    grabY-=7;
    if(Gotit) bearY-=7;
    if(Gotit1) pandaY-=7;
    if(Gotit2) foxY-=7;
  }
  if(y<50){
    grabY+=7;
    if(Gotit) bearY+=7;
    if(Gotit1) pandaY+=7;
    if(Gotit2) foxY+=7;
  }
  if(x<50){
    grabX-=7;
      if(Gotit) bearX-=7;
      if(Gotit1) pandaX-=7;
      if(Gotit2) foxX-=7;
  }
  if(x>200){
    grabX+=7;
      if(Gotit) bearX+=7;
      if(Gotit1) pandaX+=7;
      if(Gotit2) foxX+=7;
   }
}
void keyPressed(){
  if(keyCode==UP){
    grabY-=7;
    if(Gotit) bearY-=7;
    if(Gotit1) pandaY-=7;
    if(Gotit2) foxY-=7;
  }
  if(keyCode==DOWN){
    grabY+=7;
      if(Gotit) bearY+=7;
      if(Gotit1) pandaY+=7;
      if(Gotit2) foxY+=7;
  }
  if(keyCode==LEFT){
    grabX-=7;
      if(Gotit) bearX-=7;
      if(Gotit1) pandaX-=7;
      if(Gotit2) foxX-=7;
  }
  if(keyCode==RIGHT){
    grabX+=7;
      if(Gotit) bearX+=7;
      if(Gotit1) pandaX+=7;
      if(Gotit2) foxX+=7;
   }
}



Week11 上課筆記

去Hacker Space 參訪

2017年12月11日 星期一

week13 郭晉瑜上課筆記

360度旋轉編譯器:
https://brainy-bits.com/blogs/tutorials/stepper-motor-rotary-encoder-p1

程式碼:

#define SERIAL_BAUDRATE 115200
#define CLK_PIN 2 // 定義連接腳位
#define DT_PIN 3
#define SW_PIN 4

#define interruptA 0 // UNO腳位2是interrupt 0,其他板子請見官方網頁

volatile long count = 0;
unsigned long t = 0;

void setup() {
  Serial.begin(SERIAL_BAUDRATE);
  // 當狀態下降時,代表旋轉編碼器被轉動了
  attachInterrupt(interruptA, rotaryEncoderChanged, FALLING);
  pinMode(CLK_PIN, INPUT_PULLUP); // 輸入模式並啟用內建上拉電阻
  pinMode(DT_PIN, INPUT_PULLUP); 
  pinMode(SW_PIN, INPUT_PULLUP); 
}
void loop() {
  if(digitalRead(SW_PIN) == LOW){ // 按下開關,歸零
     count = 0;  
     Serial.println("count reset to 0");
     delay(300);
  }
}
void rotaryEncoderChanged(){ // when CLK_PIN is FALLING
  unsigned long temp = millis();
  if(temp - t < 200) // 去彈跳
    return;
  t = temp;
  
  // DT_PIN的狀態代表正轉或逆轉
  count += digitalRead(DT_PIN) == HIGH ? 1 : -1;
  Serial.println(count);
}

成果:


把成果結合在processing視窗下
程式碼:

import processing.serial.*;
Serial myPort;
void setup(){
  size(500,500);
  myPort=new Serial(this,"COM8",115200);
}
int x=0;
int lf=10;
void draw(){
  background(0);
  if(myPort.available()>0){
    String now=myPort.readStringUntil(lf);
    x=int(split(now,'\r')[0]);
    println(now);
  }
  ellipse(width/2+x*20,height/2,100,100);
}

期末作業參考網站:
http://coopermaa2nd.blogspot.tw/2012/11/arduino-starter-kit.html

week12 郭晉瑜上課筆記

設定:


範例
https://brainy-bits.com/blogs/tutorials/arduino-joystick-tutorial

執行畫面:

成果:

2017年11月20日 星期一

Week10 喵喵喵喵喵的期中作品展示

04162523 劉旆君
04160214 郭晉瑜

作品名稱:夾娃娃機

week10 郭晉瑜期中作品展示

夾娃娃機期中作品
04160214 郭晉瑜
04162523 劉旆君











影片連結
https://youtu.be/J1riNJljKeo


遊戲說明
    我們做的是夾娃娃機,一開始在開始畫面,可以按滑鼠任意鍵進入遊戲。遊戲畫面中,可以使用方向鍵控制方向以及空白建抓取物品,當物品被夾入洞口後,物品會消失,即可在夾下一件物品,我們總共有25秒的時間可以自由抓取,時間結束後將會跳至遊戲結束畫面,此時再按滑鼠任意鍵即可重新開始。

2017年11月18日 星期六

week06 郭晉瑜上課筆記

WEEK06

爆爆王基本雛形程式

void setup()  //設定場景大小
{
  size(800,600);
}
int UserJ=9,UserI=5; //水球放置位子參數
float userX, userY;    //玩家參數
int waterN=0;  //水球參數
int []waterJ= new int[100]; //水球陣列(放很多顆)
int []waterI= new int[100];

void draw()
{
  background(#92AD28);//背景色
  noStroke(); //取消邊框格線
  for(int i=0;i<10;i++)
  {
    for(int j=0;j<17;j++)
    {
      if((j-i)%2==0) fill(#7E9819); //讓背景色分出兩個顏色
      else fill(#92AD28);
      rect(j*50,i*50,50,50); //做出格子
    }
  }
  fill(255,0,0); ellipse(UserJ*50+25, UserI*50+25,50,50); //玩家位子
  for(int i=0;i<waterN;i++)
  {
    fill(#93E1F7); ellipse(waterJ[i]*50+25, waterI[i]*50+25,30,30); //水球位子
  }
}
void keyPressed() ///控制玩家移動
{
  if(keyCode==LEFT) UserJ--;
  if(keyCode==RIGHT)UserJ++;
  if(keyCode==UP) UserI--;
  if(keyCode==DOWN) UserI++;
  if(key==' ') //按空白鍵放置水球(陣列設100所以可放100顆)
  {
    waterI[waterN]=UserI;
    waterJ[waterN]=UserJ;
    waterN++;
  }
}



火柴人打鬥遊戲

void setup()
{
  size(600,400);
}
float UserX=300, UserY=200;
float mapX=0,mapY=0;
void draw()
{
  background(#44B220);
  stroke(#356c23); noFill();
  for(int i=0;i<16;i++)
  {
    for(int j=0;j<24;j++)
    {
      rect(mapX+j*25,mapY+i*25,25,25);
    }
  }
  stroke(0); fill(#FC9E38);
  float angle=atan2(mouseY-UserY, mouseX-UserX);
  triangle( UserX+40*cos(angle),UserY+40*sin(angle),
            UserX+15*cos(angle+PI/2),UserY+15*sin(angle+PI/2),
            UserX+15*cos(angle-PI/2),UserY+15*sin(angle-PI/2));
  ellipse(UserX, UserY,30,30);
  mapX-=dirX;
  mapY-=dirY;
}
int dirX=0,dirY=0;
void keyPressed()
{
  if(key=='a' ||key=='A') dirX=-1;
  if(key=='s' ||key=='S') dirY=1;
  if(key=='d' ||key=='D') dirX=1;
  if(key=='w' ||key=='W') dirY=-1;
}
void keyReleased()
{
  if(key=='a' ||key=='A') dirX=0;
  if(key=='s' ||key=='S') dirY=0;
  if(key=='d' ||key=='D') dirX=0;
  if(key=='w' ||key=='W') dirY=0;
}

2017年10月16日 星期一

week05 郭晉瑜上課筆記

第五周

用滑鼠移動控制眼球位置

void setup()
{
  size(800,800);
}
void draw()
{
  background(128);
  strokeWeight(20); //眼睛粗度
  ellipse(100,200, 180,360);//眼睛外框
  ellipse(300,200, 180,360);//眼睛外框
 
  float angle1 = atan2( (mouseY-200)/2 , mouseX-300); //用三角函數測量眼珠角度
  float newX1 = 300 + 100*cos(angle1)/2;
  float newY1 = 200 + 200*sin(angle1)/2;
  ellipse(newX1,newY1,10,10); //眼珠
 
  float angle2 = atan2( (mouseY-200)/2 , mouseX-100); //用三角函數測量眼珠角度
  float newX2 = 100 + 100*cos(angle2)/2;
  float newY2 = 200 + 200*sin(angle2)/2;
  ellipse(newX2,newY2,10,10); //眼珠
}


做出射泡泡

void setup()
{
  size(400,800);
}
float ballX=200 , ballY=600;
float ballVX=0, ballVY=0;
float angle=0;

void draw()
{
  background(0,128,0);
  fill(#FA9703); ellipse(200,600,100,100); //大球顏色
  line(mouseX,mouseY,200,600);
  fill(#F9FA03); ellipse(ballX,ballY,30,30); //小球顏色
  angle = atan2(mouseY-600, mouseX-200); // 小球跟著滑鼠跑
 
  ballX+=ballVX; // 速度
  ballY+=ballVY; // 速度
}

void mouseMoved() 
{
  ballX=200+50*cos(angle);
  ballY=600+50*sin(angle);
}
void mousePressed() //滑鼠放開求開始移動
{
  ballVX= cos(angle);
  ballVY= sin(angle);
}


做出多顆砲彈

void setup() //使用陣列
{
  size(400,800);
}
float [] ballX=new float[10];
float [] ballY=new float[10];
float [] ballVX=new float[10];
float [] ballVY=new float[10];
float [] angle=new float[10];
int now=0;
void draw()
{
  background(0,128,0);
  fill(#FA9703); ellipse(200,600,100,100);
  for(int i=0;i<10;i++)
  {
    fill(#F9FA03); ellipse(ballX[i],ballY[i],30,30);
    ballX[i]+=ballVX[i];
    ballY[i]+=ballVY[i];
  }
  angle[now] = atan2(mouseY-600, mouseX-200);
 
 
}

void mouseMoved()
{
  ballX[now]=200+50*cos(angle[now]);
  ballY[now]=600+50*sin(angle[now]);
}
void mousePressed()
{
  ballVX[now]= cos(angle[now]);
  ballVY[now]= sin(angle[now]);
  now++; //但是做出10個後會當機
  if(now>=10) now=0; //加上這行後超過10個可以重新計算 不會當機
}

2017年10月2日 星期一

week04 郭晉瑜上課筆記

做出憤怒鳥多隻怪物

PImage img0,img1;
void setup(){
  size(800,600);
  img0 = loadImage("Mario.png");
  img1 = loadImage("Mario1.png");
  imageMode(CENTER);
  for(int i=0;i<5;i++)  //改成for迴圈一次製作多隻
  {
    for(int j=0;j<4;j++)
    {
      mar1x[i][j]=700-i*100;
      mar1y[i][j]=100+j*100;
      img1Alive[i][j]=true;
    }
  }
}
float marx=400, mary=300;
float marvx=0, marvy=0;
float marax=0, maray=0;
float [][]mar1x = new float[5][4]; //把要用成多隻的怪物位置用陣列表示
float [][]mar1y = new float[5][4];
boolean [][]img1Alive = new boolean[5][4];
void draw(){
  background(255);
  image(img0,marx,mary,100,100);
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      if (dist(mar1x[i][j],mar1y[i][j],marx,mary)<100)
      {
        img1Alive[i][j]=false;
      }
      if (img1Alive[i][j]) image(img1,mar1x[i][j],mar1y[i][j],100,100);
   
    }
  }
  marx +=marvx;
  mary +=marvy;
  if(marx<50){marx=50;marvx=-marvx;}
  if(marx>width-50){marx=width-50;marvx=-marvx;}
  if(mary<50){mary=50;marvy=-marvy;}
  if(mary>height-50){mary=height-50;marvy=-marvy;}
  marvx += marax;
  marvy += maray;
  marvx *=0.995;
  marvy *=0.995;
}
void mouseDragged()
{
  marx=mouseX; mary=mouseY;
  marvx=marvy=marax=maray=0;
}
void mouseReleased()
{
  marvx = (400-mouseX)/10.0;
  marvy = (400-mouseY)/10.0;
  maray= 0.98;
}


簡化版 做出20個形狀

float [][]pigx = new float[5][4];
float [][]pigy = new float[5][4];
boolean [][]pigAlive= new boolean[5][4];
void setup()
{
  size(800,600);
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      pigx[i][j]=700-i*100;
      pigy[i][j]=100+j*100;
      pigAlive[i][j]=true;
    }
  }
}
void draw()
{
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      fill(#07DE0F);  ellipse(pigx[i][j],pigy[i][j],100,100);
    }
  }
  fill(#DE0719);  ellipse(400,300,100,100);
}


先寫好牛頓第一、第二運動定律 讓pig碰到bird時 bird消失

float birdX = 100, birdY = 400;
float [][]pigx = new float[5][4];
float [][]pigy = new float[5][4];
boolean [][]pigAlive= new boolean[5][4];
float birdVX=0, birdVY=0;
float birdAX=0, birdAY=0;
void setup()
{
  size(800,600);
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      pigx[i][j]=700-i*100;
      pigy[i][j]=100+j*100;
      pigAlive[i][j]=true;
    }
  }
}
void draw()
{
  background(255);
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      if(dist(birdX,birdY,pigx[i][j],pigy[i][j])<100)
        pigAlive[i][j]=false;
      if(pigAlive[i][j])
      {
        fill(#07DE0F);  ellipse(pigx[i][j],pigy[i][j],100,100);
      }
    }
  }
  fill(#DE0719);  ellipse(birdX,birdY,100,100);
  birdX += birdVX; birdY +=birdVY;
  birdVX += birdAX; birdVY += birdAY;
}
void mouseDragged()
{
  birdX=mouseX;
  birdY=mouseY;
}


增加拋物線 加速度與移動速度 重量
float birdX = 100, birdY = 400;
float [][]pigx = new float[5][4];
float [][]pigy = new float[5][4];
boolean [][]pigAlive= new boolean[5][4];
float birdVX=0, birdVY=0;
float birdAX=0, birdAY=0;
void setup()
{
  size(800,600);
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      pigx[i][j]=700-i*100;
      pigy[i][j]=100+j*100;
      pigAlive[i][j]=true;
    }
  }
}
void draw()
{
  background(255);
  for(int i=0;i<5;i++)
  {
    for(int j=0;j<4;j++)
    {
      if(dist(birdX,birdY,pigx[i][j],pigy[i][j])<100)
        pigAlive[i][j]=false;
      if(pigAlive[i][j])
      {
        fill(#07DE0F);  ellipse(pigx[i][j],pigy[i][j],100,100);
      }
    }
  }
  fill(#DE0719);  ellipse(birdX,birdY,100,100);
  birdX += birdVX; birdY +=birdVY;
  birdVX += birdAX; birdVY += birdAY;
}
void mouseDragged()
{
  birdX=mouseX;
  birdY=mouseY;
  birdVX=0; birdVY=0; //讓拖曳時沒有速度
  birdAX=0; birdAY=0; ////讓拖曳時沒有加速度(不會在拖的時候下墜)
}
void mouseReleased()
{
  birdVX=(100-mouseX)/5.0;
  birdVY=(400-mouseY)/5.0;
  birdAY=0.98;
}



加入音樂


sketch - import library -add library - 下載sound
sketch - import library - sound

import processing.sound.*;

SoundFile sound;
void setup()
{
  size(800,600);
  sound = new SoundFile(this, "blue.mp3");
  sound.play();
  sound.loop();
}

因不明原因sound不能使用
改用minim

import ddf.minim.*;
import ddf.minim.effects.*;

Minim minim;
AudioPlayer groove;
void setup()
{
  size(200,100,P3D);
  minim = new Minim(this);
  groove = minim.loadFile("blue.mp3",2048);
}

2017年9月30日 星期六

week03 郭晉瑜上課筆記

匯入兩張png圖檔

PImage img0,img1;
void setup(){
  size(800,600);
  img0 = loadImage("Mario.png");
  img1 = loadImage("Mario1.png");
}
void draw(){
  background(255);
  image(img1,400,300,100,100); //前面兩碼調座標,後面兩碼調大小
  image(img0,mouseX,mouseY,100,100); //座標跟著滑鼠移動
}

把跟著滑鼠移動改成用拖曳的方法移動


PImage img0,img1;
void setup(){
  size(800,600);
  img0 = loadImage("Mario.png");
  img1 = loadImage("Mario1.png");
}
float marx=400, mary=300;
void draw(){
  background(255);
  image(img1,400,300,100,100);
  image(img0,marx,mary,100,100);
}
void mouseDragged()
{
  marx=mouseX; mary=mouseY;
}


加上速度,放開滑鼠可讓圖移動

PImage img0,img1;
void setup(){
  size(800,600);
  img0 = loadImage("Mario.png");
  img1 = loadImage("Mario1.png");
}
float marx=400, mary=300;
float marvx=0, marvy=0;
void draw(){
  background(255);
  image(img1,400,300,100,100);
  image(img0,marx,mary,100,100);
  marx +=marvx; //移動位置
  mary +=marvy; //移動位置
}
void mouseDragged()
{
  marx=mouseX; mary=mouseY;
}
void mouseReleased() //放開滑鼠
{
  marvx = (400-mouseX)/100.0; //移動速度 重量
  marvy = (400-mouseY)/100.0; //移動速度 重量
}


加上imageMode(CENTER);可讓滑鼠移動時在物件中心




加上加速度

PImage img0,img1;
void setup(){
  size(800,600);
  img0 = loadImage("Mario.png");
  img1 = loadImage("Mario1.png");
  imageMode(CENTER);
}
float marx=400, mary=300;
float marvx=0, marvy=0;
float marax=0, maray=0;
void draw(){
  background(255);
  image(img1,400,300,100,100);
  image(img0,marx,mary,100,100);
  line(marx,mary,400,300);
  marx +=marvx;
  mary +=marvy;
  marvx +=marax; //加速度
  marvy += marax; //加速度
}
void mouseDragged()
{
  marx=mouseX; mary=mouseY;
  marvx=marvy=marax=maray=0; //先歸0
}
void mouseReleased()
{
  marvx = (400-mouseX)/10.0;
  marvy = (400-mouseY)/10.0;
  maray= 0.98;
}




如果馬力歐碰到烏龜烏龜會消失

PImage img0,img1;
void setup(){
  size(800,600);
  img0 = loadImage("Mario.png");
  img1 = loadImage("Mario1.png");
  imageMode(CENTER);
}
float marx=400, mary=300;
float marvx=0, marvy=0;
float marax=0, maray=0;
float mar1x=700,mar1y=100; //幫烏龜設一個位置
boolean img1Alive=true; // 決定烏龜存在或消失
void draw(){
  background(255);
  if (img1Alive) image(img1,mar1x,mar1y,100,100); // 如果存在 烏龜位置
  image(img0,marx,mary,100,100);
  if (dist(mar1x,mar1y,marx,mary)<100) // 馬力歐碰到烏龜的區域
  {
    img1Alive=false; //碰到的話烏龜消失
  }
  marx +=marvx;
  mary +=marvy;
  marvx +=marax;
  marvy += maray;
}
void mouseDragged()
{
  marx=mouseX; mary=mouseY;
  marvx=marvy=marax=maray=0;
}
void mouseReleased()
{
  marvx = (400-mouseX)/10.0;
  marvy = (400-mouseY)/30.0;
  maray= 0.98;
}

讓瑪麗歐碰到邊界會反彈不會掉下去

PImage img0,img1;
void setup(){
  size(800,600);
  img0 = loadImage("Mario.png");
  img1 = loadImage("Mario1.png");
  imageMode(CENTER);
}
float marx=400, mary=300;
float marvx=0, marvy=0;
float marax=0, maray=0;
float mar1x=700,mar1y=100;
boolean img1Alive=true;
void draw(){
  background(255);
  if (img1Alive) image(img1,mar1x,mar1y,100,100);
  image(img0,marx,mary,100,100);
  if (dist(mar1x,mar1y,marx,mary)<100)
  {
    img1Alive=false;
  }
  marx +=marvx;
  mary +=marvy;
  if(marx<50){marx=50;marvx=-marvx;} //左右邊如果碰到邊界 速度=-速度(反彈)
  if(marx>width-50){marx=width-50;marvx=-marvx;}
  if(mary<50){mary=50;marvy=-marvy;} //上下邊界如果碰到邊界 速度=-速度(反彈)
  if(mary>height-50){mary=height-50;marvy=-marvy;}

  marvx += marax;
  marvy += maray;
  marvx *=0.995; //摩擦力
  marvy *=0.995; //摩擦力
}
void mouseDragged()
{
  marx=mouseX; mary=mouseY;
  marvx=marvy=marax=maray=0;
}
void mouseReleased()
{
  marvx = (400-mouseX)/10.0;
  marvy = (400-mouseY)/10.0;
  maray= 0.98;
}

做小朋友下樓梯

void setup()
{
  size(600,500);
}
int boardX=227,boardY=400;
int kidX=300,kidY=250;
void draw()
{
  background(0);
  rect(boardX,boardY,200,50);
  rect(kidX, kidY,50,50);
  
  if(kidX>boardX-50 && kidX<boardX+200 && kidY>boardY-50)
  {
           ///判斷有沒有碰到板子
  }
  else kidY++;
  kidX=mouseX; //用滑鼠移動
}

2017年9月25日 星期一

week02 郭晉瑜

week02
1.小畫家不用鍵盤調整筆觸粗細、顏色

void setup(){
  size(800,600); //畫面大小
  colorMode(HSB, 100); //調七彩色
}
void draw(){
  line(mouseX, mouseY, pmouseX, pmouseY); //從之前滑鼠位子畫到現在滑鼠位子
}
void mousePressed(){ //壓一下滑鼠按鍵
  if(mouseX<100){  //如果x軸<100
    strokeWeight(mouseY/50);  //照y軸位子越下面越粗
  }
  if(mouseX>700){ //如果x軸>700
    stroke(mouseY/10,100,100); // 照y軸位子調整顏色
  }
}




2.改小畫家版面

void setup(){
  size(800,600);
  rect(width-100,0,width,height);
  rect(0,0, 100,height);  //在兩邊製作一個格子
  colorMode(HSB, 100);
}
void draw(){
  if(mousePressed) line(mouseX, mouseY, pmouseX, pmouseY); //滑鼠壓下去才有線條出現
}
void mouseDragged(){ //滑鼠用滑的就可以條粗細、顏色
  if(mouseX<100){
    strokeWeight(mouseY/50);
  }
  if(mouseX>width-100){
    stroke(mouseY/10,100,100);
  }
}


3.色彩調和
使用colorMode按右鍵→參考文檔可看到

在想仔細觀看的地方複製程式,可貼到Processing上,在做調整觀看參數
noStroke();
colorMode(HSB, 100);
for (int i = 0; i < 100; i++) {
  for (int j = 0; j < 100; j++) {
    stroke(i, j, 100); //(i改顏色,j改亮度,100改飽和度)
    point(i, j);
  }
}

4.看別人openProcessing 參考程式碼
 先找到別人所做的遊戲點上面<\>可看程式碼
全部複製到processing貼上可執行

5.參考並做出一個類似概念圖形
void setup(){
  size(720,720,P2D); //場景大小,2d
}
void draw(){
  
}
void mouseDragged(){
  ellipse(mouseX,mouseY,100,100); //做圓形(x座標,y座標,寬度,高度)
}

void setup(){
  size(720,720,P2D);
}
float pX=-10000, pY=-10000, r=100; //設浮點數
void draw(){
  ellipse(pX,pY,r,r); //圓的位置,大小用參數表示
  if(r>3){ //如果半徑大於3
    r-=10; //圓半徑少10公分
    pX+=13; //位置往+x方向+13
  }
}
void mousePressed(){
  pX=mouseX; pY=mouseY;r=100; //初始位置,半徑
}

6.匯入圖檔
size(1024,768); //調場景大小
background(0,255,0); //背景色
PImage img=loadImage("dora.png"); //匯入圖檔
image(img,0,0,1024,768); //調整圖位子大小

匯入兩張圖 一張可以用滑鼠拖動
PImage img1, img2;
void setup(){
  size(1024,768);
  img1=loadImage("dora.png");
  img2=loadImage("dora2.png");
}
void draw(){
  background(0,255,0);
  image(img2,mouseX,mouseY,300,200);
  image(img1,612,384,300,200);
}

2017年9月18日 星期一

郭晉瑜 week01

做出小畫家

開啟processing
CTRL +, →叫出偏好設定
若在單字上反白點右鍵可看到在參考文檔中搜索,可看到教學
到官方網站 點tutorials可看到照步驟教學

size(600,400); →視窗大小600*400
line(0,0, 100,100);  →從(0,0)到(1,1)劃出一條線
rect(10,10, 50,50); →在(10,10)位置做出50*50四邊形


void setup(){       →設定
  size(600,400);
}
void draw(){        →畫圖
  line(mouseX,mouseY, pmouseX,pmouseY); //從之前滑鼠位子到現在滑鼠位子上劃線
  rect(10,10, 50,50);
}

用stroke調整粗細、顏色
void setup(){
  size(600,400);
}
void draw(){
  if(key=='1') {            //如果按1,粗體10顏色紫
    strokeWeight(10);
    stroke(#FB24FF);
  }
  if(key=='2') {           //如果按2,粗體5顏色灰
    strokeWeight(5);
    stroke(#958383);
  }
  line(mouseX,mouseY, pmouseX,pmouseY);
  rect(10,10, 50,50);
}


若在網頁搜尋open processing
可參考別人作品