2024年10月14日 星期一

week06 孤高曼波

 1.第一節課上課

舒爾特方格https://fr.wikipedia.org/wiki/Table_de_Schulte

//week06_1_schulte_table01_line_fill_textSize_text_for

void setup(){

  size(500,500);

}

void draw(){

  background(#FFFFF2);

  line(0,100,500,100);

  line(0,200,500,200);

  line(0,300,500,300);

  line(0,400,500,400);

  

  line(100,0,100,500);

  line(200,0,200,500);

  line(300,0,300,500);

  line(400,0,400,500);

  fill(0);//黑色的字

  textSize(50);

  textAlign(CENTER,CENTER);//將字體至中

  for(int y=50;y<=450;y+=100){

    text("1",50,50);

    text("1",150,50);

    text("1",250,50);

    text("1",350,50);

    text("1",450,50);

  }

}

先用畫線的方式以及利用for迴圈來畫數字



//week06_2_schulte_table02_for_for_fill_rect_fill_text

void setup(){

  size(500,500);

  textSize(50);

  textAlign(CENTER,CENTER);

}

void draw(){

  for(int i =0;i<5;i++){

    for(int j=0;j<5;j++){

      fill(255);rect(j*100,i*100,100,100);

      fill(0);text("1",50+j*100,50+i*100);

    }

  }

}

改為利用for迴圈來畫線條以及畫數字


//week06_3_schulte_table03_random_2d_array_table

int [][]table=new int[5][5];//java的陣列宣告

void setup(){

  size(500,500);

  textSize(50);

  textAlign(CENTER,CENTER);

  for(int i=0;i<5;i++){

    for(int j=0;j<5;j++){

      table[i][j] = int(random(1,26));//方法不對,會有重複的、缺漏的

    }

  }

}

void draw(){

  for(int i =0;i<5;i++){

    for(int j=0;j<5;j++){

      fill(255);rect(j*100,i*100,100,100);

      fill(0);text(""+table[i][j],50+j*100,50+i*100);

    }

  }

}

利用隨機亂數(random),陣列(array)來隨機生成數字,但是還不完整可能會有缺漏和重複的


2.第二節上課
//week06_4_schulte_table04_no_repeat_used_array_while
int []used=new int[26];//0...25 共26個
int [][]table=new int[5][5];//java的陣列宣告
void setup(){
  size(500,500);
  textSize(50);
  textAlign(CENTER,CENTER);
  for(int i=0;i<5;i++){
    for(int j=0;j<5;j++){
      int now =  int(random(1,26));
      while(used[now]==1) now = int(random(1,26));
      table[i][j] = now;
      used[now] = 1;
    }
  }
}
void draw(){
  for(int i =0;i<5;i++){
    for(int j=0;j<5;j++){
      fill(255);rect(j*100,i*100,100,100);
      fill(0);text(""+table[i][j],50+j*100,50+i*100);
    }
  }
}
增加新的陣列來讓數字不要重複

//week06_5_schulte_table05_mousePressed_pressed_i_j

int []used=new int[26];//0...25 共26個

int [][]table=new int[5][5];//java的陣列宣告

void setup(){

  size(500,500);

  textSize(50);

  textAlign(CENTER,CENTER);

  for(int i=0;i<5;i++){

    for(int j=0;j<5;j++){

      int now =  int(random(1,26));

      while(used[now]==1) now = int(random(1,26));

      table[i][j] = now;

      used[now] = 1;

    }

  }

}

int [][]pressed = new int [5][5];

void draw(){

  for(int i =0;i<5;i++){

    for(int j=0;j<5;j++){

      if(pressed[i][j]==1)fill(128);

      else fill(255);

      rect(j*100,i*100,100,100);

      fill(0);text(""+table[i][j],50+j*100,50+i*100);

    }

  }

}

void mousePressed(){

  int i = mouseY/100,j=mouseX/100;

  pressed[i][j] = 1;

}

左手I右手J 利用滑鼠按鍵來使點及的方格改變顏色

//week06_6_schulte_table06_int_want_1_if_table_i_j_want

int []used=new int[26];//0...25 共26個

int [][]table=new int[5][5];//java的陣列宣告

void setup(){

  size(500,500);

  textSize(50);

  textAlign(CENTER,CENTER);

  for(int i=0;i<5;i++){

    for(int j=0;j<5;j++){

      int now =  int(random(1,26));

      while(used[now]==1) now = int(random(1,26));

      table[i][j] = now;

      used[now] = 1;

    }

  }

}

int [][]pressed = new int [5][5];

void draw(){

  for(int i =0;i<5;i++){

    for(int j=0;j<5;j++){

      if(pressed[i][j]==1)fill(128);

      else fill(255);

      rect(j*100,i*100,100,100);

      fill(0);text(""+table[i][j],50+j*100,50+i*100);

    }

  }

}

int want=1;

void mousePressed(){

  int i = mouseY/100,j=mouseX/100;

  if(table[i][j]==want){

    pressed[i][j] = 1;

    want++;

  }

}

增加讓點及數字要按照順序來點

//week06_7_schulte_table07_millis

int []used=new int[26];//0...25 共26個

int [][]table=new int[5][5];//java的陣列宣告

void setup(){

  size(500,600);

  textSize(50);

  textAlign(CENTER,CENTER);

  for(int i=0;i<5;i++){

    for(int j=0;j<5;j++){

      int now =  int(random(1,26));

      while(used[now]==1) now = int(random(1,26));

      table[i][j] = now;

      used[now] = 1;

    }

  }

}

int [][]pressed = new int [5][5];

void draw(){

  background(#FFFFF2);

  for(int i =0;i<5;i++){

    for(int j=0;j<5;j++){

      if(pressed[i][j]==1)fill(128);

      else fill(255);

      rect(j*100,i*100,100,100);

      fill(0);text(""+table[i][j],50+j*100,50+i*100);

    }

  }

  text("You used:"+millis()/1000,250,550);

}

int want=1;

void mousePressed(){

  int i = mouseY/100,j=mouseX/100;

  if(table[i][j]==want){

    pressed[i][j] = 1;

    want++;

  }

}

增加計時器


//week06_8_schulte_table08_nf_millis_starT

int []used=new int[26];//0...25 共26個

int [][]table=new int[5][5];//java的陣列宣告

void setup(){

  size(500,600);

  textSize(50);

  textAlign(CENTER,CENTER);

  for(int i=0;i<5;i++){

    for(int j=0;j<5;j++){

      int now =  int(random(1,26));

      while(used[now]==1) now = int(random(1,26));

      table[i][j] = now;

      used[now] = 1;

    }

  }

  starT = millis();

}

int starT = 0;

int [][]pressed = new int [5][5];

void draw(){

  background(#FFFFF2);

  for(int i =0;i<5;i++){

    for(int j=0;j<5;j++){

      if(pressed[i][j]==1)fill(128);

      else fill(255);

      rect(j*100,i*100,100,100);

      fill(0);text(""+table[i][j],50+j*100,50+i*100);

    }

  }

  text("You used:"+nf((millis()-starT)/1000.0,0,1),250,550);

}

int want=1;

void mousePressed(){

  int i = mouseY/100,j=mouseX/100;

  if(table[i][j]==want){

    pressed[i][j] = 1;

    want++;

  }

}

利用nf來增加小數點,後面的0是小數點右邊有幾個0,1是要留小數點後幾位


3.第三節上課程式碼

//week06_9_schulte_table09_mousePressed_crash_if_protect_shuffle_random

//int []used=new int[26];//0...25 共26個

int [][]table=new int[5][5];//java的陣列宣告

void setup(){

  size(500,600);

  textSize(50);

  textAlign(CENTER,CENTER);

  int []numbers = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};

  for(int i = numbers.length - 1;i>0;i--){

    int j=int(random(i+1));

    int temp=numbers[i];

    numbers[i] = numbers[j];

    numbers[j] = temp;

  }

  int index=0;

  for(int i=0;i<5;i++){

    for(int j=0;j<5;j++){

      table[i][j] = numbers[index++];

    }

  }

  starT = millis();

}

int starT = 0;

int [][]pressed = new int [5][5];

void draw(){

  background(#FFFFF2);

  for(int i =0;i<5;i++){

    for(int j=0;j<5;j++){

      if(pressed[i][j]==1)fill(128);

      else fill(255);

      rect(j*100,i*100,100,100);

      fill(0);text(""+table[i][j],50+j*100,50+i*100);

    }

  }

  text("You used:"+nf((millis()-starT)/1000.0,0,1),250,550);

}

int want=1;

void mousePressed(){

  int i = mouseY/100,j=mouseX/100;

  if(table[i][j]==want){

    pressed[i][j] = 1;

    want++;

  }

}

把while改為隨機生成變數使他變得有效率

4.上傳github




沒有留言:

張貼留言