2023年11月23日 星期四

Week11 啟動

 Week11


--------------------------------------------------------------------------------------------------------------------------------

1.先畫出4*6的方格,並在裡面填色和填字

void setup(){
  size(600,400);
}
void draw(){
  background(255);
  for(int i=0;i<4;i++){//y
    for(int j=0;j<6;j++){//x
      fill(#F5B4B4); rect(j*100,i*100,100,100);
      fill(0); text("Hello",j*100+25,i*100+50);
    }
  }
}



2.再新增一個迴圈,讓格子內隨機填充24個數字

void setup(){
  size(600,500);
  for(int i=0;i<4;i++){
    for(int j=0;j<6;j++){
      value[i][j]=int(random(40));
    }
  }
}
int [][]value=new int[4][6];
void draw(){
  background(255);
  for(int i=0;i<4;i++){//y
    for(int j=0;j<6;j++){//x
      fill(#F5B4B4); rect(j*100,i*100,100,100);
      fill(0); text(value[i][j],j*100+25,i*100+50);
    }
  }
}


3.先挑一個i、j,接著進行洗牌

void setup(){
  size(600,500);
  for(int i=0;i<4;i++){
    for(int j=0;j<6;j++){
      value[i][j]=i*6+j+10;//從10開始,數字不重複
    }
  }
  for(int k=0;k<2;k++){
    int i=int(random(4)),j=int(random(6));
    int i2=int(random(4)),j2=int(random(6));
    int temp=value[i][j];
    value[i][j]=value[i2][j2];
    value[i2][j2]=temp;
  }
}
int [][]value=new int[4][6];
void draw(){
  background(255);
  for(int i=0;i<4;i++){//y
    for(int j=0;j<6;j++){//x
      fill(#F5B4B4); rect(j*100,i*100,100,100);
      fill(0); text(value[i][j],j*100+25,i*100+50);
    }
  }
}



4.在視窗中間填字,同時加了點擊滑鼠可以讓視窗變色的功能

int state=0;//0:white 1:red 2:blue
void setup(){
  size(400,400);
  textSize(50);
}
void draw(){
  if(state==0){//第0關 白色 
    background(255);
    fill(0); text("Click to start",80,200);
    
  }else if(state==1){//第1關 紅色
    background(255,0,0);
    
  }else if(state==2){//第二關 藍色
    background(0,0,255);
  }
}
void mousePressed(){
  if(state==0) state=1;
}



5.新增第二關,在視窗上加了一個灰色和一個白色的方塊,灰色方塊可以透過鍵盤移動,當2色方塊百分百重疊時算做通關,同時視窗也會變藍色

int state=0;//0:white 1:red 2:blue
void setup(){
  size(400,400);
  textSize(50);
}
int x=50,y=50;
void draw(){
  if(state==0){//第0關 白色 
    background(255);
    fill(0); text("Click to start",80,200);
    
  }else if(state==1){//第1關 紅色
    background(255,0,0);
    fill(255); rect(300,50,50,50);
    fill(128); rect(x,y,50,50);
    
  }else if(state==2){//第二關 藍色
    background(0,0,255);
  }
}
void mousePressed(){
  if(state==0) state=1;
}
void keyPressed(){//鍵盤移動
  if(state==1&&keyCode==RIGHT){
    x+=10;
    if(x==300) state=2;
  }
}


6.在第2關變為藍色視窗那部分做變動(新增t變數),關卡通關視窗變成藍色時會進入倒數計時,

計時結束後會返回第0關

int state=0;//0:white 1:red 2:blue
void setup(){
  size(400,400);
  textSize(50);
}
int x=50,y=50,t=100;
void draw(){
  if(state==0){//第0關 白色 
    background(255);
    fill(0); text("Click to start",80,200);
    x=50;
    
  }else if(state==1){//第1關 紅色
    background(255,0,0);
    fill(255); rect(300,50,50,50);
    fill(128); rect(x,y,50,50);
    t=100;
    
  }else if(state==2){//第二關 藍色
    background(0,0,255);
    fill(255,255,0);text("Wait"+t,80,200);
    t--;
    if(t==0) state=0;
  }
}
void mousePressed(){
  if(state==0) state=1;
}
void keyPressed(){
  if(state==1&&keyCode==RIGHT){
    x+=10;
    if(x==300) state=2;
  }
}

7.籃球遊戲試做,

PImage imgRack;
void setup(){
  size(300,300);
  imgRack=loadImage("rack.jpg");
}
void draw(){
  background(255);
  image(imgRack,0,0);
  if(mousePressed){
    fill(255); ellipse(posX,posY,20,20);
    line(posX,posY,mouseX,mouseY);
  }
  fill(#FFA652); ellipse(mouseX,mouseY,20,20);
}
float posX=-100,posY=-100;
void mousePressed(){
  posX=mouseX;
  posY=mouseY;
}

8.新增單純點擊滑鼠球會往下掉,以及點擊滑鼠後長按再放開可以把球射出去

PImage imgRack;
void setup(){
  size(400,400);
  imgRack=loadImage("rack.jpg");
}
void draw(){
  background(255);
  image(imgRack,0,0);
  if(flying){
    x+=vx;
    y+=vy;
    vy+=0.98;
  }else{
    x=mouseX;
    y=mouseY;
  if(mousePressed){
    fill(255); ellipse(posX,posY,20,20);
    line(posX,posY,x,y);
    }
  }
  fill(#FFA652); ellipse(x,y,20,20);
}
boolean flying=false;
float x,y,vx,vy;
float posX=-100,posY=-100;
void mousePressed(){
  x=posX=mouseX;
  y=posY=mouseY;
  flying=false;
}
void mouseReleased(){
  vx=posX-mouseX;
  vy=posY-mouseY;
  flying=true;
}

ex.踩地雷
int[][] mine = new int[9][9];

void setup() {
  size(450, 450);
  
  // 初始化地雷陣列
  for (int i = 0; i < 9; i++) 
    mine[i][0] = 9;

  // 隨機交換地雷位置
  for (int k = 0; k < 1000; k++) {
    int i = int(random(9)), j = int(random(9));
    int i2 = int(random(9)), j2 = int(random(9));
    int temp = mine[i][j];
    mine[i][j] = mine[i2][j2];
    mine[i2][j2] = temp;
  }

  // 設置地雷數字
  for (int i = 0; i < 9; i++) {
    for (int j = 0; j < 9; j++) {
      if (mine[i][j] == 9) {
        addNumber(i - 1, j - 1);
        addNumber(i - 1, j);
        addNumber(i - 1, j + 1);
        addNumber(i, j - 1);
        addNumber(i, j);
        addNumber(i, j + 1);
        addNumber(i + 1, j - 1);
        addNumber(i + 1, j);
        addNumber(i + 1, j + 1);
      }
    }
  }
}

void addNumber(int i, int j) {
  if (i < 0 || j < 0 || i >= 9 || j >= 9) 
    return;  // 超過範圍 不做事
  if (mine[i][j] != 9) 
    mine[i][j]++;
}

void draw() {
  for (int i = 0; i < 9; i++) {  // y
    for (int j = 0; j < 9; j++) {  // x
      if (mine[i][j] == 9) 
        fill(255, 128, 128);
      else 
        fill(255);
      rect(j * 50, i * 50, 45, 45);

      if (mine[i][j] != 0) {
        fill(0); 
        text("" + mine[i][j], j * 50 + 23, i * 50 + 23, 45, 45);
      }
    }
  }
}



沒有留言:

張貼留言