Remix of Earth Rescue Journey 拯救地球
by StormPilot69135 lines5.3 KB
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<style>
*{margin:0;padding:0;box-sizing:border-box;font-family:Arial}
body{overflow:hidden}
#game{width:100vw;height:100vh;position:relative}
/* 污染/干净双层背景 */
.dirty-bg{width:100%;height:100%;background:#3a3c44;position:absolute;top:0;left:0}
.clean-bg{width:100%;height:100%;background:linear-gradient(#87ceeb,#73d873);position:absolute;top:0;left:0;opacity:0;transition:opacity 2s}
/* 角色 */
.girl{width:120px;position:absolute;bottom:100px;left:180px}
.robot{width:90px;position:absolute;bottom:170px;left:310px;animation:float 2s infinite ease-in-out}
@keyframes float{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
/* 科技对话框 */
.talk-box{position:absolute;top:50px;left:50%;transform:translateX(-50%);background:rgba(40,160,255,0.15);border:2px solid #6cf;border-radius:12px;padding:14px 20px;color:#fff;text-align:center;max-width:680px;line-height:1.6;font-size:17px}
/* 可拖动垃圾 */
.trash{width:65px;position:absolute;cursor:grab}
/* 垃圾桶区域 */
.bin-group{position:absolute;bottom:25px;right:80px;display:flex;gap:18px}
.bin{width:85px;height:105px;background:#555;border:2px solid #fff;border-radius:8px;color:#fff;font-weight:bold;display:flex;align-items:center;justify-content:center;text-align:center;font-size:14px}
/* 底部提示文字 */
.tips{position:absolute;bottom:15px;left:20px;color:#fff;font-size:15px}
/* 通关弹窗 */
.win-pop{width:100%;height:100%;background:rgba(0,0,0,0.7);position:absolute;top:0;left:0;display:none;flex-direction:column;align-items:center;justify-content:center;color:#fff;font-size:30px;text-align:center}
button{margin-top:18px;padding:10px 26px;font-size:17px;background:#6cf;border:none;border-radius:6px;cursor:pointer}
</style>
</head>
<body>
<div id="game">
<div class="dirty-bg"></div>
<div class="clean-bg" id="cleanBg"></div>
<!-- 角色图片(平台内置可用卡通图,无需外链) -->
<img class="girl" src="https://assets.arcadelab.ai/assets/characters/girl-student.svg">
<img class="robot" src="https://assets.arcadelab.ai/assets/robots/cute-mini-robot.svg">
<!-- 开局双语剧情弹窗 -->
<div class="talk-box" id="startText">
你好,宿主,你已穿越到地球毁灭时代,现在请开启你的旅程来去拯救地球,如果任务失败,地球将毁灭。<br>
Hello, Host. You have traveled to the era of Earth's destruction. Now, start your journey to save the Earth. If the mission fails, the Earth will be destroyed.
</div>
<!-- 可拖动垃圾,数量精简,降低难度 -->
<img class="trash" style="top:200px;left:420px" data-type="recycle" src="https://assets.arcadelab.ai/assets/items/plastic-bottle.svg">
<img class="trash" style="top:300px;left:600px" data-type="recycle" src="https://assets.arcadelab.ai/assets/items/metal-can.svg">
<img class="trash" style="top:160px;left:760px" data-type="kitchen" src="https://assets.arcadelab.ai/assets/items/rotten-fruit.svg">
<!-- 两类垃圾桶 -->
<div class="bin-group">
<div class="bin" data-bin="recycle">Recycle<br>可回收</div>
<div class="bin" data-bin="kitchen">Kitchen<br>厨余</div>
</div>
<div class="tips">Drag rubbish into correct bin | 拖动垃圾到对应垃圾桶</div>
<!-- 通关页面 -->
<div class="win-pop" id="winPage">
You saved the Earth!<br>你成功拯救了地球!
<p style="font-size:19px;margin-top:8px">Let's protect our home together</p>
<button onclick="restart()">Play Again 重新游玩</button>
</div>
</div>
<script>
const trashs = document.querySelectorAll('.trash');
const cleanBg = document.getElementById('cleanBg');
const winPage = document.getElementById('winPage');
const startText = document.getElementById('startText');
let total = trashs.length;
let clearNum = 0;
// 3.5秒自动关闭开场台词
setTimeout(()=>startText.style.display='none',3500);
// 拖拽垃圾逻辑
trashs.forEach(item=>{
let drag = false, offX, offY;
item.onmousedown = e=>{
drag = true;
offX = e.offsetX;
offY = e.offsetY;
item.style.zIndex = 999;
}
document.onmousemove = e=>{
if(!drag) return;
const gameDom = document.getElementById('game').getBoundingClientRect();
item.style.left = (e.clientX - gameDom.left - offX) + 'px';
item.style.top = (e.clientY - gameDom.top - offY) + 'px';
}
document.onmouseup = ()=>{
if(!drag) return;
drag = false;
item.style.zIndex = 1;
checkPut(item);
}
})
// 判断投放垃圾桶是否正确
function checkPut(trash){
const tType = trash.dataset.type;
const bins = document.querySelectorAll('.bin');
bins.forEach(bin=>{
const bType = bin.dataset.bin;
const tRect = trash.getBoundingClientRect();
const bRect = bin.getBoundingClientRect();
// 碰撞判定
if(tRect.left < bRect.right && tRect.right > bRect.left && tRect.top < bRect.bottom && tRect.bottom > bRect.top){
if(tType === bType){
trash.style.display = 'none';
clearNum++;
checkAllClear();
}else{
alert('Wrong bin! Try again\n放错垃圾桶啦,重新分类');
}
}
})
}
// 全部清理完毕,切换干净地球+弹出通关
function checkAllClear(){
if(clearNum >= total){
cleanBg.style.opacity = 1;
setTimeout(()=>winPage.style.display='flex',1200);
}
}
// 重新开局
function restart(){
location.reload();
}
</script>
</body>
</html>Game Source: Remix of Earth Rescue Journey 拯救地球
Creator: StormPilot69
Libraries: none
Complexity: moderate (135 lines, 5.3 KB)
The full source code is displayed above on this page.
Remix Instructions
To remix this game, copy the source code above and modify it. Add a ARCADELAB header at the top with "remix_of: remix-of-earth-rescue-journey-stormpilot69" to link back to the original. Then publish at arcadelab.ai/publish.