2024年10月28日 星期一

Week08

 1.第一節上課程式碼

//week08_1_int_page_if_page_0_1 遊戲頁面切換

PImage img;

void setup(){

  size(640,480);

  img = loadImage("640x480.png");//圖片

}

int page=0;//0:開場畫面 1:第一關 2:第二關

void draw(){

  if(page==0){

    background(0);

    textSize(70);

    textAlign(CENTER,CENTER);

    text("Opening",320,240);

  }else if(page==1){

    background(img);//小心,圖檔大小,要與size()相同,才能變背景

  }

}

void mousePressed(){

  if(page==0)page = 1;

}

利用滑鼠點擊文字來切換畫面




//week08_2_RPG_background_640_480_rect_32_32

PImage img ;

void setup(){

  size(640,480);//15格=480,480/15=32 小圖

  img = loadImage("640x480.png");

  

}

void draw(){

  background(img);

  for(int i=0;i<15;i++){//高度對應480對應y座標 左手j

    for(int j=0;j<20;j++){//寬度對應640對應x座標 右手j

      noFill();

      rect(j*32,i*32,32,32);//小格子大小事32*32

    }

  }

}

畫出按照整個介面大小的小格子


//week08_3_RPG_PImage_copy_640_480_rect_32_32

PImage img ;

void setup(){

  size(640,480);//15格=480,480/15=32 小圖

  img = loadImage("640x480.png");

  

}

void draw(){

  background(img);

  for(int i=0;i<15;i++){//高度對應480對應y座標 左手j

    for(int j=0;j<20;j++){//寬度對應640對應x座標 右手j

      noFill();

      stroke(0);

      rect(j*32,i*32,32,32);//小格子大小事32*32

    }

  }

  stroke(255,0,0);

  rect(J*32,I*32,32,32);

}

int I = -1,J = -1;

void mouseMoved(){//void Move()移動時要修改I,J

  I = mouseY/32;//小心Y

  J = mouseX/32;//小心X

}

int N=1;//圖檔的編號

void mousePressed(){

  //PImage now;

  //now.copy(img,0,0,640,480,0,0,640,480);

  PImage now = createImage(32,32,RGB);

  now.copy(img,J*32,I*32,32,32,0,0,32,32);

  now.save(N+".png");

  N++;

}

將滑鼠在格子上會直接擷取那格的圖片,加上標註的幾行可以顯示出黨名





2.第二節上課程式碼

//week08_4_RPG_2d_array_floor_map
int [][] floor = {
    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字
    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字
    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字
};
PImage img ;
PImage [] fimg = new PImage[40];
void setup(){
  size(640,480);//15格=480,480/15=32 小圖
  img = loadImage("640x480.png");
  for(int i=1;i<=22;i++)fimg[i] = loadImage(i+".png");
  
}
void draw(){
 // background(img);
  for(int i=0;i<floor.length;i++){//高度對應480對應y座標 左手j
    for(int j=0;j<20;j++){//寬度對應640對應x座標 右手j
      int now = floor[i][j];
      image(fimg[now],j*32,i*32);
    }
   }
  }
利用生成出來的圖片來做編輯地圖



//week08_5_RPG_user_move_userJ_userI_keyPressed

int [][] floor = {

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    

};

PImage img ,user;

PImage [] fimg = new PImage[40];

void setup(){

  size(640,480);//15格=480,480/15=32 小圖

  img = loadImage("640x480.png");

  user = loadImage("15.png");

  for(int i=1;i<=22;i++)fimg[i] = loadImage(i+".png");

  

}

int userI = 12,userJ=15;

void draw(){

 // background(img);

  for(int i=0;i<floor.length;i++){//高度對應480對應y座標 左手j

    for(int j=0;j<20;j++){//寬度對應640對應x座標 右手j

      int now = floor[i][j];

      image(fimg[now],j*32,i*32);

    }

   }

   image(user,userJ*32,userI*32);

  }

void keyPressed(){

  if(keyCode==RIGHT)userJ++;

  if(keyCode==LEFT)userJ--;

  if(keyCode==UP)userI--;

  if(keyCode==DOWN)userI++;

}

將勇者可以利用上下左右按鍵移動

3.第三節上課程式碼

//week08_6_RPG_wall_deterction

int [][] floor = {

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    

};

PImage img ,user;

PImage [] fimg = new PImage[40];

void setup(){

  size(640,480);//15格=480,480/15=32 小圖

  img = loadImage("640x480.png");

  user = loadImage("15.png");

  for(int i=1;i<=22;i++)fimg[i] = loadImage(i+".png");

  

}

int userI = 12,userJ=15;

void draw(){

 // background(img);

  for(int i=0;i<floor.length;i++){//高度對應480對應y座標 左手j

    for(int j=0;j<20;j++){//寬度對應640對應x座標 右手j

      int now = floor[i][j];

      image(fimg[now],j*32,i*32);

    }

   }

   image(user,userJ*32,userI*32);

  }

void keyPressed(){

  int newI = userI,newJ = userJ;

  if(keyCode==RIGHT)newJ++;

  if(keyCode==LEFT)newJ--;

  if(keyCode==UP)newI--;

  if(keyCode==DOWN)newI++;

  if(floor[newI][newJ]!=1&&floor[newI][newJ]!=3){

    userI=newI;

    userJ=newJ;

  }

}


//week08_7_RPG_eat_good

int [][] floor = {

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    

};

PImage img ,user;

PImage [] fimg = new PImage[40];

void setup(){

  size(640,480);//15格=480,480/15=32 小圖

  img = loadImage("640x480.png");

  user = loadImage("15.png");

  for(int i=1;i<=22;i++)fimg[i] = loadImage(i+".png");

  

}

int userI = 12,userJ=15;

void draw(){

 // background(img);

  for(int i=0;i<floor.length;i++){//高度對應480對應y座標 左手j

    for(int j=0;j<20;j++){//寬度對應640對應x座標 右手j

      int now = floor[i][j];

      image(fimg[now],j*32,i*32);

    }

   }

   image(user,userJ*32,userI*32);

   if(gameOver) background(0,255,0);

  }

 boolean gameOver = false;

void keyPressed(){

  int newI = userI,newJ = userJ;

  if(keyCode==RIGHT)newJ++;

  if(keyCode==LEFT)newJ--;

  if(keyCode==UP)newI--;

  if(keyCode==DOWN)newI++;

  if(floor[newI][newJ]!=1&&floor[newI][newJ]!=3){

    userI=newI;

    userJ=newJ;

    if(floor[userI][userJ]==21)gameOver = true;

    floor[userI][userJ] = 2;

  }

}

//week08_8_RPG_show_info

int [][] floor = {

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    

};

PImage img ,user;

PImage [] fimg = new PImage[40];

void setup(){

  size(640,480);//15格=480,480/15=32 小圖

  img = loadImage("640x480.png");

  user = loadImage("15.png");

  for(int i=1;i<=22;i++)fimg[i] = loadImage(i+".png");

  

}

int userI = 12,userJ=15;

void draw(){

 // background(img);

  for(int i=0;i<floor.length;i++){//高度對應480對應y座標 左手j

    for(int j=0;j<20;j++){//寬度對應640對應x座標 右手j

      int now = floor[i][j];

      image(fimg[now],j*32,i*32);

    }

   }

   image(user,16,16);

   textSize(30);

   text("Level: "+level,16,90);

   textSize(20);

   text("Live: "+live,16,140);

   text("Attack: "+attack,16,170);

   text("Defense: "+defense,16,200);

   text("Magic: "+magic,16,230);

   text("exp: "+exp,16,260);

   text("Coins: "+coin,16,290);

   image(user,userJ*32,userI*32);

   if(gameOver) background(0,255,0);

  }

int level = 1,live = 2693,attack=13,defense=16,magic=10,exp=72,coin=72;

boolean gameOver = false;

void keyPressed(){

  int newI = userI,newJ = userJ;

  if(keyCode==RIGHT)newJ++;

  if(keyCode==LEFT)newJ--;

  if(keyCode==UP)newI--;

  if(keyCode==DOWN)newI++;

  if(floor[newI][newJ]!=1&&floor[newI][newJ]!=3){

    userI=newI;

    userJ=newJ;

    if(floor[userI][userJ]==21)gameOver = true;

    floor[userI][userJ] = 2;

  }

}

增加一些背景等級畫面

//week08_9_RPG_attack_mage

int [][] floor = {

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1,19, 3,22, 3,22, 9, 2, 2, 2, 9, 2,16, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    {4, 1, 1, 1, 5, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5},//有20個數字

    

};

PImage img ,user;

PImage [] fimg = new PImage[40];

void setup(){

  size(640,480);//15格=480,480/15=32 小圖

  img = loadImage("640x480.png");

  user = loadImage("15.png");

  for(int i=1;i<=22;i++)fimg[i] = loadImage(i+".png");

  

}

int userI = 12,userJ=15;

void draw(){

 // background(img);

  for(int i=0;i<floor.length;i++){//高度對應480對應y座標 左手j

    for(int j=0;j<20;j++){//寬度對應640對應x座標 右手j

      int now = floor[i][j];

      image(fimg[now],j*32,i*32);

    }

   }

   image(user,16,16);

   textSize(30);

   text("Level: "+level,16,90);

   textSize(20);

   text("HP: "+hp,16,140);

   text("Attack: "+attack,16,170);

   text("Defense: "+defense,16,200);

   text("Magic: "+magic,16,230);

   text("exp: "+exp,16,260);

   text("Coins: "+coin,16,290);

   image(user,userJ*32,userI*32);

   if(gameOver==1) background(0,255,0);

   if(gameOver==2) background(255,0,0);

  }

int level = 1,hp = 2693,attack=13,defense=16,magic=10,exp=72,coin=72;

int gameOver = 0;

void keyPressed(){

  int newI = userI,newJ = userJ;

  if(keyCode==RIGHT)newJ++;

  if(keyCode==LEFT)newJ--;

  if(keyCode==UP)newI--;

  if(keyCode==DOWN)newI++;

  if(floor[newI][newJ]==9){

    if(hp-10<=0)gameOver = 2;

    else {

      hp-=10;

      coin +=10;

      exp+=1;

      userI = newI;

      userJ=newJ;

      floor[userI][userJ]=2;

    }

  }else if(floor[newI][newJ]!=1&&floor[newI][newJ]!=3){

    userI=newI;

    userJ=newJ;

    if(floor[userI][userJ]==21)gameOver = true;

    floor[userI][userJ] = 2;

  }

}


4.上傳github



沒有留言:

張貼留言