2017年10月23日 星期一

Week06 是賴小沫的

✎期中作品製作示範

👀爆爆王

void setup(){
  size(850,500);
}
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==' ') {
    waterI[waterN]=userI;
    waterJ[waterN]=userJ;
    waterN++;
  }
}

按下左上角的三角形Ctrl+R,即可執行看結果

👀鱷魚牙齒遊戲

int bad=0;
int [] all=new int [18];
void setup(){
  size(500,500);
  bad=int(random(18));
  all[bad]=1;
  println(bad);
}
boolean bGameOver=false;
void draw(){
  if(bGameOver){
    background(255,0,0);
    return;
  }
  background(255);
  fill(0,155,0);
  ellipse(250,250,300,300);
  //畫出上排牙齒
  for(int i=0;i<9;i++){
    if(all[i]==-1) continue;
    fill(255);
    rect(110+i*30,200,30,30);
    if(110+i*30<mouseX && mouseX<110+i*30+30 && 200<mouseY && mouseY <200+30){
      fill(0);
      rect(110+i*30,200,30,30);
      //判斷是否為壞掉的牙齒
      if(mousePressed && all[i]!=1) all[i]=-1;
      if(mousePressed && all[i]==1) bGameOver=true;
    }
  }
  //畫出下排牙齒
  for(int i=0;i<9;i++){
    if(all[i+9]==-1) continue;
    fill(255);
    rect(110+i*30,300,30,30);
    if(110+i*30<mouseX && mouseX<110+i*30+30 && 300<mouseY && mouseY <300+30){
      fill(0);
      rect(110+i*30,300,30,30);
      //判斷是否為壞掉的牙齒
      if(mousePressed && all[i+9]!=1) all[i+9]=-1;
      if(mousePressed && all[i+9]==1) bGameOver=true;
    }
  }
}

按下左上角的三角形Ctrl+R,即可執行看結果




👀採礦遊戲(?

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));  //PI=3.1415926...
  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;
}

按下左上角的三角形Ctrl+R,即可執行看結果


👀小精靈

void setup(){
  size(600,400);
}
float open=1,angle=0;
int now=0;
float pacX=300,pacY=200;
int dirX=0,dirY=0;
void draw(){
  background(0);
  fill(255,255,0);
  arc(pacX,pacY,30,30,0+angle+open,PI*2+angle-open); //畫扇形
  pacX+=dirX;
  pacY+=dirY;
  now++;
  open=abs((now%60)/60.0-0.5);
}
void keyPressed(){
  //上下左右控制方向
  if(keyCode==UP){ dirX=0; dirY=-1; angle=radians(270);}  //radians(); 弧度(角度數值);
  if(keyCode==DOWN){ dirX=0; dirY=1; angle=radians(90);}
  if(keyCode==LEFT){ dirX=-1; dirY=0; angle=radians(180);}
  if(keyCode==RIGHT){ dirX=1; dirY=0; angle=0;}
}

👀貓抓老鼠

void setup(){
  size(500,800);
  for(int i=0;i<100;i++){
    //亂數產生老鼠的位置
    ratX[i]=100+int(random(3))*150;  //random(3); 產生亂數
    ratY[i]=-random(8000);

  }
}
float []ratX=new float[100];
float []ratY=new float[100];
int score=0;
void draw(){
  background(255,255,0);
  fill(255); ellipse(100,100,100,50);
  fill(255); ellipse(250,100,100,50);
  fill(255); ellipse(400,100,100,50);
  fill(255,0,0); textSize(50); text("Score:"+score,100,100);
  for(int i=0;i<100;i++){
    fill(80); ellipse(ratX[i],ratY[i],50,50);
    ratY[i]+=2;
    //判斷老鼠與滑鼠之間的距離
    if(dist(mouseX,mouseY,ratX[i],ratY[i])<25){
      ratY[i]=-random(8000);
      score+=100;
    }

  }
}

按下左上角的三角形Ctrl+R,即可執行看結果

👀圖片拼圖

int [][]puzzle=new int[20][20];  //存放真實答案
int [][]touch=new int[20][20];  //記錄滑鼠點擊
void setup(){
 size(600,800);
}
boolean bGenerator=true;  //判斷目前模式
void draw(){
  background(255);
  if(bGenerator){  //設計關卡
    for(int i=0;i<20;i++){
      for(int j=0;j<20;j++){
        if(puzzle[j][i]==0) fill(128);
        else fill(255);

        rect(100+15*j,100+15*i,15,15);
      }
    }
  }
  else{  //判斷遊戲過程正確或錯誤
    for(int i=0;i<20;i++){
      for(int j=0;j<20;j++){
        if(touch[j][i]==0) fill(200);
        else if(puzzle[j][i]==0&& touch[j][i]==1)fill(0,255,0);
        else if(puzzle[j][i]==1&& touch[j][i]==1)fill(255,0,0);

        rect(100+15*j,100+15*i,15,15);
      }
    }
  }
}
void mouseDragged(){
  int i=int((mouseY-100)/15);
  int j=int((mouseX-100)/15);
  if(bGenerator){
    puzzle[j][i]=1;
  }
  else{
    touch[j][i]=1;
  }
}
void keyPressed(){
  //切換模式
  if(key=='g'){
    bGenerator=!bGenerator;
  }

}

按下左上角的三角形Ctrl+R,即可執行看結果

🌟設計關卡模式

🌟遊戲模式

沒有留言:

張貼留言