顯示具有 05160753_林郁珊 標籤的文章。 顯示所有文章
顯示具有 05160753_林郁珊 標籤的文章。 顯示所有文章

2019年1月3日 星期四

week17

展示期末作品

遊戲操作:
1.遊戲全程使用搖桿操作
2.利用搖桿上下左右移動,將火箭移到地球上,並按下搖桿進入遊戲
3.利用搖桿左右移動來控制綠色外星人的移動,在移動中,綠色外星人會根據左右移動以及距離石頭的遠近來變換動作及表情。
4.吃到盾牌可啟動無敵模式10秒(被隕石碰到不會死掉)
5.吃到火焰果實可以啟動攻擊模式10秒(按下搖桿發射子彈射擊隕石)
6.使用了五個背景音樂來增加完的感覺(一般遊戲中的背景音樂、無敵模式的背景音樂、攻擊模式的背景音樂、過關時的音樂,以及失敗時的音樂)
7.若順利撐過60秒,畫面切換到成功畫面(GOOD JOB)
8.若被隕石砸重擊遊戲結束,畫面切換到失敗畫面(GAME OVER)
9.玩過遊戲後,若想再次挑戰,在成功或失敗的畫面找到綠色外星人,利用搖桿移動火箭到綠色外星人身上,按下搖桿,會回到一開始的地球畫面,再次將火箭移到地球上並按下搖桿即可重新玩。

賣點:
1.此遊戲中的所有畫面(遊戲背景、地球、火箭、隕石、盾牌、腳色、數字)皆為親自手繪
2.因為是期中作品的延伸,除了接上搖桿之外,增加了可以擊破隕石的攻擊模式,並且設定在視窗右邊時,子彈只會往左飛;在視窗左邊時,子彈只會往右飛。來增加難度。
3.遊戲全程使用搖桿操控,無須用到滑鼠及鍵盤。

困難點:
1.在增加攻擊模式設定的時候,原本只有在視窗右邊發射往左飛的子彈會顯示,在視窗左邊發射往右飛的子彈不會顯示,後來已成功解決。
2.在攻擊模式時,原本子彈擊中隕石的時候,隕石有變成碎裂的隕石,但同時隕石和子彈都沒有消失,並且繼續該路徑移動,後來已成功解決。
3.在攻擊模式時,因為判斷條件沒有寫好,因此會有一次發出左右兩發同時往上的錯誤子彈。
4.在接硬體設備的時候,一開始在接收資料的時候沒有辦法很順利的控制,進到遊戲場景中,無法立馬使用搖桿操控,後來已成功解決。

Youtube連結:
https://youtu.be/K_18JU_yCoE
(PS 影片為了不超過1分鐘,將遊戲總長改設定為30秒)

2018年12月27日 星期四

Week16

製作期末作品
這週我們的程式已經完成✅
我們在包裝我們的搖桿











一開始我們有貼了
向左跟向右的標誌











後來我們把這個標誌拆掉了
因為我們覺得全黑的比較有質感

2018年12月20日 星期四

Week15

製作期末作品
我們新增了發射火焰的功能
我們把畫面分成左半、右半
人在左側會發射向右的🔥
在右側會發射向左的🔥
但一開始我們有個bug
會同時出現雙向的火焰












2018年12月13日 星期四

week14

如何使用旋鈕

選擇檔案 → 範例 → Analog → AnalogInput



















跳出另一個視窗



















點擊程式碼中的網址
void setup()
{
    pinMode(13,OUTPUT); //設定Led為output
}

void loop()
{
    int value=analogRead(A0);
    digitalWrite(13,HIGH); //LED 閃爍
    delay(value);
    digitalWrite(13,LOW); 
    delay(value);
}


2018年12月6日 星期四

week13

1.安裝驅動程式
2.選擇COM7












3.選擇Arduino/Genuino Uno













開啟processing範例程序 →Serial →SimpleRead
void setup() {
  //pinMode(switchPin, INPUT);
  pinMode(2, INPUT_PULLUP);// 按鈕接在pin2.
0
  Serial.begin(9600);                    
}

void loop() {
  if (digitalRead(2) == HIGH) {  // If switch is ON,
    Serial.write(1);               // send 1 to Processing
  } else {                               // If the switch is not ON,
    Serial.write(0);               // send 0 to Processing
  }
  delay(100);                            // Wait 100 milliseconds
}

2018年11月29日 星期四

Week12

HakerSpace 製作光劍
1. 準備110顆LED 燈
2.將燈拗成ㄇ字型
3.利用黏土固定在桌上
4.正接正,負接負,焊接起來
5.成功串連LED燈泡後,再將燈條塞入燈管
(由於焊接的不是很好,所以我塞到一半就斷掉,
我們又拔出來,重新焊前來,這種情況大概發生3次,
做到差點崩潰)
6.焊上電阻及可充電電池
7.裝上光劍握把
8.大功告成🏆

不過最後又順利完成這支光劍,很開心!
雖然我的光劍整支都是藍的,
因為我的LED 燈接太長,
還不容易將它塞進去,
我實在不想再把它拔出來,
就這樣將錯就錯吧哈哈

By the way 覺得這兩百塊花得很值得































2018年11月22日 星期四

week11

LED依序亮起來

void setup()
{
    for(int i=2;i<=13;i++){
    pinMode(i,OUTPUT);//設定Led為output
    }
}

void loop()
{
     for(int i=2;i<=13;i++){
    digitalWrite(i,HIGH); //LED 閃爍
    delay(300);
     }
     for(int i=2;i<=13;i++){
    digitalWrite(i,LOW);
     }
}

播放小星星

int piezoPin = 8;
int length = 15;
char notes[] = "ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc ";      // a space represents a rest
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;

void playTone(int tone, int duration) 
{
  for (long i = 0; i < duration * 1000L; i += tone * 2) 
  {
    digitalWrite(piezoPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(piezoPin, LOW);
    delayMicroseconds(tone);
  }
}

void playNote(char note, int duration) 
{
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
  for (int i = 0; i < 8; i++) 
  {
    if (names[i] == note) 
    {
      playTone(tones[i], duration);
    }
  }
}

void setup() 
{
  pinMode(piezoPin, OUTPUT);
}

void loop() 
{
  for (int i = 0; i < length; i++) 
  {
    if (notes[i] == ' ') 
    {
      delay(beats[i] * tempo);
    } else 
      playNote(notes[i], beats[i] * tempo);
    delay(tempo / 2); 
  }

LED對照音符發亮

void playNote(char note, int duration) 
{
  int LED[]={2,3,4,5,6,7,9,10};
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
  for (int i = 0; i < 8; i++) 
  {
    if (names[i] == note) 
    {
      digitalWrite(LED[i],HIGH);
      playTone(tones[i], duration);
      digitalWrite(LED[i],LOW);
    }
  }
}

void setup() 
{
  //pinMode(piezoPin, OUTPUT);
  for(int i=2;i<=13;i++)pinMode(i,OUTPUT);
}
void playNote(char note, int duration) 
{
  int LED[]={3,4,5,6,7,9,10,11};
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
  for (int i = 0; i < 8; i++) 
  {
    if (names[i] == note) 
    {
      digitalWrite(LED[i],HIGH);
      playTone(tones[i], duration);
      digitalWrite(LED[i],LOW);
    }
  }
}

卡歌

int piezoPin = 8;
int button = 2;
int lengths = 26;
char jbnotes[] = "eeeeeeegcde fffffeeeeddedg";
int jbbeats[] = { 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2};
int length = 15;
char ttlsnotes[] = "ccggaag ffeeddc ggffeed ggffeed ccggaag ffeeddc ";
int ttlsbeats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;

void playTone(int tone, int duration) 
{
  for (long i = 0; i < duration * 1000L; i += tone * 2) 
  {
    digitalWrite(piezoPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(piezoPin, LOW);
    delayMicroseconds(tone);
  }
}

void playNote(char note, int duration) 
{
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };
  for (int i = 0; i < 8; i++) 
  {
    if (names[i] == note) 
    {
      playTone(tones[i], duration);
    }
  }
}

void setup() 
{
  pinMode(piezoPin, OUTPUT);
  pinMode(button, INPUT_PULLUP);
}

void loop() 
{
  int sensorVal = digitalRead(button);
  if (sensorVal == HIGH)
  {
    for (int i = 0; i < length; i++) 
    {
      if (ttlsnotes[i] == ' ') 
      {
        delay(ttlsbeats[i] * tempo);
      } 
      else 
        playNote(ttlsnotes[i], ttlsbeats[i] * tempo);
      if(digitalRead(button)==LOW)break;    ///按下按鈕進行卡歌
      delay(tempo / 2); 
    }
  }
  else
  {
    for (int i = 0; i < lengths; i++) 
    {
      if (jbnotes[i] == ' ') 
      {
        delay(jbbeats[i] * tempo);
      } 
      else 
        playNote(jbnotes[i], jbbeats[i] * tempo);
      delay(tempo / 2); 
    }
  }
}

設定0、1、2的順序

int now=0;
void loop()
{
  delay(tempo/2);
  //int sensorVal = digitalRead(button);
  if (now==0)
  {
    for (int i = 0; i < length; i++)
    {
      if (ttlsnotes[i] == ' ')
      {
        delay(ttlsbeats[i] * tempo);
      }
      else
        playNote(ttlsnotes[i], ttlsbeats[i] * tempo);
      if(digitalRead(button)==LOW){now=1;break;}
      delay(tempo / 2);
    }
  }


2018年11月8日 星期四

Week09

Maker uno
1.下載套件
2.開啟Aduno

由於很多同學帶的USB 線只能用來充電,
老師的電腦也一直在重開機,
所以今天的課上得不是很順利。

最後是教的是上星期期中展示的籃球機,
投籃如果打框會彈跳。

2018年11月1日 星期四

week08

期末作品展示_閃躲隕石

遊戲操作:
1.火箭(鼠標)移到地球上,點擊進入遊戲
2.利用鍵盤左右鍵移動,移動中綠綠外星人會變換動作以及表情
3.吃到盾牌可啟動無敵模式10秒(被隕石碰到不會死掉)
4.整個遊戲時間為60秒,進入
5.使用了四個音樂來增加玩的感覺(一般遊戲中的背景音樂,無敵模式的背景音樂,過關時的音樂,以及失敗時的音樂)
6.若順利撐過60秒,畫面切換到成功畫面(GOOD JOB)
7.若被隕石砸中則結束遊戲,畫面切換到失敗畫面(GAME OVER)
8.玩過遊戲後,若想再次挑戰,在成功/失敗畫面找到綠綠外星人並點擊,會回到一開始的地球畫面,再次點及地球即可重新玩。

賣點:
此遊戲中的所有畫面(遊戲背景、地球、火箭、隕石、盾牌、角色、數字)皆為親自手繪

困難點:
1.原本隕石都是直直落下,後來將一開始的位置和速度方向改變即可
2.將秒數倒數以圖片的方式呈現
3.原本火箭(鼠標)在遊戲畫面中任意位置按下都可以進入遊戲,後來將火箭(鼠標)移到特定位置點擊才有辦法進入遊戲畫面

https://www.youtube.com/watch?v=PQmqmMYmwJ4


2018年10月25日 星期四

week07

製作血條

int life=10;///一格血量為10
boolean gameOver=false;
void setup(){
  size(500,500);
}
void draw(){
  background(0,0,200);
  fill(255);rect(50,50,100,20);///底色為白色
  fill(255,0,0);rect(50,50,life*10,20);///上層為紅色
  if(gameOver){
    textSize(40);
    text("Game Over",150,150);
  }
}
void mousePressed(){
  life--;
  if(life<=0)gameOver=true;
}
























畫面切換

int state=0;
int remainTime=0;
void setup(){
  size(800,600);
}
void draw(){
  if(state==0){
    drawOP();
    if(key=='1'){state=1;remainTime=5*60;}///1/60秒,所以要乘60
  }
  else if(state==1){ 
    drawPlayer();
  }
  else if(state==2){
    drawED();
  }
}
void drawED(){
  background(0);
  fill(#F0D90C);text("Game Over",100,100);
}
void drawPlayer(){
  background(#F0D90C);
  fill(#120FF2);text("Playing... You can press 2 to End",10,100);
  text("remain:"+remainTime,10,200);
  remainTime--;
  if(remainTime<=0)state=2;
}
void drawOP(){
  background(0);
  fill(#F5DE07);
  textSize(30);text("Opening... You can press 1 to play",10,100);
}












 text("remain:"+(remainTime+59)/60,10,200);
///+59在除60能自動進位成1







2018年10月18日 星期四

week06

播放音樂

import ddf.minim;
Minim minim;
AudioPlayer player;
void setup(){
  minim =new Minim(this);
  player=minim.loadFile("groove.mp3");
  player.play();
}
void draw(){

}








水果忍者

拋一顆球
float fruitX,fruitY,fruitVX,fruitVY;
void setup(){
  size(800,600);
  fruitX=30;fruitVX=3;
  fruitY=700;fruitVY=-35;
}
void draw(){
  background(0);
  ellipse(fruitX,fruitY,100,100);
  fruitX+=fruitVX;
    fruitY+=fruitVY;
    fruitVY+=0.98;
}

在同一水平線上拋20顆球
float []fruitX=new float[20];
float []fruitY=new float[20];
float []fruitVX=new float[20];
float []fruitVY=new float[20];
void setup(){
  size(800,600);
  for(int i=0;i<20;i++){
    fruitX[i]=random(800); fruitVX[i]=3;
    fruitY[i]=700; fruitVY[i]=-35;  
  }
}
void draw(){
  background(0);
  for(int i=0;i<20;i++){
    ellipse(fruitX[i],fruitY[i],100,100);
    fruitX[i]+=fruitVX[i];
    fruitY[i]+=fruitVY[i];
    fruitVY[i]+=0.98;
  }
}












隨機拋球
float []fruitX=new float[20];
float []fruitY=new float[20];
float []fruitVX=new float[20];
float []fruitVY=new float[20];
void reborn(int i){
  fruitX[i]=random(800); fruitVX[i]=random(6)-3;
  fruitY[i]=700; fruitVY[i]=-35;  
}
void setup(){
  size(800,600);
  for(int i=0;i<20;i++){
    reborn(i);
  }
}
void draw(){
  background(0);
  for(int i=0;i<20;i++){
    if(dist(mouseX,mouseY,fruitX[i],fruitY[i])<=50){
      reborn(i); continue;
    }
    ellipse(fruitX[i],fruitY[i],100,100);
    fruitX[i]+=fruitVX[i];
    fruitY[i]+=fruitVY[i];
    fruitVY[i]+=0.98;
    if(fruitY[i]>700)reborn(i);
  }
}


2018年10月11日 星期四

week05

接雞蛋

float[] eggX=new float[100];
float[] eggY=new float[100];
void setup(){
  size(800,600);
  for(int i=0;i<100;i++){
    eggX[i]=random(100,700);
    eggY[i]=-random(2000);
  }
}
void draw(){
  background(255);
  for(int i=0;i<100;i++){
    ellipse(eggX[i],eggY[i],80,100);
    eggY[i]+=5;
  }
}















float[] eggX=new float[100];
float[] eggY=new float[100];
boolean[]eggDie=new boolean[100];
void setup(){
  size(800,600);
  for(int i=0;i<100;i++){
    eggX[i]=random(100,700);//隨機生成
    eggY[i]=-random(2000);
    eggDie[i]=false;
  }
}
void draw(){
  background(255);
  rect(mouseX-50,mouseY-25,100,50);
  for(int i=0;i<100;i++){
    if(eggDie[i])continue; //100顆雞蛋使用完畢可重複利用
    ellipse(eggX[i],eggY[i],80,100);
    eggY[i]+=5;
    if(eggY[i]>700) eggY[i]=-2000+600;//雞蛋碰到地板,消失再重新生成
    if(dist(mouseX-50,mouseY-25,eggX[i],eggY[i])<50){
      eggDie[i]=true;//盒子碰到雞蛋,雞蛋消失
    }
  }
}















PImage[] imgN=new PImage[10];//放入10個好看的數字
float[] eggX=new float[100];
float[] eggY=new float[100];
boolean[]eggDie=new boolean[100];
void setup(){
  size(800,600);
  for(int i=0;i<=9;i++)imgN[i]=loadImage(i+".png");
  for(int i=0;i<100;i++){
    eggX[i]=random(100,700);
    eggY[i]=-random(2000);
    eggDie[i]=false;
  }
}
int score=0;
void draw(){
  background(255);rect(mouseX-50,mouseY-25,100,50);
  for(int i=0;i<100;i++){
    if(eggDie[i])continue;
    ellipse(eggX[i],eggY[i],80,100);
    eggY[i]+=5;
    if(eggY[i]>700) eggY[i]=-2000+600;
    if(dist(mouseX-50,mouseY-25,eggX[i],eggY[i])<50){
      eggDie[i]=true;
      score+=100;//接到一顆+100
    }
  }
  int now=score;
  for(int i=0;i<7;i++){
    image(imgN[(now%10)],800-i*100,100,100,150);
    now/=10;
  }
}















PImage []img;
float []cherryX=new float[8];
float []cherryY=new float[8];
float []cherryVX=new float[8];
float []cherryVY=new float[8];
void cherryRebord(int i){
  cherryX[i]=random(800);
  cherryY[i]=700;
  cherryVX[i]=random(8)-4;
  cherryVY[i]=-40;
}
void setup(){
  size(800,600);
  println("1");
  img=new PImage[8];
  
  for(int i=0;i<8;i++) img[i]=loadImage("cherry.png");
  println("2");
  for(int i=0;i<8;i++) cherryRebord(i);
  println("3");

  for(int i=0;i<10;i++)sword[i]=new PVector();
  println("4");

}
PVector [] sword=new PVector[10];
void draw(){
  background(255);
  for(int i=0;i<8;i++) {
    image(img[i],cherryX[i],cherryY[i],100,150);
    cherryX[i]+=cherryVX[i];
    cherryY[i]+=cherryVY[i];
    cherryVY[i]+=0.98;
  }
  for(int i=9;i>0;i--){
    sword[i].x=sword[i-1].x; sword[i].y=sword[i-1].y;
  }
  sword[0].x=mouseX; sword[0].y=mouseY;
  for(int i=1;i<10;i++){
   line(sword[i].x,sword[i].y,sword[i-1].x,sword[i-1].y);
  }
}







2018年10月4日 星期四

week04

顯示文字(大小、顏色)

void setup()
{
  size(400,400);
}
void draw()
{
  fill(255,255,255);//填入顏色
  rect(100,100,100,100);//由頂點(100,100)往右下畫
  textSize(60);//調整文字大小
  fill(0,0,0);
text("Start",100,100);//由頂點(100,100)往右上畫
}











發射一顆子彈

void setup()
{
  size(400,400);
}
void draw()
{
  background(255);//清背景,消除殘影
  fill(0,255,255); rect(100,100,100,100);
  textSize(60);
  fill(0,0,0); text("Start",100,100);
  if(bulletFlying){
    ellipse(bulletX,bulletY,30,30);
    bulletX+=3;//子彈向右移動
  }
}
float bulletX=100,bulletY=100;
boolean bulletFlying=false;
void keyPressed(){
  bulletFlying=true;//按下鍵盤發出子彈
}














可連發的子彈

void setup()
{
  size(400,400);
}
void draw()
{
  background(255);
  fill(0,255,255);
  for(int i=0;i<bulletN;i++){
  if(bulletFlying[i]){
    ellipse(bulletX[i],bulletY[i],30,30);
    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;//準備100顆子彈
  bulletN++;//連續發射
}



















利用滑鼠隨意射出子彈

PImage imgBullet,imgBG;
void setup(){
  size(800,600);
  imgBG=loadImage("BG.jpg");
  imgBullet=loadImage("bullet.png");
  imageMode(CENTER);//圖片置中
}
void draw()
{
  image(imgBG,width/2,height/2,width,height);
  image(imgBullet,mouseX,mouseY,100,100);
  for(int i=0;i<bulletN;i++){
    if(bulletFlying[i]){
      image(imgBullet,bulletX[i],bulletY[i],100,100);
      bulletX[i]-=3;
    }
  }
}
float []bulletX=new float[100];
float []bulletY=new float[100];
int bulletN=0;
boolean []bulletFlying=new boolean[100];
void mousePressed(){
  bulletFlying[bulletN]=true;
  bulletX[bulletN]=mouseX;
  bulletY[bulletN]=mouseY;
  bulletN++;
}















炸彈向上拋

PImage imgBullet,imgBG;
void setup(){
  size(800,600);
  imgBG=loadImage("BG.jpg");
  imgBullet=loadImage("bullet.png");
  imageMode(CENTER);
}
void draw()
{
  image(imgBG,width/2,height/2,width,height);
  ellipse(mouseX,mouseY,100,100);
  for(int i=0;i<bulletN;i++){
    if(bulletFlying[i]){
      ellipse(bulletX[i],bulletY[i],100,100);
      bulletY[i]+=bulletVY[i];
      bulletVY[i]+=0.98;//增加Y方向的速度
    }
  }
}
float []bulletX=new float[100];
float []bulletY=new float[100];
float []bulletVY=new float[100];
int bulletN=0;
boolean []bulletFlying=new boolean[100];
void mousePressed(){
  bulletFlying[bulletN]=true;
  bulletX[bulletN]=mouseX;
  bulletY[bulletN]=mouseY;
  bulletVY[bulletN]=-10;//球向下掉
  bulletN++;
}







2018年9月27日 星期四

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;}
}




2018年9月20日 星期四

week02

1.複習上週進度
2.畫出相似圖形

void setup(){
  size(400,400);
}
int r=30;
void draw(){
  ellipse(mouseX,mouseY,r,r);
  r-=3;
  if(r<0) r=30;
}

















3.變換顏色

void setup(){
  size(400,400);
  colorMode(HSB,100);
}
int r=30,H=0; //H色調
void draw(){
  fill(H,100,100);
  ellipse(mouseX,mouseY,r,r);
  r-=3;
  if(r<0) r=30;
  H++;
  if(H>=100)H=0;
}



















4.不用滑鼠移動,隨機生成

void setup(){
  size(400,400);
  colorMode(HSB,100);
}
int r=30,H=0;//r半徑,H色調
int CircleX=200,CircleY=200;
void draw(){
  fill(H,100,100);
  ellipse(CircleX,CircleY,r,r);//畫圓
  r-=2;
  CircleX+=random(30)-15;//隨機生成範圍0~15
  CircleY+=random(30)-15;
  if(r<0){ 
    r=50;
    CircleX=200;CircleY=200;
  }
  H++;
  if(H>=100)H=0;
}














5.電腦當機(讀圖)

PImage img;
void setup(){
  size(1280,720);
  img=loadImage("error.png");//載入圖片
}
void draw(){
  image(img,mouseX,mouseY);
}












PImage img,img2;
void setup(){
  size(1280,720);
  img=loadImage("snoopy.png");
  img2=loadImage("BG.png");
}
void draw(){
  image(img2,0,0,width,height);
  image(img,mouseX,mouseY,100,130);
}






















2018年9月13日 星期四

week01

processing




















size(600,600);//視窗的大小
line(0,0,100,100);//從(0,0)到(100,100)畫一條線
rect(100,100,300,300);//從頂點(100,100)畫出一個正方形

滑鼠點擊變換背景顏色

void setup(){
  size(300,300);
}
void draw(){
  if(mousePressed) background(255,0,0);//按下滑鼠背景顯示紅色
  else background(0,255,0);//放開顯示綠色
}

                                                                                                                                                           

小畫家

void setup(){
  size(500,500);
}
void draw(){
  if(mousePressed) line(mouseX,mouseY,pmouseX,pmouseY);
}//按下滑鼠就可以畫線
void keyPressed(){
  if(key=='1')strokeWeight(1);//調整筆畫粗細
  if(key=='2')strokeWeight(2);
  if(key=='9')strokeWeight(9);
  if(key=='r')stroke(255,0,0);//變換筆觸顏色
  if(key=='g')stroke(0,255,0);
  if(key=='b')stroke(0,0,255);
}