第一節課
1. 有一個老師能不能寫一個程式隨機點名,但隨機可能會重複,所以用亂數排序的就不會
2. 有同學想要學怎麼轉場和切換關卡等等,那我們這周就來學看看!!
第一個小程式week11_1_random_seat
先做一個陣列,把學生座位畫出來,並在每個框的中間印上
void setup(){ size(600,500); } 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); } } }
第二個小程式week11_2_random_seat_array_value
加入陣列,在座位上的文字標上亂數
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); } } }
第三個小程式week11_3_random_seat_array_value_swap
上面亂數決定有可能會重複出現,所以我們先把數值都準備好,然後再做隨機排序(交換)
從10開始照順序坐
做隨機交換
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<20;k++){///做20次交互換 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); } } }
第二節課
第四個小程式week11_4_many_states
接下來,處理同學的問題,想要切換關卡,我們先準備很多關卡狀態state
int state = 0; void setup(){ size(400,400); textSize(50); } void draw(){ if(state==0){//第0關,白色 background(255); }else if(state==1){//第1關,紅色 background(255,0,0); }else if(state ==2){//第2關,藍色 background(0,0,255); } }
第五個小程式week11_5_many_states_mousePreessed
按下滑鼠的時候,跳到第一關
int state = 0; 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){//第2關,藍色 background(0,0,255); } } void mousePressed(){ if(state==0)state=1; else if(state==1)state=2; }
第六個小程式week11_6_many_states_mousePreessed_keyPreesed
當第一關灰色方塊走到白色方塊疊在一起,過關跳到第二關
int state = 0; 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);//灰色的方塊移動X,Y當座標
}else if(state ==2){//第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; } }
第七個小程式week11_7_many_states_mousePreessed_keyPreesed_millis
第三關是設定時間倒數,時間到跳回第一關
int state = 0; 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;//把時間設定回100,這樣就能一直玩}else if(state ==2){//第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; } }
***同學的問題***
week11_8_basketball_shoot_curve
按下滑鼠拉出弓箭
PImage imgRack; int state = 0; void setup(){ size(500,500); imgRack = loadImage("rack.png"); } void draw(){ background(255); image(imgRack,0,0); if(mousePressed){ fill(255);ellipse(posX,posY,20,20); line(posX,posY,mouseX,mouseY); } fill(#FFA625);ellipse(mouseX,mouseY,20,20); } float posX=-100, posY=-100; void mousePressed(){ posX = mouseX; posY = mouseY; }
week11_9_basketball_shoot_curve_2
滑鼠放開,球就飛出去了,還加上了拋物線(我沒調圖片大小)
PImage imgRack; int state = 0; void setup(){ size(500,500); imgRack = loadImage("rack.png"); } 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(){ posX = mouseX; posY = mouseY; flying = false; } void mouseReleased(){ vx = posX-mouseX; vy = posY-mouseY; flying = true; }week11_A_basketball_shoot_curve_keyPressed_pause暫停PImage imgRack; int state = 0; void setup(){ size(500,500); imgRack = loadImage("rack.png"); } boolean gameOver=false; void keyPressed(){ gameOver = true;///在某個狀態下,game over } void draw(){ background(255); image(imgRack,0,0); if(flying){ if(!gameOver){ 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(){ posX = mouseX; posY = mouseY; flying = false; } void mouseReleased(){ vx = posX-mouseX; vy = posY-mouseY; flying = true; }week11_A_basketball_shoot_curve_keyPressed_pauseweek11_C_snake_360_direction貪吃蛇
void setup(){ size(600,400); } float x=300,y=200,dir=0; void draw(){ //background(0); joker(x,y,dir); x+=cos(dir); y+=sin(dir); } void joker(float x,float y,float dir){ ellipse (x,y,50,50); line (x,y,x+25*cos(dir),y+25*sin(dir)); } void keyPressed(){ if(keyCode==RIGHT) dir+=0.1; if(keyCode==LEFT)dir -= 0.1; }




沒有留言:
張貼留言