基于HTML5canvars的小游戏,利用HTML5实现Canvas激流勇进小游戏代码
时间: 2024-03-07 18:50:12 浏览: 60
以下是一个简单的基于HTML5 Canvas的激流勇进小游戏的代码示例:
HTML代码:
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Canvas激流勇进游戏</title>
</head>
<body>
<canvas id="myCanvas" width="600" height="400"></canvas>
<script src="game.js"></script>
</body>
</html>
```
JavaScript代码:
```
// 获取Canvas元素
var canvas = document.getElementById("myCanvas");
// 获取Canvas绘图上下文
var ctx = canvas.getContext("2d");
// 定义玩家对象
var player = {
x: 50,
y: 200,
width: 40,
height: 40,
speed: 5
};
// 定义障碍物数组
var obstacles = [];
// 定义游戏结束标志
var gameOver = false;
// 定义游戏循环函数
function gameLoop() {
// 清空画布
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 绘制玩家
ctx.fillStyle = "blue";
ctx.fillRect(player.x, player.y, player.width, player.height);
// 绘制障碍物
ctx.fillStyle = "red";
for (var i = 0; i < obstacles.length; i++) {
ctx.fillRect(obstacles[i].x, obstacles[i].y, obstacles[i].width, obstacles[i].height);
}
// 更新玩家位置
if (player.y > 0 && player.y < canvas.height - player.height) {
if (keys.up) {
player.y -= player.speed;
} else if (keys.down) {
player.y += player.speed;
}
}
// 更新障碍物位置
for (var i = 0; i < obstacles.length; i++) {
obstacles[i].x -= obstacles[i].speed;
if (obstacles[i].x + obstacles[i].width < 0) {
obstacles.splice(i, 1);
}
}
// 检测碰撞
for (var i = 0; i < obstacles.length; i++) {
if (collision(player, obstacles[i])) {
gameOver = true;
}
}
// 绘制游戏结束文字
if (gameOver) {
ctx.fillStyle = "black";
ctx.font = "30px Arial";
ctx.fillText("Game Over!", canvas.width / 2 - 75, canvas.height / 2);
}
// 循环调用游戏循环函数
if (!gameOver) {
requestAnimationFrame(gameLoop);
}
}
// 定义键盘事件监听器
var keys = {
up: false,
down: false
};
document.addEventListener("keydown", function(event) {
if (event.keyCode == 38) {
keys.up = true;
} else if (event.keyCode == 40) {
keys.down = true;
}
});
document.addEventListener("keyup", function(event) {
if (event.keyCode == 38) {
keys.up = false;
} else if (event.keyCode == 40) {
keys.down = false;
}
});
// 定义碰撞检测函数
function collision(rect1, rect2) {
if (rect1.x + rect1.width > rect2.x && rect1.x < rect2.x + rect2.width &&
rect1.y + rect1.height > rect2.y && rect1.y < rect2.y + rect2.height) {
return true;
} else {
return false;
}
}
// 在随机位置生成障碍物
function createObstacle() {
var obstacle = {
x: canvas.width,
y: Math.floor(Math.random() * (canvas.height - 40)),
width: 40,
height: 40,
speed: Math.floor(Math.random() * 5) + 1
};
obstacles.push(obstacle);
}
// 每隔1秒生成一个障碍物
setInterval(createObstacle, 1000);
// 启动游戏循环
gameLoop();
```
该示例中,使用Canvas绘制了一个玩家和障碍物,通过键盘控制玩家上下移动,随机生成障碍物并不断向左移动。当玩家与障碍物发生碰撞时,游戏结束并显示“Game Over!”文字。
阅读全文