https://math-exercise.johnwu.cc/zh-tw/schulte-table/
舒格爾方格
可以訓練自己的反應能力
作者的github:https://github.com/johnwu1114/math-exercise?tab=readme-ov-file
嘗試自己做做看
///week01_1_schulte_table01_line_fill_teztSize_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, y); text("1", 150, y); text("1", 250, y); text("1", 350, y); text("1", 450, y); } }
上一個的簡化版用for迴圈來畫線///week01_1_schulte_table02_for_for_ 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); } } }
用random()實現隨機抽取但會有重複出現的狀況///week06_3_schulte_table03_random_2d_array_table int [][] table = new int[5][5]; 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); } } }
用上一個程式來改把用過的數字用掉多設一個used陣列///week06_4_schulte_table04_no_repeat_used_array_while int [] used = new int[26]; int [][] table = new int[5][5]; 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); } } }
繼續延續上一個按了讓格子變灰左手i對應的/100就是第幾格j也是同理///week06_5_schulte_table05_mosuePressed_pressed_i_j int [] used = new int[26]; int [][] table = new int[5][5]; 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; }
延續上一個程式想要讓他不能案不連續的所以設一個want變數=1每案對一個就加1///week06_6_schulte_table06_int_want_1_if_table_i_j_want int [] used = new int[26]; int [][] table = new int[5][5]; 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++; } }
加上計時的程式millis()///week06_7_schulte_table07_millis int [] used = new int[26]; int [][] table = new int[5][5]; 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, 200, 550); } int want = 1; void mousePressed(){ int i= mouseY/100, j = mouseX/100; if(table[i][j]==want){ pressed[i][j] = 1; want++; } }
問chatgpt怎麼改成顯示小數mf()能讓小數顯示出來///week06_7_schulte_table07_millis int [] used = new int[26]; int [][] table = new int[5][5]; 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, 3, 1), 200, 550); } int want = 1; void mousePressed(){ int i= mouseY/100, j = mouseX/100; if(table[i][j]==want){ pressed[i][j] = 1; want++; } }
問chatgpt他說可以改得比較有效率提供一個shuffle()但老師可以自己寫出同樣的演算法///week06_9_schulte_table09_mousePressed_crash_if_proctect_shuffle_random int [][] table = new int[5][5]; 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[i]; 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, 3, 1), 200, 550); } int want = 1; void mousePressed() { int i= mouseY/100, j = mouseX/100; if (table[i][j]==want) { pressed[i][j] = 1; want++; } }
沒有留言:
張貼留言