int[][][] maze = {
{
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // 牆壁區域
{1, 0, 0, 1, 1, 0, 0, 0, 1, 1}, // 可通行區域
{1, 1, 0, 1, 1, 1, 1, 0, 1, 1}, // 可通行區域
{1, 1, 0, 0, 0, 0, 1, 0, 1, 1}, // 可通行區域
{1, 0, 1, 1, 0, 1, 1, 0, 1, 1}, // 可通行區域
{1, 0, 1, 1, 0, 0, 0, 0, 1, 1}, // 可通行區域
{1, 0, 0, 0, 0, 1, 1, 0, 1, 1}, // 可通行區域
{1, 0, 1, 1, 1, 1, 1, 0, 1, 1}, // 可通行區域
{1, 0, 0, 0, 0, 0, 1, 0, 0, 1}, // 可通行區域
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // 牆壁區域
},
{
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // 牆壁區域
{1, 0, 1, 1, 0, 0, 1, 0, 0, 1}, // 可通行區域
{1, 0, 0, 0, 0, 1, 1, 0, 1, 1}, // 可通行區域
{1, 0, 1, 1, 0, 0, 0, 0, 0, 1}, // 可通行區域
{1, 0, 1, 1, 0, 1, 1, 0, 1, 1}, // 可通行區域
{1, 0, 1, 1, 0, 1, 0, 0, 1, 1}, // 可通行區域
{1, 0, 1, 1, 0, 0, 1, 0, 0, 1}, // 可通行區域
{1, 0, 1, 1, 0, 1, 1, 1, 0, 1}, // 可通行區域
{1, 0, 1, 0, 0, 0, 0, 1, 0, 1}, // 可通行區域
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // 牆壁區域
},
{
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // 牆壁區域
{1, 0, 0, 0, 0, 1, 0, 0, 0, 1}, // 可通行區域
{1, 1, 1, 1, 0, 1, 0, 1, 0, 1}, // 可通行區域
{1, 0, 0, 0, 0, 1, 0, 1, 0, 1}, // 可通行區域
{1, 0, 1, 1, 1, 1, 0, 1, 0, 1}, // 可通行區域
{1, 0, 0, 0, 0, 1, 0, 1, 0, 1}, // 可通行區域
{1, 1, 1, 1, 0, 1, 0, 1, 0, 1}, // 可通行區域
{1, 0, 0, 0, 0, 1, 0, 1, 0, 1}, // 可通行區域
{1, 1, 1, 1, 0, 0, 0, 1, 0, 1}, // 可通行區域
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // 牆壁區域
},
{
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // 牆壁區域
{1, 0, 1, 0, 0, 0, 0, 0, 0, 1}, // 可通行區域
{1, 0, 1, 0, 1, 1, 1, 1, 0, 1}, // 可通行區域
{1, 0, 1, 0, 1, 0, 0, 0, 0, 1}, // 可通行區域
{1, 0, 1, 0, 1, 0, 1, 1, 1, 1}, // 可通行區域
{1, 0, 1, 0, 1, 0, 0, 0, 0, 1}, // 可通行區域
{1, 0, 1, 0, 1, 1, 0, 1, 0, 1}, // 可通行區域
{1, 0, 1, 0, 1, 0, 0, 0, 0, 1}, // 可通行區域
{1, 0, 0, 0, 1, 1, 0, 1, 0, 1}, // 可通行區域
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, // 牆壁區域
}
};
int startI = 1, startJ = 1, playerI = 1, playerJ = 1, goalI = 8, goalJ = 8; // 起點、終點及玩家初始位置
boolean gameOver = false; // 遊戲是否結束
int next=0;
void setup() {
size(400, 400); // 設定畫面大小
noStroke(); // 不使用邊框
frameRate(15); // 設定更新幀數
}
void draw() {
background(255); // 背景顏色為白色
// 繪製迷宮
for (int i = 0; i < maze[next].length; i++) {
for (int j = 0; j < maze[next][0].length; j++) {
if (maze[next][i][j] == 1) fill(0); // 牆壁使用黑色
else fill(255); // 通道使用白色
rect(j * 40, i * 40, 40, 40); // 每個格子的大小為40x40
}
}
// 繪製起點 (紅色方塊)
fill(255, 0, 0);
rect(startJ * 40, startI * 40, 40, 40);
// 繪製終點 (綠色方塊)
fill(0, 255, 0);
rect(goalJ * 40, goalI * 40, 40, 40);
// 繪製玩家位置 (藍色方塊)
if (!gameOver) {
fill(0, 0, 255);
rect(playerJ * 40, playerI * 40, 40, 40);
}
// 檢查玩家是否到達終點
if (playerI == goalI && playerJ == goalJ && !gameOver) {
gameOver = true; // 設定遊戲結束
}
// 如果遊戲結束,顯示通關畫面
if (gameOver==true) {
displayWinMessage(); // 顯示通關訊息
}
}
// 使用鍵盤按鍵來移動玩家
void keyPressed() {
if (gameOver==true) return; // 如果遊戲結束,不允許移動
if (key == 'w' || key == 'W') movePlayer(-1, 0); // 上移
if (key == 's' || key == 'S') movePlayer(1, 0); // 下移
if (key == 'a' || key == 'A') movePlayer(0, -1); // 左移
if (key == 'd' || key == 'D') movePlayer(0, 1); // 右移
}
// 移動玩家
void movePlayer(int di, int dj) {
int newI = playerI + di;
int newJ = playerJ + dj;
// 檢查新位置是否在迷宮範圍內,並且是通道
if (newI >= 0 && newI < maze[next].length && newJ >= 0 && newJ < maze[next][0].length && maze[next][newI][newJ] == 0) {
playerI = newI; // 更新玩家的垂直位置
playerJ = newJ; // 更新玩家的水平位置
}
}
// 顯示通關訊息
void displayWinMessage() {
fill(255, 0, 0); // 設定文字顏色為黑色
textSize(32); // 設定文字大小d
text("You Win!", 180, 180); // 顯示通關字樣
// 繪製重製按鈕
fill(0, 255, 0); // 設定按鈕顏色為綠色
rect(150, 220, 100, 50); // 按鈕的區域
fill(255); // 設定文字顏色為白色
textSize(16); // 設定文字大小
textAlign(CENTER, CENTER); // 設定文字對齊方式
text("Restart", 200, 245); // 顯示重製文字
fill(255, 0, 0);
rect(150, 270, 100, 50); // 按鈕的區域
fill(255); // 設定文字顏色為白色
textSize(16); // 設定文字大小
textAlign(CENTER, CENTER); // 設定文字對齊方式
text("Next", 200, 295);
}
// 當玩家點擊滑鼠時,檢查是否點擊到重製按鈕
void mousePressed() {
if (gameOver==true && mouseX > 150 && mouseX < 250 && mouseY > 270 && mouseY < 320) {
nextGame(); // 如果點擊到重製按鈕,則重設遊戲
}
if (gameOver==true && mouseX > 150 && mouseX < 250 && mouseY > 220 && mouseY < 270) {
resetGame(); // 如果點擊到重製按鈕,則重設遊戲
}
}
// 重設遊戲
void resetGame() {
playerI = startI; // 重設玩家位置為起點
playerJ = startJ; // 重設玩家位置為起點
gameOver = false; // 設定遊戲狀態為未結束
}
void nextGame() {
next++;
playerI = startI; // 重設玩家位置為起點
playerJ = startJ; // 重設玩家位置為起點
gameOver = false; // 設定遊戲狀態為未結束
if (next>3) {
next = 0;
}
}
沒有留言:
張貼留言