{"id":646331,"student_id":3760,"content":"// 初始化需要的音樂、背景與角色\ncreateSound('bgm.mp3'); // 背景音樂\nsetBackdrop(\"bg.jpg\"); // 遊戲背景\ncreateSprite(\"board.png\"); // 血量表\nlet p1 = createSprite(\n \"otter_0.png\", \"otter_1.png\", \n \"otter_2.png\", \"otter_3.png\", \"otter_4.png\"); // 左邊玩家角色\nlet p2 = createSprite(\n \"koding_0.png\", \"koding_1.png\", \n \"koding_2.png\", \"koding_3.png\", \"koding_4.png\"); // 右邊玩家角色\nlet weapon = createSprite(\"twig.png\", \"shell.png\"); // 武器角色\nlet hint = createSprite(\"tutorial.jpg\"); // 遊戲提示角色\n\n// 初始化需要的變數\nlet p1_hp = 400; // 左邊玩家血量值\nlet p2_hp = 400; // 右邊玩家血量值\nlet p1_power = 0; // 左邊玩家蓄力值\nlet p2_power = 0; // 右邊玩家蓄力值\nlet vx = 0; // 武器水平移動速度值\nlet vy = 0; // 武器垂直移動速度值\nlet wind = 0; // 風速值\nlet gameStatus = 0; // 遊戲狀態,初始狀態為 0\n\n/*【學習】gameStatus 遊戲狀態表\n\n| gameStatus 遊戲狀態 | 意義 |\n| ------------------- | ---------------- |\n| 0 | 遊戲尚未開始 |\n| ------------------- | ---------------- |\n| 1 | 左邊玩家待命 |\n| 2 | 左邊玩家蓄力 |\n| 3 | 左邊玩家投出 |\n| ------------------- | ---------------- |\n| 4 | 右邊玩家待命 |\n| 5 | 右邊玩家蓄力 |\n| 6 | 右邊玩家投出 |\n| ------------------- | ---------------- |\n\n*/\n\n// 初始化左邊玩家的位置\np1.x = 200;\np1.y = 700;\n// 初始化右邊邊玩家的位置\np2.x = 1000;\np2.y = 700;\n\n// 遊戲一開始先移動武器到左邊玩家位置\nweapon.x = p1.x;\nweapon.y = p1.y;\n// 隱藏武器\nweapon.hidden = true;\n// 顯示遊戲提示\nhint.hidden = false;\n\n// 【學習】按下滑鼠時執行 mouseDown 函式\n// 監聽按下滑鼠的事件發生後,需要執行 mouseDown 函式\n// 【學習】放開滑鼠時執行 mouseUp 函式\n// 監聽放開滑鼠的事件發生後,需要執行 mouseUp 函式\n\n// 【學習】按下滑鼠後要執行的事項\nfunction mouseDown () {\n // 【學習】如果遊戲狀態為「左邊玩家待命」\n if (/* 若遊戲狀態為「左邊玩家待命」的代號 */) {\n // 【學習】設定遊戲狀態為「左邊玩家蓄力」\n // 設定遊戲狀態為「左邊玩家蓄力」的代號\n }\n // 如果遊戲狀態為「右邊玩家待命」\n if (gameStatus === 4) {\n // 設定遊戲狀態為「右邊玩家蓄力」\n gameStatus = 5;\n }\n}\n\n// 【學習】放開滑鼠後要執行的事項\nfunction mouseUp () {\n // 【學習】如果遊戲狀態為「左邊玩家蓄力」\n if (/* 若遊戲狀態為「左邊玩家蓄力」的代號 */) {\n // 【學習】設定遊戲狀態為「左邊玩家投出」\n // 設定遊戲狀態為「左邊玩家投出」的代號\n \n // 設定目前武器垂直移動速度值為左邊玩家蓄力值*-1\n vy = -p1_power;\n // 設定目前武器水平移動速度值為左邊玩家蓄力值\n vx = p1_power;\n // 隱藏武器\n weapon.hidden = false;\n // 播放投擲音效\n createSound('throw.wav');\n }\n \n // 如果遊戲狀態為「右邊玩家蓄力」\n if (gameStatus === 5) {\n // 設定遊戲狀態為「右邊玩家投出」\n gameStatus = 6;\n // 設定目前武器垂直移動速度值為右邊玩家蓄力值*-1\n vy = -p2_power;\n // 設定目前武器水平移動速度值為左邊玩家蓄力值*-1\n vx = -p2_power;\n // 隱藏武器\n weapon.hidden = false;\n // 播放投擲音效\n createSound('throw.wav');\n }\n}\n\n// 【學習】執行遊戲各動作功能的主迴圈函式\nfunction loop () {\n // 【學習】如果遊戲狀態為「遊戲尚未開始」\n if (/* 若遊戲狀態為「遊戲尚未開始」的代號 */) {\n // 顯示遊戲開始提示\n drawText(\"按下空白鍵開始遊戲\", 277, 755, \"grey\", 70);\n drawText(\"按下空白鍵開始遊戲\", 275, 753, \"black\", 70);\n \n // 【學習】如果鍵盤空白鍵被按下\n if (/* 若 key 的 space 屬性等於 true */) {\n // 【學習】設定遊戲狀態為「左邊玩家待命」\n // 設定遊戲狀態為「左邊玩家待命」的代號\n \n // 隱藏遊戲提示角色\n hint.hidden = true;\n }\n }\n \n // 【學習】如果遊戲狀態為「左邊玩家蓄力」\n if (/* 若遊戲狀態為「左邊玩家蓄力」的代號 */) {\n // 【學習】設定左邊玩家的造型至準備投擲造型\n // 將 p1 的 costumeId 屬性設定為 1\n }\n // 【學習】如果遊戲狀態為「左邊玩家蓄力」,而且左邊玩家蓄力值小於 40\n if (/* 若遊戲狀態為「左邊玩家蓄力」的代號,而且 p1_power 小於 40 */) {\n // 增加 1 至左邊玩家蓄力值\n p1_power += 1;\n }\n \n // 【學習】如果遊戲狀態為「左邊玩家投出」\n if (/* 若遊戲狀態為「左邊玩家投出」的代號 */) {\n // 【學習】設定左邊玩家的造型至投出造型\n // 將 p1 的 costumeId 屬性設定為 2\n }\n \n // 如果遊戲狀態為「右邊玩家蓄力」\n if (gameStatus === 5) {\n // 設定右邊玩家的造型至準備投擲造型\n p2.costumeId = 1;\n }\n // 如果遊戲狀態為「右邊玩家蓄力」,而且右邊玩家蓄力值小於 40\n if (gameStatus === 5 \u0026\u0026 p2_power \u003c 40) {\n // 增加 1 至右邊玩家蓄力值\n p2_power += 1;\n }\n // 如果遊戲狀態為「右邊玩家投出」\n if (gameStatus === 6) {\n // 設定右邊玩家的造型至投出造型\n p2.costumeId = 2;\n }\n \n\n // 【學習】如果遊戲狀態為「左邊玩家投出」或「右邊玩家投出」\n if (/* 若遊戲狀態為「左邊玩家投出」或「右邊玩家投出」的代號 */) {\n // 增加 1 至武器垂直移動速度值\n vy += 1;\n // 以 vx、wind、vy 更新武器的 x 與 y 值\n weapon.x += vx + wind;\n weapon.y += vy;\n }\n \n // 如果武器位置超出遊戲畫面下方則重新設定武器狀態\n if (weapon.y \u003e 1500) reset();\n\n // 【學習】如果遊戲狀態為「左邊玩家投出」,而且武器碰到右邊玩家\n if (/* 若遊戲狀態為「左邊玩家投出」的代號,而且 weapon 的 touched(p2) 方法結果等於 true */) {\n // 【學習】設定右邊玩家的造型至被打中造型\n // 將 p2 的 costumeId 屬性設定為 3\n \n // 減少 100 右邊玩家血量值\n p2_hp -= 100;\n // 隱藏武器\n weapon.hidden = true;\n // 播放被打中音效\n createSound('hit.wav');\n }\n // 如果遊戲狀態為「右邊玩家投出」,而且武器碰到左邊玩家\n if (gameStatus === 6 \u0026\u0026 weapon.touched(p1)) {\n // 設定左邊玩家的造型至被打中造型\n p1.costumeId = 3;\n // 減少 100 左邊玩家血量值\n p1_hp -= 100;\n // 隱藏武器\n weapon.hidden = true;\n // 播放被打中音效\n createSound('hit.wav');\n }\n}\n\n// 重新設定武器的函式\nfunction reset () {\n // 歸零左邊玩家蓄力值\n p1_power = 0;\n // 設定左邊玩家的造型至站立造型\n p1.costumeId = 0;\n // 如果遊戲狀態為「左邊玩家投出」\n if (gameStatus === 3) {\n // 設定遊戲狀態為「右邊玩家待命」\n gameStatus = 4;\n // 移動武器到右邊玩家位置\n weapon.x = p2.x;\n weapon.y = p2.y;\n // 設定武器的造型至貝殼造型\n weapon.costumeId = 1;\n }\n \n // 歸零右邊玩家蓄力值\n p2_power = 0;\n // 設定右邊玩家的造型至站立造型\n p2.costumeId = 0;\n // 如果遊戲狀態為「右邊玩家投出」\n if (gameStatus === 6) {\n // 設定遊戲狀態為「左邊玩家待命」\n gameStatus = 1;\n // 移動武器到左邊玩家位置\n weapon.x = p1.x;\n weapon.y = p1.y;\n // 設定武器的造型至樹枝造型\n weapon.costumeId = 0;\n }\n \n // 隱藏武器\n weapon.hidden = true;\n // 設定風速值至一隨機值\n wind = Math.random()*20 - 10;\n}\n\n// 【學習】檢查遊戲是否結束的函式\nfunction checkGameOver () {\n // 【學習】如果左邊玩家血量值小於等於 0\n if (/* 若 p1_hp 小於等於 0 */) {\n // 顯示「Koding 獲勝!」字樣\n drawText(\"Koding 獲勝!\", 350, 400, \"white\", 100);\n // 【學習】設定右邊玩家的造型至勝利造型\n // 將 p2 的 costumeId 屬性設定為 4\n \n // 停止遊戲\n stop();\n }\n // 如果右邊玩家血量值小於等於 0\n if (p2_hp \u003c= 0) {\n // 顯示「Otter 獲勝!!」字樣\n drawText(\"Otter 獲勝!\", 350, 400, \"white\", 100);\n // 設定左邊玩家的造型至勝利造型\n p1.costumeId = 4;\n // 停止遊戲\n stop();\n }\n}\n\n// 【學習】繪製血量與力量的函式\nfunction drawBars() {\n // 繪製左右邊玩家血量條\n pen.fillColor = \"red\";\n pen.drawRect(500, 40, -p1_hp, 20);\n pen.drawRect(700, 40, +p2_hp, 20);\n // 繪製風速值\n pen.fillColor = \"blue\";\n pen.drawRect(580 + wind * 10, 120, 40, 20);\n \n // 【學習】如果遊戲狀態為「左邊玩家待命」或「左邊玩家蓄力」\n if (/* 若遊戲狀態為「左邊玩家待命」或「左邊玩家蓄力」的代號 */) {\n // 繪製出左邊玩家的蓄力槽\n pen.fillColor = \"white\";\n pen.drawRect(50, 600, 40, 200);\n // 依照目前左邊玩家蓄力值繪製出左邊玩家的蓄力條\n pen.fillColor = \"red\";\n pen.drawRect(50, 800, 40, -p1_power * 5);\n }\n // 如果遊戲狀態為「右邊玩家待命」或「右邊玩家蓄力」\n if (gameStatus === 4 || gameStatus === 5) {\n // 繪製出右邊玩家的蓄力槽\n pen.fillColor = \"white\";\n pen.drawRect(1110, 600, 40, 200);\n // 依照目前右邊玩家蓄力值繪製出右邊玩家的蓄力條\n pen.fillColor = \"red\";\n pen.drawRect(1110, 800, 40, -p2_power * 5);\n }\n}\n\n// 使用 forever() 重複不斷執行遊戲各動作的功能\nforever(function(){\n // 執行 loop 函式。\n loop();\n // 執行 checkGameOver 函式。\n checkGameOver();\n // 執行 drawBars 函式。\n drawBars();\n});","created_at":"2023-11-20T17:26:35.021+08:00","updated_at":"2023-11-20T17:51:40.711+08:00","name":"JS 獺獺大戰_學生","language":"javascript","screenshot":{"url":null},"parent_id":616107,"plugin":"Game.set({width: 1200, height: 900});","description":null,"note":null,"status":"public","like_student_ids":[],"is_featured":false,"views":13,"hashid":"qmdswgypj","is_content_changed":false,"review_status":"unsubmitted","submitted_at":null,"reviewed_at":null,"advise":null,"is_deleted":false}
[{"id":14502087,"file_name":"bgm.mp3","project_id":646331,"asset_id":289605,"created_at":"2023-11-20T17:26:35.029+08:00","updated_at":"2023-11-20T17:26:35.029+08:00"},{"id":14502088,"file_name":"board.png","project_id":646331,"asset_id":289606,"created_at":"2023-11-20T17:26:35.031+08:00","updated_at":"2023-11-20T17:26:35.031+08:00"},{"id":14502089,"file_name":"throw.wav","project_id":646331,"asset_id":289607,"created_at":"2023-11-20T17:26:35.032+08:00","updated_at":"2023-11-20T17:26:35.032+08:00"},{"id":14502090,"file_name":"twig.png","project_id":646331,"asset_id":289608,"created_at":"2023-11-20T17:26:35.033+08:00","updated_at":"2023-11-20T17:26:35.033+08:00"},{"id":14502091,"file_name":"otter_4.png","project_id":646331,"asset_id":289609,"created_at":"2023-11-20T17:26:35.034+08:00","updated_at":"2023-11-20T17:26:35.034+08:00"},{"id":14502092,"file_name":"otter_3.png","project_id":646331,"asset_id":289610,"created_at":"2023-11-20T17:26:35.035+08:00","updated_at":"2023-11-20T17:26:35.035+08:00"},{"id":14502093,"file_name":"otter_2.png","project_id":646331,"asset_id":289611,"created_at":"2023-11-20T17:26:35.036+08:00","updated_at":"2023-11-20T17:26:35.036+08:00"},{"id":14502094,"file_name":"otter_1.png","project_id":646331,"asset_id":289612,"created_at":"2023-11-20T17:26:35.037+08:00","updated_at":"2023-11-20T17:26:35.037+08:00"},{"id":14502095,"file_name":"otter_0.png","project_id":646331,"asset_id":289613,"created_at":"2023-11-20T17:26:35.038+08:00","updated_at":"2023-11-20T17:26:35.038+08:00"},{"id":14502096,"file_name":"koding_4.png","project_id":646331,"asset_id":289614,"created_at":"2023-11-20T17:26:35.039+08:00","updated_at":"2023-11-20T17:26:35.039+08:00"},{"id":14502097,"file_name":"koding_3.png","project_id":646331,"asset_id":289615,"created_at":"2023-11-20T17:26:35.040+08:00","updated_at":"2023-11-20T17:26:35.040+08:00"},{"id":14502098,"file_name":"koding_2.png","project_id":646331,"asset_id":289616,"created_at":"2023-11-20T17:26:35.041+08:00","updated_at":"2023-11-20T17:26:35.041+08:00"},{"id":14502099,"file_name":"koding_1.png","project_id":646331,"asset_id":289617,"created_at":"2023-11-20T17:26:35.042+08:00","updated_at":"2023-11-20T17:26:35.042+08:00"},{"id":14502100,"file_name":"koding_0.png","project_id":646331,"asset_id":289618,"created_at":"2023-11-20T17:26:35.043+08:00","updated_at":"2023-11-20T17:26:35.043+08:00"},{"id":14502101,"file_name":"hit.wav","project_id":646331,"asset_id":289619,"created_at":"2023-11-20T17:26:35.044+08:00","updated_at":"2023-11-20T17:26:35.044+08:00"},{"id":14502102,"file_name":"shell.png","project_id":646331,"asset_id":289621,"created_at":"2023-11-20T17:26:35.045+08:00","updated_at":"2023-11-20T17:26:35.045+08:00"},{"id":14502103,"file_name":"pk.png","project_id":646331,"asset_id":289622,"created_at":"2023-11-20T17:26:35.046+08:00","updated_at":"2023-11-20T17:26:35.046+08:00"},{"id":14502104,"file_name":"bg.jpg","project_id":646331,"asset_id":289623,"created_at":"2023-11-20T17:26:35.047+08:00","updated_at":"2023-11-20T17:26:35.047+08:00"},{"id":14502105,"file_name":"tutorial.jpg","project_id":646331,"asset_id":699586,"created_at":"2023-11-20T17:26:35.048+08:00","updated_at":"2023-11-20T17:26:35.048+08:00"}]
橘蘋學習平台
橘蘋學習平台
我的作品
檢視專案頁
匯出
複製
匯入
刪除
下載 Android APP (APK)
截圖
1:1:1
1:1
full
幫助
用手機掃描下方 QRCode 進行安裝
或您也可以
下載 APK
到這台電腦
用手機掃描下方 QRCode 進行安裝
或您也可以
下載 APK
到這台電腦