2022年1月10日 星期一

WEEK18_介紹一下期末作業好了

 踩怪物遊戲

主畫面

遊戲說明


遊戲內

GameOver


以下是部分程式碼講解
Q:為何要用陣列讀圖片
A:這樣就能用變數控制圖片,方便切換角色動作
String[] imageNames = { "playerR.png", "playerL.png"};//需要的圖片名稱
PImage[] images = new PImage[imageNames.length];//根據上面圖的量來宣告陣列長度
int z=0;//人物初始圖片
for (int i=0; i < imageNames.length; i++){//for迴圈讀圖片
    String imageName = imageNames[i];
    images[i] = loadImage(imageName);
  }
 PImage img = images[z]; // 隨時更新為圖片z(變數z)
  image(img, x, y); // //隨時更新人物位置
  if(!playerdie){
    if(keyright){z=0;x+=vx;}
    if(keyleft) {z=1;x-=vx;}
這樣就可以按右向右(z=0),按左向左(z=1),之後也能增加更多動作


Q:如何存取分數
A:分數是數字,文字檔是文字,你需要把數字(int)轉成字串(String),才能用saveStrings("檔案名稱.txt",宣告為陣列的字串); 來進行儲存。讀取則要將文字檔讀取成宣告為陣列的字串,再將字串轉成數字才行,所以你需要 loadStrings("檔案名稱.txt");。那沒有讀到檔案怎麼辦,只要用if()去控制「沒有檔案就不要存成數字」,就不會有程式錯誤了。
int score,highscore;
String highscoreToText = "";
String[] highscoreRecord = split(highscoreToText, ' ');
  String[] highscoreRecord = loadStrings("highscore.txt");//讀txt
  if(highscoreRecord!=null) highscore = int(highscoreRecord[0]);//有就存
 if(score >= highscore){//如果破紀錄
      highscoreToText = str(highscore);
      highscoreRecord[0] = highscoreToText;
      saveStrings("highscore.txt",highscoreRecord);
      highscore = score;
    }

Q:如何重置遊戲呢?
A:重置,所以要將所有數值都歸為,那就將set()中設置數值的程式碼都複製到reset()中。之後要重置只要呼叫reset()就會重置了。
void reset()
{
  重製玩家
  重製怪物
  重製飛彈
  重製雲
}
但注意,如果你將宣告寫在set()裡,其他人是讀不到的,所以宣告要寫在外面,設定數值才寫在set()裡

Q:按鈕的位置會重疊!
A:用不同的boolean去控制,一個按鈕用一個boolean,這樣位置重疊也不衝突了

void mousePressed() {
  if(rectOver){
    if(state == 0){
      if(helpopen) helpopen=false;
      else helpopen=true;
      Click.rewind();
      Click.play();
    }
  }
  if(restartOver){
    if(playerdie){
      if(state == 1){
        reset();
        Click.rewind();
        Click.play();
      }
    }
  }
  if(backtomenuOver){
    if(playerdie){
      if(state == 1){
        reset();
        state = 0;
        Click.rewind();
        Click.play();
      }
    }
  }
}
這裡是按下滑鼠後的判斷

void update(int x, int y) {
  if ( overRect(181, 350, 150, 60) ) {
    rectOver = true;
  } else {
    rectOver = false;
  }
  if ( overRect(81, 350, 150, 60) ) {
    restartOver = true;
  } else {
    restartOver = false;
  }
  if ( overRect(281, 350, 150, 60) ) {
    backtomenuOver = true;
  } else {
    backtomenuOver = false;
  }
}
這裡判斷滑鼠的位置

boolean overRect(int x, int y, int width, int height)  {
  if (mouseX >= x && mouseX <= x+width && mouseY >= y && mouseY <= y+height) {
    return true;
  }
 else {
    return false;
  }
}
這個用在上面的判斷式中




以上


沒有留言:

張貼留言