使用方向键移动,空格键射击,消灭外星入侵者!
创建HTML文件,引入Tailwind CSS和Font Awesome。设置Canvas元素和基本的游戏容器布局。
定义游戏主对象`game`来存储全局状态(如分数、难度、实体列表)。实现`gameLoop`函数作为游戏的主循环。
使用ES6类语法,分别创建`Player`, `Enemy`, `Bullet`, `Crystal`等类。每个类负责自身的绘制(`render`)和更新(`update`)逻辑。
监听`keydown`和`keyup`事件,来控制玩家战机的移动和射击。实现游戏的开始、暂停、继续和重启功能。
实现`checkCollision`函数。在游戏主循环中,检测玩家子弹与敌人、玩家与敌人/晶体之间的碰撞,并执行相应的逻辑(加分、游戏结束)。
设计敌人和晶体的生成器函数(`spawnEnemy`, `spawnCrystal`),并根据当前分数动态调整生成频率和敌人速度,以实现难度递增。
开发游戏的开始菜单、结束菜单和HUD。通过控制DOM元素的显示和隐藏来管理不同的游戏状态,并实时更新分数和难度显示。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>星际守护者</title>
<!-- 引入外部资源 -->
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
<!-- Tailwind配置和自定义样式 -->
<script> /* Tailwind配置 */ </script>
<style type="text/tailwindcss"> /* 自定义工具类 */ </style>
</head>
<body>
<div class="container mx-auto px-4 py-8 max-w-5xl">
<header class="text-center mb-8">
<!-- 标题和说明 -->
</header>
<div class="bg-white rounded-xl p-4 md:p-6 shadow-xl mb-6">
<div class="flex flex-col items-center">
<div id="gameStatus">游戏状态提示</div>
<div class="game-container mb-6">
<canvas id="gameCanvas"></canvas>
<!-- 开始菜单 -->
<div id="startMenu" class="absolute inset-0 ..."> ... </div>
<!-- 游戏结束菜单 -->
<div id="gameOverMenu" class="absolute inset-0 ... hidden"> ... </div>
<!-- 游戏信息 HUD -->
<div id="gameHUD" class="absolute top-4 ... hidden"> ... </div>
</div>
<div class="flex gap-4">
<button id="pauseButton" class="...">暂停</button>
<button id="resumeButton" class="...">继续</button>
</div>
</div>
</div>
<div class="bg-white rounded-xl p-6 shadow-xl">
<!-- 游戏开发指南内容 -->
</div>
</div>
<script>
// 游戏核心逻辑
</script>
</body>
</html>
// 1. 获取DOM元素和初始化Canvas
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');
// ... (其他DOM元素)
// 2. 游戏状态和配置对象
const game = {
isRunning: false, isPaused: false,
score: 0, difficulty: 1,
player: null, enemies: [], bullets: [], crystals: [], fireworks: [],
// ... (其他游戏配置)
};
// 3. 游戏实体类定义
class Player { /* ... */ }
class Enemy { /* ... */ }
class Bullet { /* ... */ }
class Crystal { /* ... */ }
class Firework { /* ... */ }
// 4. 游戏核心函数
function initGame() { /* ... */ }
function startGame() { /* ... */ }
function togglePause() { /* ... */ }
function gameLoop() { /* ... */ }
function updateGame() { /* ... */ }
function renderGame() { /* ... */ }
function drawStars() { /* ... */ }
function checkCollisions() { /* ... */ }
function isColliding(a, b) { /* ... */ }
function spawnEnemy() { /* ... */ }
function spawnCrystal() { /* ... */ }
function gameOver() { /* ... */ }
function hexToRgb(hex) { /* ... */ }
// 5. 事件监听和UI控制
function handleKeyDown(e) { /* ... */ }
function handleKeyUp(e) { /* ... */ }
function toggleCode(id) { /* ... */ }
// 6. 初始化
window.addEventListener('load', () => { /* ... */ });
window.addEventListener('resize', resizeCanvas);
@layer utilities {
.btn-effect {
transition: all 0.3s ease;
}
.btn-effect:hover {
transform: translateY(-2px);
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}
.game-container {
position: relative;
width: 100%;
height: 500px;
background-color: #0F172A; /* 深邃的太空背景 */
border-radius: 0.75rem; /* 12px */
overflow: hidden;
}
}
/* 可以在这里添加更多自定义组件样式 */