解決上禮拜的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() 函數能夠正確執行 } }
沒有留言:
張貼留言