iT邦幫忙

2024 iThome 鐵人賽

0
生成式 AI

人人都是工程師的時代來臨了嗎?!系列 第 31

D31 分關處理、主頁整修 (系列完結!)

  • 分享至 

  • xImage
  •  

上面三關改好,接下來改第四關(第五關目前沒想法,讓他跟第一關長一樣就好)

一樣先貼第一關、改關卡內容相關function、搜尋1把需要的改成4
給大家看第四關任務部份

    // 第四關任務設置
    const levelConfig4 = {
        missions: [
            { 
                point: { x: 100, y: 200 }, 
                type: 'provide-password', 
                password: '秘密密碼', 
                message: '你獲得了通關密語!',
                imageUrl: '/images/DSC_8737.JPG'  // 圖片背景
            },
            { 
                point: { x: 200, y: 300 }, 
                type: 'input-password', 
                prompt: '請輸入通關密語:', 
                correctPassword: '秘密密碼',
                imageUrl: '/images/DSC_0286.JPG'  // 圖片背景
            },
            { 
                point: { x: 300, y: 400 }, 
                type: 'default', 
                message: '這是無效的任務點。',
                imageUrl: '/images/DSC_0288.JPG'  // 圖片背景
            }
        ],
        type: 'custom-mission'
    };

    // 碰撞檢測
    function checkCollisionWithMissions(x, y) {
        const levelData = levelConfig4;

        if (levelData) {
            levelData.missions.forEach((mission) => {
                const { point, type } = mission;
                const distance = Math.sqrt((x - point.x) ** 2 + (y - point.y) ** 2);

                if (distance < 40) {
                    switch (type) {
                        case 'provide-password':
                            handleProvidePasswordMission(mission);
                            break;
                        case 'input-password':
                            handleInputPasswordMission(mission);
                            break;
                        case 'default':
                        default:
                            showDialogue(mission.message || '你碰到了任務點!', mission.imageUrl);
                            break;
                    }
                }
            });
        }
    }

    // 處理提供通關密語的任務
    function handleProvidePasswordMission(mission) {
        playerPassword = mission.password;
        showDialogue(mission.message || '你獲得了一條密語!', mission.imageUrl);
    }

    // 處理輸入通關密語的任務
    function handleInputPasswordMission(mission) {
        const input = prompt(mission.prompt);
        if (input === mission.correctPassword && playerPassword !== '') {
            showDialogue('密語正確,通關!', mission.imageUrl);
        } else {
            showDialogue('密語錯誤或你尚未獲得密語,請再試一次!', mission.imageUrl);
        }
    }

超長ㄉ
先測試
https://ithelp.ithome.com.tw/upload/images/20241007/20111174oCRtwZ4m6l.pnghttps://ithelp.ithome.com.tw/upload/images/20241007/20111174UZHwCqIt33.pnghttps://ithelp.ithome.com.tw/upload/images/20241007/20111174KJQV45v1Vm.png
功能一次到位!

接下來加入圖片url、許願alert改對話框,上chatGPT統整全檔
https://ithelp.ithome.com.tw/upload/images/20241007/20111174GBBx3lcLAA.png

這次code比較長,學乖了要先檢查
東西一長chatGPT就容易弄丟東西
然後讀到不懂就問
https://ithelp.ithome.com.tw/upload/images/20241007/201111747yzowlY6G0.pnghttps://ithelp.ithome.com.tw/upload/images/20241007/20111174O7lk1LNK8L.png
好像不該問他是什麼,因為其實我知道
這樣會不會浪費額度(?

目前成品
https://ithelp.ithome.com.tw/upload/images/20241007/20111174YxUt6it1Z0.png
狀態:笨呱(暫時放棄,修好了會通知大家?

來去修主頁
目前主頁狀態:不管到第幾關,出來都跳回第一關
https://ithelp.ithome.com.tw/upload/images/20241007/20111174sMNU8wzpyG.png
丟的code太長就會自動跳回英文

修改主頁JS檔,順便把主頁用不到的東西刪光
https://ithelp.ithome.com.tw/upload/images/20241007/20111174mX2LUB89Zv.png
測試一下,所有關卡運作正常,而且出來不會跳回第一關了!
https://ithelp.ithome.com.tw/upload/images/20241007/20111174IBqCoYEvPc.png

附一下他生給我的code

// Save current level before entering a level
enterLevelBtn.addEventListener('click', () => {
    localStorage.setItem('currentLevel', currentLevel);  // Save current level to localStorage
    window.location.href = `level${currentLevel+1}.html`;
    isLevelActive = 1;
});

// Load saved level progress when the page loads
window.addEventListener('load', () => {
    const savedLevel = localStorage.getItem('currentLevel');
    if (savedLevel !== null) {
        currentLevel = parseInt(savedLevel, 10);  // Retrieve and set the current level
    }
    updateCharacterPosition();  // Move the character to the saved position
});

// Character movement between levels
function moveCharacterToNextCheckpoint() {
    const startLength = currentLength;
    const endLength = pathLength / (totalLevels - 1) * currentLevel;
    const duration = 1000;
    const step = 10;
    let progress = 0;

    const interval = setInterval(() => {
        progress += step;
        const t = progress / duration;
        const currentPosLength = startLength + (endLength - startLength) * t;
        const point = path.getPointAtLength(currentPosLength);
        character.setAttribute('x', point.x - 20);
        character.setAttribute('y', point.y - 20);

        if (progress >= duration) {
            clearInterval(interval);
            currentLength = endLength;
            updateCharacterPosition();
        }
    }, step);
}

接下來是關卡通關和主頁下一關按鈕顯示的對接
上一版有做,碰到任務點回主頁後「下一關」才會出現
現在是無條件通行,但之後要試著把邏輯加回來
主頁JS檔和各關應該不太互通,所以跟第四關一起留著之後慢慢弄...

先來做個系列完結ㄌ!
先說,廢文我剛剛都標示起來了,可以直接略過!
廢文就是沒實際進度的部分

首先
感謝鐵人賽給我每天回來debug的動力!!
我覺得當初參賽一部份也是為了這個
為了一直寫文有進度,幾乎每天都會想回來碰一下
超重要ㄉ

而且 chatGPT是真的很強欸
雖然標題真的是在唬爛,我做這將近4週,資工系同學應該不用幾天
而且只要長一點的問題,chatGPT 很容易被生成方式限制住,亂回一通
所以工程師還是沒那麼快被取代,不用擔心(?

然後很慶幸我的專題看起來真的交的出來啦
雖然本人沒有美感,chatGPT也沒有,導致現在的主頁依然超醜
不過偷偷說聲,裡面用的照片都我自己拍的!貓貓鴨鴨們有沒有超可愛!

之後如果整個版本做完,還記得的話會上來更新...吧
最後祝大家期中順利!!(灑花~~


上一篇
D30 分關卡設置!(小結)
系列文
人人都是工程師的時代來臨了嗎?!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言