顯示具有 05050793_林子傑 標籤的文章。 顯示所有文章
顯示具有 05050793_林子傑 標籤的文章。 顯示所有文章

2020年6月18日 星期四

2020/6/18

2020/6/18
今天學到一個小遊戲
利用滑鼠按下可移動圓點的座標

void setup(){
    size(300,300);
}
float x=200,y=150;
void draw(){
  background(255,255,255);
  stroke(#b7efff);
  line(100,150,x,y);
  fill(#b7efff);
  noStroke();
  ellipse(100,150,13,13);
  ellipse(x,y,13,13);
}
void mouseDragged(){
  x=mouseX;
  y=mouseY;
}
之後再加入
float x=200,y=150; float vx=0,vy=0;
if(!mousePressed){ float dx=x-100, dy=y-150; float len=sqrt(dx*dx+dy*dy); vx-=dx*(len-100)/len*0.003; vy-=dy*(len-100)/len*0.003; x+=vx;//x-=dx*(len-100)/len*0.008; y+=vy;//y-=dy*(len-100)/len; } }
讓圓點被拉長時,會慢慢回復,並呈現出彈性
原程式碼:
void setup(){ size(300,300); } float x=200,y=150; float vx=0,vy=0; void draw(){ background(255,255,255); stroke(#b7efff); line(100,150,x,y); fill(#b7efff); noStroke(); ellipse(100,150,13,13); ellipse(x,y,13,13); if(!mousePressed){ float dx=x-100, dy=y-150; float len=sqrt(dx*dx+dy*dy); vx-=dx*(len-100)/len*0.003; vy-=dy*(len-100)/len*0.003; x+=vx;//x-=dx*(len-100)/len*0.008; y+=vy;//y-=dy*(len-100)/len; } } void mouseDragged(){ x=mouseX; y=mouseY; }




這是另一個遊戲(逗貓棒)


程式碼:
void setup(){
    size(400,300);
}
float x=200,y=150;
void draw(){
    background(#002966);
    fill(255);
    rect(x,y,80,20);
    float dx=x-mouseX,dy=y-mouseY;
    x-=dx*0.1;
    y-=dy*0.1;
}


畫面中的方塊會隨著滑鼠移動

2020年6月11日 星期四

今天教的是讓圖片一按鍵所指定的動作改變位置及動作
首先我們能到sprite sheet找到人物一系列的動作圖

PImage img;
void setup(){
  size(500,500);
  img=loadImage("img.jpg");
  imageMode(CENTER);
}
void draw(){
  background(255);
  //image( img, 0,0);
  image(  img.get(141*a, 211*b, 141,211), x,y);
  if(frameCount%30==0) a++;
  if(a>=4) a=0;
}
int a=0, b=0, x=250, y=250;
void keyPressed(){
  if(keyCode==RIGHT){ b=3; x++; }
  if(keyCode==LEFT) { b=2; x--; }
  if(keyCode==UP) { b=1; y--; }
  if(keyCode==DOWN){ b=0; y++; }
}

2020年5月29日 星期五

憤怒鳥-豬豬現身

import ddf.minim.*;
Minim minim;
AudioPlayer player;
AudioPlayer player2;
PImage imgBird, imgPig;
void setup(){
  size(500,400);
  minim=new Minim(this);
  player=minim.loadFile("song.mp3");
  player.play();
  player2=minim.loadFile("pig.wav");

  imgBird=loadImage("bird.png");//圖檔如果沒有放好,會當掉 pointer
  imgPig=loadImage("pig.gif");//我們的豬
  imageMode(CENTER);//以正中心,當座標
}
float []pigX=new float[20];
float []pigY=new float[20];
int pigN=0;//有幾隻豬
float birdX=100, birdY=300, oldX, oldY, vx=0, vy=0;//之前的鳥在哪裡
boolean bMoving=false;//if(判斷) ex. if(bMoving)...
void draw(){
  background(255);//清背景
  for(int i=0;i<pigN; i++){
      image(imgPig, pigX[i], pigY[i], 100,100);
  }
  image(imgBird, birdX,birdY,100,100);//不能一直跟著mouse動,改用birdX,birdY
  if(bMoving) line(birdX,birdY, oldX,oldY);//有按到,才能動它
  birdX+=vx; birdY+=vy;//鳥要照速度去飛!!!
  if(birdX>450 || birdX<50) vx = -vx*0.95;//撞到邊界,會改變方向,相反的方向
  if(birdY>350 || birdY<50) vy = -vy*0.95;//撞到邊界,會改變方向,相反的方向
}
void mouseReleased(){
  if(bMoving){
    bMoving=false;//放開時,就不能動了
    vx=(oldX-mouseX)/10; vy=(oldY-mouseY)/10;// 0.1倍
  }
}
void mousePressed(){//按下去才開始動
  if(mouseButton==RIGHT){
      player2.rewind();//把音樂時間調到一開始
      player2.play();//再播
      pigX[pigN]=mouseX;
      pigY[pigN]=mouseY;
      pigN++;
  }
  if(dist(mouseX,mouseY,birdX,birdY)<50){
    oldX=birdX;  oldY=birdY;
    bMoving=true;//按下去時,有按到圖案才會動
  }
}


void mouseDragged(){//按下去,才會開始動

  if(bMoving) {//有按到,才能動它
    birdX=mouseX; birdY=mouseY;

  }
}

由於豬的部分是用陣列設為20隻,因此按滑鼠超過20下後會造成系統錯誤,系統便產生error。

之後的想法是加入更多的音效,例如;碰撞聲、失敗音效等等。另外也想設計更多讓圖片互動的程式出來。





2020年5月28日 星期四

week13

今天是做憤怒鳥遊戲的第二部分:要加入音樂的部分。



                                                   我們透過加入新的程式庫



透過查詢sound找到ddf的minim

把minim的程式庫導入主程式中
接著在將音樂檔抓進去就行了(程式內的檔名要打對)



PImage imgBird;
void setup(){
  size(500,400);
  imgBird=loadImage("bird.png");//圖檔如果沒有放好,會當掉 pointer
  imageMode(CENTER);//以正中心,當座標
}
float birdX=100, birdY=300, oldX, oldY, vx=0, vy=0;//之前的鳥在哪裡
boolean bMoving=false;//if(判斷) ex. if(bMoving)...
void draw(){
  background(255);//清背景
  image(imgBird, birdX,birdY,100,100);//不能一直跟著mouse動,改用birdX,birdY
  if(bMoving) line(birdX,birdY, oldX,oldY);//有按到,才能動它
  birdX+=vx; birdY+=vy;//鳥要照速度去飛!!!
  if(birdX>450 || birdX<50) vx = -vx*0.95;//撞到邊界,會改變方向,相反的方向
  if(birdY>350 || birdY<50) vy = -vy*0.95;//撞到邊界,會改變方向,相反的方向
}
void mouseReleased(){
  if(bMoving){
    bMoving=false;//放開時,就不能動了
    vx=(oldX-mouseX)/10; vy=(oldY-mouseY)/10;// 0.1倍
  }
}
void mousePressed(){//按下去,才會開始動
  if( dist(mouseX,mouseY, birdX,birdY)<50){
    oldX=birdX; oldY=birdY;
    bMoving=true;///按下去時,如果有按到,才能動它
  }
}
void mouseDragged(){//按下去,才會開始動
  if(bMoving) {//有按到,才能動它
    birdX=mouseX; birdY=mouseY;
  }
}




2020年5月25日 星期一

001

今天無聊想到馬力歐遊戲,想用老師教過的一些技巧來讓馬力歐做出上、下、左、右、蹲下變身、攻擊等動作。

import java.awt.event.*;
PImage img0,img1,img2,img3,img4,img5;
void setup() {
  size(1000,1000);
  img0 = loadImage("jump.png");
  img1 = loadImage("right.jpg");
  img2 = loadImage("left.jpg");
  img3 = loadImage("down.jpg");
  img4 = loadImage("attack.jpg");
  img5 = loadImage("stand.png");
}
int userX=200, userY=200;
void draw(){
  background(255);
  if(keyPressed && keyCode==LEFT){
    image(img2, userX,userY,420,300);
    userX--;
  }else if(keyPressed && keyCode==RIGHT){
    image(img1,userX,userY,380,300);
    userX++;
  }else if(keyPressed && keyCode==UP){
    image(img0,userX,userY,240,240);
    userY--;
  }else if(keyPressed && keyCode==DOWN){
    image(img3,userX,userY,240,240);
    userY++;
  }else if(keyPressed && keyCode==123){
    image(img4,userX,userY,360,240);
  }else image(img5, userX, userY,180,240);
  }
這是完成的程式碼,原本這程式中有使用到keycode用來執行按下按鍵對應的動作,但我發現基本的keycode裡面只能偵測上下左右的按鍵,其他按鍵的code並沒有,因此要導入一些資料
,也就是第一行的///  import java.awt.event.*;  ///,之後程式便能正常執行。

另外,因為腳色動作需要圖檔,而從網站上抓取的圖大小不一,我用image來改變顯示的大小,但要注意設定的大小是否符合原本圖片的比例,以免圖片顯示時,影像出現變形。


2020年5月21日 星期四

week13

今天老師為我們講解大學程式比賽的題目


這題目是要我們先輸入要處理的數字數目,在將後輸入的數字用數字產生器將結果輸出,而數字產生器的功用是將得到的數字拆解成一個新數字,新數字本身加上每個位數上的數字為原本得到的數字。


利用函式將計算過程分開
==============================================

今天打的程式遊戲是憤怒鳥
程式名稱:processing

PImage imgBird;
void setup(){
  size(500,400);
  imgBird=loadImage("bird.png");//圖檔如果沒有放好,會當掉 pointer
  imageMode(CENTER);//以正中心,當座標
}
float birdX=100, birdY=300, oldX, oldY, vx=0, vy=0;//之前的鳥在哪裡
boolean bMoving=false;//if(判斷) ex. if(bMoving)...
void draw(){
  background(255);//清背景
  image(imgBird, birdX,birdY,100,100);//不能一直跟著mouse動,改用birdX,birdY
  if(bMoving) line(birdX,birdY, oldX,oldY);//有按到,才能動它
  birdX+=vx; birdY+=vy;//鳥要照速度去飛!!!
  if(birdX>450 || birdX<50) vx = -vx*0.95;//撞到邊界,會改變方向,相反的方向
  if(birdY>350 || birdY<50) vy = -vy*0.95;//撞到邊界,會改變方向,相反的方向
}
void mouseReleased(){
  if(bMoving){
    bMoving=false;//放開時,就不能動了
    vx=(oldX-mouseX)/10; vy=(oldY-mouseY)/10;// 0.1倍
  }
}
void mousePressed(){//按下去,才會開始動
  if( dist(mouseX,mouseY, birdX,birdY)<50){
    oldX=birdX; oldY=birdY;
    bMoving=true;///按下去時,如果有按到,才能動它
  }
}
void mouseDragged(){//按下去,才會開始動
  if(bMoving) {//有按到,才能動它
    birdX=mouseX; birdY=mouseY;
  }
}




2020年5月7日 星期四

瘋狂車程之我要上程設 week11

今天老師要教我們泡泡排序法,可以將亂掉的數字以小到大排序好。

int []a=new int[10];//Java's Array
//int []a={6,3,5,9,1,0,4,2,7,8};
//int []a={1,2,3,5,0,4,6,7,8,9};
//int []a={9,8,7,6,5,4,3,2,1,0};
void setup(){
  size(500,800);
  for(int i=0;i<10;i++){//random choose number
    a[i]=int(random(10));//亂數決定數字
  }
  textSize(36);
  textAlign(LEFT,TOP);
  showArray(y);
}
int y=0;
void showArray(int y){
  for(int i=0;i<10;i++){
    fill(255);  rect(i*50, y, 50,50);
    fill(0);         text(a[i], i*50, y);
  }  
}
void draw(){
  
}
void mousePressed(){
  for(int i=0; i<10-1;i++){
    if(a[i] > a[i+1]){
      int temp=a[i];
      a[i]=a[i+1];
      a[i+1]=temp;
      fill(255,0,0,128); rect(i*50, y, 100,50);
    }
  }
  y+=50;
  showArray(y);
}


void setup(){
  size(300,500);
  colorMode(HSB);
}
int ansx=2, ansy=3;
int n=5;
int H=255, S=255, B=255;
void draw(){
    background(0);
    int R=300/n;
    int w=R/2;
    for(int x=0;x<n;x++){
        for(int y=0;y<n;y++){
          if(x==ansx && y==ansy)
          fill(H+10, S-22, B-10);
          else fill(H,S,B);
          ellipse(0+w+x*R,200+w+y*R,R,R);
        }
    }
}
void mousePressed(){
  ansx=int(random(n)); 
  ansy=int(random(n));
  H+=16;
  if(H>255)H=0;
}


2020年4月30日 星期四

2020/4/30

void setup(){
size(1000,1000);
}
int r=0;
void draw(){
  background(0);
  for(int x=0;x<10;x++){
  for(int y=0;y<10;y++){
ellipse(50+x*100,200+50+y*100,r,r);
  }
  }
if(r<100)
r+=2;
else r=0;
}
這是今天教的遊戲小程式
先做一些基本的功能
首先設定視窗大小,並透過改變函數中直徑的長短來讓畫面產生變化,之後我們透過迴圈來定義圖形的數量

2020年4月16日 星期四

小精靈"我是暴食怪"

void setup(){
    size(300,200);
}
int angle=45;
void draw(){
  background(255);
  angle=mouseX;
  arc(100,100,100,100, radians(angle),radians(360-angle),PIE);
}
今天要試做經典小遊戲"小精靈"
我們透過arc公式來畫出小精靈的身體,並且可以用滑鼠的移動來控制她的身體變化。



void setup(){
    size(300,200);
}
int angle=45;
void draw(){
  background(255);
  angle=(frameCount*2)%120;
  if(angle>60) angle=120-angle;
  arc(100,100,100,100, radians(angle),radians(360-angle),PIE);
}
我們也可以將angle的參數改變,讓他自動改變參數,小精靈的圖像就會自己動起來了

void setup(){
    size(300,200);
}
int angle=45;
void draw(){
  background(255);
  angle=(frameCount*2)%120;
  if(angle>60) angle=120-angle;
  fill(120,255,255);
  arc(100,100,100,100, radians(angle+360),radians(360-angle+360),PIE);
}
接著再把顏色填進去,小精靈就有更多顏色了



void setup(){
    size(300,200);
}
int angle=45;
void draw(){
  background(255);
  angle=(frameCount*2)%120;
  if(angle>60) angle=120-angle;
   colorMode(HSB);
  fill((frameCount*1.5)%120,255,255);
  arc(100,100,100,100, radians(angle+360),radians(360-angle+360),PIE);
}
如果想讓小精靈自動變色的話就把顏色的地方換成
  colorMode(HSB);
  fill((frameCount*1.5)%120,255,255);


2020年4月9日 星期四

week07 程式設計 齁勝

PImage img1;

PImage img2;

PImage img3;

PImage img4;

PImage img5;

PImage img6;

PImage img;

void setup(){

  size(1000,1000);

  img1=loadImage("3.png");

  img2=loadImage("4.png");

  img3=loadImage("5.png");

  img4=loadImage("6.png");

  img5=loadImage("7.png");

  img6=loadImage("8.png");

  img=img1;

}

void draw(){

  background(255);

  image(img,350,350,300,300);

}

void keyPressed(){

  if (keyCode=='1') img=img1;

  if (keyCode=='2') img=img2;

  if (keyCode=='3') img=img3;

  if (keyCode=='4') img=img4;

  if (keyCode=='5') img=img5;

  if (keyCode=='6') img=img6;

}

void keyReleased(){

  img=img1;

}
這是今天打的程式,可以透過按下按鍵來改變顯示的圖案,我這次用的圖示數碼寶貝的進化表。  (記得圖片要跟程式檔存在同個位置,可以按 Ctrl+k來查找)









PImage img1;
PImage img2;
PImage img3;
PImage img4;
PImage img5;
PImage img6;
PImage img;
float x=100, y=100,vx=0;

void setup(){
  size(1000,1000);
  img1=loadImage("4.PNG");
  img2=loadImage("5.PNG");
  img3=loadImage("6.PNG");
  img4=loadImage("7.PNG");
  img5=loadImage("8.PNG");
  img6=loadImage("9.PNG");
  img=img1;
}
void draw(){
  background(255);
  image(img,x,y);
  x+=vx;
}
void keyPressed(){
  if (keyCode=='1') {
    img=img1;
    vx=-1;}
  if (keyCode=='2') {
    img=img2;
    vx=+1;}
  if (keyCode=='3') {
    img=img3;
    vx=+1;}
  if (keyCode=='4') {
    img=img4;
    vx=-1;}
  if (keyCode=='5') {
    img=img5;
    vx=+1;}
  if (keyCode=='6') {
    img=img6;
    vx=-1;}
}
void keyReleased(){
  img=img1;
  vx=0;  
}

加入圖片座標,透過按鍵被按下時的動作來顯示圖片並讓圖片以等速度進行移動。

2020年3月12日 星期四

2020/3/12

這是第一篇的部落格,能夠記錄文字以及圖片,存載著上課的歷程。



(1) 這是用processsing做出的小畫家,只有單純的塗鴉作用。

(2) 新增透過數字鍵改變畫筆的顏色。

(3) 製作新的隕石動畫

int []x={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//陣列,java與c++不同
int []y={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//陣列,隕石的座標
int n=0;//隕石為0顆
void setup(){//設定顯示窗格大小
   size(300,400);
}
void draw(){//一秒畫60次
  background(255);//背景每次都先塗白,把殘影刪掉
  for(int i=0; i<n; i++){
    circle(x[i],y[i],20);//畫圓當隕石
    y[i]+=3;//隕石往下掉
    if(y[i]>=400-10) 
    y[i]=400-10;//減掉圓的半徑
  }
}
void mousePressed(){//如果按下滑鼠
  x[n]=mouseX;//就將你按下的地方當作隕石的座標
  y[n]=mouseY;
  n++;//n用來記錄生成的隕石數量
}

能碰新的軟體,很好玩。


(4) 將隕石動畫新增顏色,可以做出不同顏色的隕石。