ELEVENTH
今天要來做隨機排座位跟畫面轉場,還有一些同學的問題
1.先做出座位的格子,並能夠安排號碼上去(這裡先全用Hello代替)
void setup(){ size(600,500); } void draw(){ background(255); for(int i=0; i<4; i++){ for(int j=0; j<6; j++){ fill(#F5B4B4); rect(j*100, i*100, 100, 100); fill(0); text("Hello", j*100+25, i*100+50); } } }
2.接著利用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++){ for(int j=0; j<6; j++){ fill(#F5B4B4); rect(j*100, i*100, 100, 100); fill(0); text(value[i][j], j*100+25, i*100+50); } } }
註:value陣列的數字會有重複,數字之後要做調整
3.這裡先做2次的數字交換(這邊是13和27交換、26和33交換)
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++){ for(int j=0; j<6; j++){ fill(#F5B4B4); rect(j*100, i*100, 100, 100); fill(0); text(value[i][j], j*100+25, i*100+50); } } } 註:先按照順序印出來再做亂數排列,這裡的k迴圈是先做2次而已,temp則是利用2個不同的數字做交換
4.想做轉場換關卡,這邊是按下滑鼠就會變成紅色
int state=0; //0:white, 1:red, 2:blue void setup(){ size(400,400); textSize(50); } void draw(){ if(state==0){//第0關 white background(255); fill(0); text("Click to Start",80,200); } else if(state==1){//第1關 red background(255,0,0); } else if(state==2){//第2關 blue background(0,0,255); } } void mousePressed(){ if(state==0) state=1; } 註:利用state來實施改變顏色
5.從紅色的關卡換到藍色的關卡
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關 white background(255); fill(0); text("Click to Start",80,200); } else if(state==1){//第1關 red background(255,0,0); fill(255); rect(300, 50, 50, 50); fill(128); rect(x, y, 50, 50); } else if(state==2){//第2關 blue 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; } } 註:利用方塊到達指定位子來判斷並state的值
6.用倒數計時來讓我們能回到前面的關卡
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關 white background(255); fill(0); text("Click to Start",80,200); x=50; } else if(state==1){//第1關 red background(255,0,0); fill(255); rect(300, 50, 50, 50); fill(128); rect(x, y, 50, 50); t=100; } else if(state==2){//第2關 blue(倒數10秒) 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; } }註:用t--來讓100倒數,最後改變到state=0的白色關卡
以下是同學提問的部分
1.想要做籃球機(先做出拋物線跟球)
PImage imgRack; void setup(){ size(400, 600); 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; }
2.做出將球丟出去(記得要加上重力加速度)
PImage imgRack; void setup(){ size(400, 600); 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(){ posX = mouseX; posY = mouseY; flying = false; } void mouseReleased(){ vx = posX-mouseX; vy = posY-mouseY; flying = true; } 註:利用mouseReleased判斷是否要將球丟出去
踩地雷
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){//遇到紅色地雷,附近要+1 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++){ for(int j=0; j<9; j++){ 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); } } } }
貪吃蛇(360版本)
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;
}
沒有留言:
張貼留言