week11 期中作品計畫
參考資料:
1.https://www.itread01.com/article/1427679542.html
一個長到爆的程式碼,不知道最後能從中參考到多少程式的寫法
2.https://blog.csdn.net/Code__rookie/article/details/103508371
用來參考架構
我們打算先用以下這三張圖做為1到3關的題目,選擇的理由如下
1.選擇這張圖做為第一關的原因是因為這張圖畫面簡單且很容易分辨天空、草地的位置。
2.選擇這張圖做為第二關的原因是因為這張圖雖然也很容易分辨出天空、地面的位置,但畫面明顯比前一張複雜許多,多了夕陽、森林、樹木、道路等擾亂玩家的物件。
3.選擇這張圖做為第三關的原因是因為這張圖很難分辨拼圖在該處的位置,此圖整體的顏色都是以藍色為主,因此只能勉強判斷島嶼是在畫面中間,天空和海洋都是極難判斷的,相信作為最難的第三關能讓不少玩家止步於此。
更 在家試作老師示範程式碼
程式碼如下
```c
PImage imgBig; //印出圖片
PImage [][]imgSmall; //代表會有幾乘幾的拼圖框架出現
PVector [][]coord; //拼圖的座標,用來移動拼圖
void setup(){
size(1200,1000);
imgBig = loadImage("1.jpg");
imgSmall = new PImage[15][20]; //因為圖片太大,所以陣列內數字增加
coord = new PVector[15][20];
for(int i=0;i<15;i++){
for(int j=0;j<20;j++){
imgSmall[i][j] =imgBig.get(150*j,150*i,100,100); //前者兩個數字疑似圖片的位置,後兩者則是顯示視角距離圖片的遠近(實測後這兩個數字最剛好)
coord[i][j]=new PVector(100*j,100*i); //這兩個數字代表拼圖間的間隔,數字越大間距越大,數字越小間距越小
}
}
for(int k=0;k<100;k++){ //此迴圈能隨機改變拼圖位置,而k所寫的數字代表拼圖交換幾次
int i1=int(random(15)),i2=int(random(15));
int j1=int(random(20)),j2=int(random(20));
PVector temp =new PVector(coord[i1][j1].x,coord[i2][j2].y);
coord[i1][j1]=coord[i2][j2];
coord[i2][j2]=temp;
}
}
void draw(){
background(0); //背景顏色改黑,否則要是背景為白的情況下,移動會出現殘影
for(int i=0;i<15;i++){
for(int j=0;j<20;j++){
image(imgSmall[i][j],coord[i][j].x,coord[i][j].y,80,80); //此數字代表拼圖框框的大小,寫80的緣故是為了容易分辨
noFill(); //保證每個位置都有圖片
rect(j*100,i*100,80,80);
}
}
}
int selectedI=-1,selectedJ=-1;
void mousePressed(){ //點擊
int selectI=-1,selectJ=-1;
for(int i=0;i<15;i++){
for(int j=0;j<20;j++){
if(coord[i][j].x<mouseX && mouseX<coord[i][j].x+80 && coord[i][j].y<mouseY && mouseY<coord[i][j].y+80){ //不太理解,只知道x、x+80是指拼圖在該圖片的位置
selectI =i; selectJ=j;
}
}
}
if(selectI!=-1){
selectedI=selectI;
selectedJ=selectJ;
}
}
void mouseDragged(){ //拖曳
if(selectedI!=-1){
coord[selectedI][selectedJ].add(new PVector(mouseX-pmouseX,mouseY-pmouseY));
}
}
void mouseReleased(){
selectedI=-1;
selectedJ=-1;
}
```
沒有留言:
張貼留言