2024年1月4日 星期四

Yen Week17

 解決上禮拜的bug

int cols, rows;
int state = 0;
int w = 25;
boolean[][] grid;
int ballX, ballY;
int endX, endY;
boolean startGame = false;
int currentLevel = 1;  // 新增一個變數用來表示當前的關卡
PImage img;
int stepCount = 0;
int maxSteps;
boolean showInstructions = false;
void setup() {
  size(400, 400);
  img = loadImage("blackwhite.jpg");
  cols = floor(width / w);
  rows = floor(height / w);
  grid = new boolean[cols][rows];
  setupMaze();
}
void setupMaze() {
  // 清空舊的迷宮配置
  for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
      grid[i][j] = false;
    }
  }

  // 初始化新的迷宮配置
  if (currentLevel == 1) {
    // 第一關的迷宮配置
    // ...(您的第一關設定)
    maxSteps = 45;
    grid[0][3] = true;
    grid[0][5] = true;
    grid[0][6] = true;
    grid[0][7] = true;
    grid[0][8] = true;
    grid[0][13] = true;
    grid[0][15] = true;
    grid[1][0] = true;
    grid[1][1] = true;
    grid[1][8] = true;
    grid[1][10] = true;
    grid[1][11] = true;
    grid[1][13] = true;
    grid[1][15] = true;
    grid[2][0] = true;
    grid[2][1] = true;
    grid[2][3] = true;
    grid[2][4] = true;
    grid[2][5] = true;
    grid[2][6] = true;
    grid[2][8] = true;
    grid[2][10] = true;
    grid[2][11] = true;
    grid[2][15] = true;
    grid[3][0] = true;
    grid[3][1] = true;
    grid[3][3] = true;
    grid[3][6] = true;
    grid[3][8] = true;
    grid[3][10] = true;
    grid[3][11] = true;
    grid[3][12] = true;
    grid[3][13] = true;
    grid[4][1] = true;
    grid[4][3] = true;
    grid[4][5] = true;
    grid[4][6] = true;
    grid[4][10] = true;
    grid[4][11] = true;
    grid[4][12] = true;
    grid[4][13] = true;
    grid[4][15] = true;
    grid[5][3] = true;
    grid[5][5] = true;
    grid[5][6] = true;
    grid[5][7] = true;
    grid[5][8] = true;
    grid[5][15] = true;
    grid[6][0] = true;
    grid[6][1] = true;
    grid[6][3] = true;
    grid[6][7] = true;
    grid[6][8] = true;
    grid[6][9] = true;
    grid[6][10] = true;
    grid[6][11] = true;
    grid[6][12] = true;
    grid[6][13] = true;
    grid[7][3] = true;
    grid[7][4] = true;
    grid[7][8] = true;
    grid[7][9] = true;
    grid[7][10] = true;
    grid[7][11] = true;
    grid[7][12] = true;
    grid[7][13] = true;
    grid[7][14] = true;
    grid[7][15] = true;
    grid[8][1] = true;
    grid[8][3] = true;
    grid[8][4] = true;
    grid[8][5] = true;
    grid[8][6] = true;
    grid[8][8] = true;
    grid[8][9] = true;
    grid[8][15] = true;
    grid[9][0] = true;
    grid[9][1] = true;
    grid[9][12] = true;
    grid[9][13] = true;
    grid[9][15] = true;
    grid[10][0] = true;
    grid[10][1] = true;
    grid[10][3] = true;
    grid[10][4] = true;
    grid[10][5] = true;
    grid[10][6] = true;
    grid[10][7] = true;
    grid[10][8] = true;
    grid[10][9] = true;
    grid[10][10] = true;
    grid[10][12] = true;
    grid[10][11] = true;
    grid[10][13] = true;
    grid[10][15] = true;
    grid[11][6] = true;
    grid[11][9] = true;
    grid[11][15] = true;
    grid[12][3] = true;
    grid[12][4] = true;
    grid[12][6] = true;
    grid[12][8] = true;
    grid[12][9] = true;
    grid[12][11] = true;
    grid[12][12] = true;
    grid[12][13] = true;
    grid[12][14] = true;
    grid[12][15] = true;
    grid[12][3] = true;
    grid[13][0] = true;
    grid[13][3] = true;
    grid[13][4] = true;
    grid[13][8] = true;
    grid[13][9] = true;
    grid[13][11] = true;
    grid[14][0] = true;
    grid[14][1] = true;
    grid[14][3] = true;
    grid[14][4] = true;
    grid[14][5] = true;
    grid[14][6] = true;
    grid[14][7] = true;
    grid[14][8] = true;
    grid[14][9] = true;
    grid[14][13] = true;
    grid[14][14] = true;
    grid[15][0] = true;
    grid[15][1] = true;
    grid[15][8] = true;
    grid[15][9] = true;
    grid[15][10] = true;
    grid[15][11] = true;
    grid[15][12] = true;
    grid[15][13] = true;
    grid[15][14] = true;
    grid[15][15] = true;
  } else if (currentLevel == 2) {
    // 第二關的迷宮配置
    // ...(您的第二關設定)
    stepCount = 0;//重新設定步數
    maxSteps = 50;
    grid[0][1] = true;
    grid[0][3] = true;
    grid[0][4] = true;
    grid[0][5] = true;
    grid[0][6] = true;
    grid[0][7] = true;
    grid[0][9] = true;
    grid[0][10] = true;
    grid[0][12] = true;
    grid[0][14] = true;
    grid[0][15] = true;
    grid[1][1] = true;
    grid[1][6] = true;
    grid[1][10] = true;
    grid[1][12] = true;
    grid[2][3] = true;
    grid[2][4] = true;
    grid[2][8] = true;
    grid[2][9] = true;
    grid[2][10] = true;
    grid[2][12] = true;
    grid[2][14] = true;
    grid[3][0] = true;
    grid[3][1] = true;
    grid[3][3] = true;
    grid[3][4] = true;
    grid[3][5] = true;
    grid[3][6] = true;
    grid[3][7] = true;
    grid[3][8] = true;
    grid[3][9] = true;
    grid[3][14] = true;
    grid[4][0] = true;
    grid[4][1] = true;
    grid[4][3] = true;
    grid[4][4] = true;
    grid[4][11] = true;
    grid[4][12] = true;
    grid[4][14] = true;
    grid[5][0] = true;
    grid[5][1] = true;
    grid[5][4] = true;
    grid[5][7] = true;
    grid[5][8] = true;
    grid[5][9] = true;
    grid[5][10] = true;
    grid[5][12] = true;
    grid[5][14] = true;
    grid[5][15] = true;
    grid[6][1] = true;
    grid[6][2] = true;
    grid[6][4] = true;
    grid[6][6] = true;
    grid[6][9] = true;
    grid[6][10] = true;
    grid[7][1] = true;
    grid[7][2] = true;
    grid[7][4] = true;
    grid[7][8] = true;
    grid[7][10] = true;
    grid[7][12] = true;
    grid[7][14] = true;
    grid[8][1] = true;
    grid[8][2] = true;
    grid[8][6] = true;
    grid[8][7] = true;
    grid[8][12] = true;
    grid[8][14] = true;
    grid[9][4] = true;
    grid[9][6] = true;
    grid[9][7] = true;
    grid[9][9] = true;
    grid[9][10] = true;
    grid[9][11] = true;
    grid[9][12] = true;
    grid[10][0] = true;
    grid[10][2] = true;
    grid[10][3] = true;
    grid[10][4] = true;
    grid[10][8] = true;
    grid[10][9] = true;
    grid[10][14] = true;
    grid[10][15] = true;
    grid[11][0] = true;
    grid[11][3] = true;
    grid[11][4] = true;
    grid[11][6] = true;
    grid[11][8] = true;
    grid[11][11] = true;
    grid[11][14] = true;
    grid[12][1] = true;
    grid[12][6] = true;
    grid[12][8] = true;
    grid[12][9] = true;
    grid[12][10] = true;
    grid[12][11] = true;
    grid[12][13] = true;
    grid[12][14] = true;
    grid[13][1] = true;
    grid[13][3] = true;
    grid[13][4] = true;
    grid[13][5] = true;
    grid[13][6] = true;
    grid[13][11] = true;
    grid[14][6] = true;
    grid[14][7] = true;
    grid[14][9] = true;
    grid[14][11] = true;
    grid[14][12] = true;
    grid[14][13] = true;
    grid[14][14] = true;
    grid[15][0] = true;
    grid[15][1] = true;
    grid[15][3] = true;
    grid[15][5] = true;
    grid[15][6] = true;
    grid[15][7] = true;
    grid[15][9] = true;
    grid[15][14] = true;
  } else if (currentLevel == 3) {
    // 第三關的迷宮配置
    stepCount = 0;
    maxSteps = 50;
    grid[0][1] = true;
    grid[0][3] = true;
    grid[0][4] = true;
    grid[0][5] = true;
    grid[0][6] = true;
    grid[0][7] = true;
    grid[0][9] = true;
    grid[0][10] = true;
    grid[0][12] = true;
    grid[0][14] = true;
    grid[0][15] = true;
    grid[1][1] = true;
    grid[1][6] = true;
    grid[1][10] = true;
    grid[1][12] = true;
    grid[2][3] = true;
    grid[2][4] = true;
    grid[2][8] = true;
    grid[2][9] = true;
    grid[2][10] = true;
    grid[2][12] = true;
    grid[2][14] = true;
    grid[3][0] = true;
    grid[3][1] = true;
    grid[3][3] = true;
    grid[3][4] = true;
    grid[3][5] = true;
    grid[3][6] = true;
    grid[3][7] = true;
    grid[3][8] = true;
    grid[3][9] = true;
    grid[3][14] = true;
    grid[4][0] = true;
    grid[4][1] = true;
    grid[4][3] = true;
    grid[4][4] = true;
    grid[4][11] = true;
    grid[4][12] = true;
    grid[4][14] = true;
    grid[5][0] = true;
    grid[5][1] = true;
    grid[5][4] = true;
    grid[5][7] = true;
    grid[5][8] = true;
    grid[5][9] = true;
    grid[5][10] = true;
    grid[5][12] = true;
    grid[5][14] = true;
    grid[5][15] = true;
    grid[6][1] = true;
    grid[6][2] = true;
    grid[6][4] = true;
    grid[6][6] = true;
    grid[6][9] = true;
    grid[6][10] = true;
    grid[7][1] = true;
    grid[7][2] = true;
    grid[7][4] = true;
    grid[7][8] = true;
    grid[7][10] = true;
    grid[7][12] = true;
    grid[7][14] = true;
    grid[8][1] = true;
    grid[8][2] = true;
    grid[8][6] = true;
    grid[8][7] = true;
    grid[8][12] = true;
    grid[8][14] = true;
    grid[9][4] = true;
    grid[9][6] = true;
    grid[9][7] = true;
    grid[9][9] = true;
    grid[9][10] = true;
    grid[9][11] = true;
    grid[9][12] = true;
    grid[10][0] = true;
    grid[10][2] = true;
    grid[10][3] = true;
    grid[10][4] = true;
    grid[10][8] = true;
    grid[10][9] = true;
    grid[10][14] = true;
    grid[10][15] = true;
    grid[11][0] = true;
    grid[11][3] = true;
    grid[11][4] = true;
    grid[11][6] = true;
    grid[11][8] = true;
    grid[11][11] = true;
    grid[11][14] = true;
    grid[12][1] = true;
    grid[12][6] = true;
    grid[12][8] = true;
    grid[12][9] = true;
    grid[12][10] = true;
    grid[12][11] = true;
    grid[12][13] = true;
    grid[12][14] = true;
    grid[13][1] = true;
    grid[13][3] = true;
    grid[13][4] = true;
    grid[13][5] = true;
    grid[13][6] = true;
    grid[13][11] = true;
    grid[14][6] = true;
    grid[14][7] = true;
    grid[14][9] = true;
    grid[14][11] = true;
    grid[14][12] = true;
    grid[14][13] = true;
    grid[14][14] = true;
    grid[15][0] = true;
    grid[15][1] = true;
    grid[15][3] = true;
    grid[15][5] = true;
    grid[15][6] = true;
    grid[15][7] = true;
    grid[15][9] = true;
    grid[15][14] = true;
  }
  ballX = 0;
  ballY = 0;
  endX = cols - 1;
  endY = rows - 1;
  grid[ballX][ballY] = false;
  grid[endX][endY] = false;
}

void draw() {
  if(state == 0){
    displayHomePage();
  }
  if (showInstructions) {
    displayInstructions();
  }
  else if (startGame) {
    background(255);
    drawMaze();
    drawBall();
    checkWinCondition();
    displayStepCount();
    fill(255, 0, 0);
    rect(width - 80, height - 30, 70, 25);
    fill(255);
    textAlign(CENTER, CENTER);
    textSize(12);
    text("結束遊戲", width - 45, height - 17.5);
    if (stepCount >= maxSteps) {
      displayGameOver();
      noLoop();  // 停止遊戲循環
    }
  } else {
    displayHomePage();
  }
}
void displayGameOver() {
  fill(255, 0, 0);
  textSize(32);
  textAlign(CENTER, CENTER);
  text("遊戲結束!", width / 2, height / 2 - 20);
  textSize(16);
  text("按一下回到主畫面", width / 2, height / 2 + 20);
}
void displayStepCount() {
  fill(0);
  textSize(16);
  textAlign(LEFT);
  text("步數:" + stepCount, 10, height - 10);  // 顯示步數
}

void displayHomePage() {
  
  background(200);
  fill(0);
  textAlign(CENTER, CENTER);
  PFont myfont=createFont("細明體", 24);
  image(img, 0, 0, width, height);
  textSize(24);
  textFont(myfont);
  fill(155, 155, 155);
  rect(width / 2 - 51, height / 2 - 40, 100, 30);  // 迷宮遊戲格子
  fill(0, 0, 0);
  text("迷宮遊戲", width / 2, height / 2 - 27.5);
  fill(128, 138, 135);
  fill(100, 100, 255);
  rect(width / 2 - 60, height / 2 + 20, 50, 30);  // 第一關按鈕
  fill(255, 100, 100);
  rect(width / 2 + 10, height / 2 + 20, 50, 30);// 第二關按鈕
  fill(255, 255, 0);
  rect(width / 2 -20, height / 2 + 75, 50, 30);
  fill(0);
  textSize(14);
  text("第一關", width / 2 - 35, height / 2 + 35);
  text("第二關", width / 2 + 35, height / 2 + 35);
  text("第三關", width / 2 +  6, height / 2 + 90);
   fill(255, 0, 0);
  rect(width / 2 - 30, height / 2 + 125, 60, 30);  // 遊戲說明按鈕
  fill(255);
  textSize(14);
  text("遊戲說明", width / 2, height / 2 + 140);
}

void drawMaze() {
  for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
      if (grid[i][j]) {
        fill(189, 189, 189);
        noStroke();
        rect(i * w, j * w, w, w);
      }
    }
  }
}

void drawBall() {
  fill(0);
  ellipse(ballX * w + w/2, ballY * w + w/2, w, w);
}

void checkWinCondition() {
  if (ballX == endX && ballY == endY) {
    fill(255, 0, 0);
    ellipse(endX * w + w/2, endY * w + w/2, w, w);
    noLoop();
    println("恭喜你抵達終點!");
    println("總步數:" + stepCount);
    startGame = false; // 重置遊戲狀態
    currentLevel = 1;
    loop();  // 重新啟動遊戲循環,以便後續 draw() 函數能夠正確執行
  }
}


void keyPressed() {
  if (keyCode == UP && ballY > 0 && !grid[ballX][ballY - 1]) {
    ballY--;
    stepCount++;
  } else if (keyCode == DOWN && ballY < rows - 1 && !grid[ballX][ballY + 1]) {
    ballY++;
    stepCount++;
  } else if (keyCode == LEFT && ballX > 0 && !grid[ballX - 1][ballY]) {
    ballX--;
    stepCount++;
  } else if (keyCode == RIGHT && ballX < cols - 1 && !grid[ballX + 1][ballY]) {
    ballX++;
    stepCount++;
    if (stepCount >= maxSteps) {
      gamestopGame();
    }
  }
}
void gamestopGame() {
  println("遊戲結束,步數超過 " + maxSteps + " 步!");
  startGame = false;
  currentLevel = 1;
  loop();
}
void displayInstructions() {
  background(200, 200, 255);  // 顯示遊戲說明的背景色
  fill(0);
  textAlign(CENTER, TOP);
  textSize(18);
  text("迷宮遊戲說明", width / 2, 20);
  textSize(14);
  text("使用方向鍵移動球,目標是將球移動到右下角區域。", width / 2, 50);
  text("每完成一個關卡,你將進入下一個更具挑戰性的關卡。", width / 2, 80);
  text("注意步數限制,嘗試在限定步數內完成關卡。", width / 2, 110);
  text("按 '結束遊戲' 按鈕可以隨時返回主畫面。", width / 2, 140);
  text("點擊開始遊戲以開始挑戰!。", width / 2, 170);
  fill(128, 138, 135);
  rect(width / 2 - 60 , height / 2 + 135, 120, 25);  
  fill(255,255,255);
  text("回上一頁", width / 2, height / 2 + 140);
  fill(0);
  loop();
 if (mousePressed && mouseX > width - 20 && mouseX < width + 30 && mouseY > height + 120 && mouseY < height + 150) {
    state = 0; 
  }
}

void mousePressed() {
  if (!startGame) {

    if (mouseX > width - 80 && mouseX < width - 10 && mouseY > height - 30 && mouseY < height - 5) {
      startGame = false;
      currentLevel = 1;
      loop();  // 重新啟動遊戲循環,以便後續 draw() 函數能夠正確執行
    }
    int i = floor(mouseX / w);
    int j = floor(mouseY / w);

    if (i >= 0 && i < cols && j >= 0 && j < rows) {
      if (grid[i][j]) {
        grid[i][j] = false;
      }
    }
     if (mouseX > width / 2 - 20 && mouseX < width / 2 + 30 && mouseY > height / 2 + 120 && mouseY < height / 2 + 150) {
      showInstructions = true;
    }
    else if (mouseX > width / 2 - 60 && mouseX < width / 2 - 10 && mouseY > height / 2 + 20 && mouseY < height / 2 + 50) {
      startGame = true;
      currentLevel = 1;
      setupMaze();
    } else if (mouseX > width / 2 + 10 && mouseX < width / 2 + 60 && mouseY > height / 2 + 20 && mouseY < height / 2 + 50) {
      startGame = true;
      currentLevel = 2;
      setupMaze();
    } else if (mouseX > width / 2 - 20 && mouseX < width / 2 + 30 && mouseY > height / 2 + 75 && mouseY < height / 2 + 107) {
      startGame = true;
      currentLevel = 3;
      setupMaze();
    }
  } else {
    // 如果遊戲已經開始,且玩家通關,則返回主介面
    startGame = false;
    currentLevel = 1;// 這裡可以調整成您想要返回的主介面的關卡
    loop();  // 重新啟動遊戲循環,以便後續 draw() 函數能夠正確執行
  }
} 

沒有留言:

張貼留言