以下是一个简单的连线游戏(使用HTML5 Canvas和JavaScript)的源码示例:
一、HTML部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>连线游戏</title>
<style>
canvas {
border: 1px solid black;
}
</style>
</head>
<body>
<canvas id="gameCanvas" width="500" height="500"></canvas>
<script src="game.js"></script>
</body>
</html>
二、JavaScript部分(game.js)
// 获取canvas元素和上下文
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');
// 定义点的类
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
}
// 创建一些随机点
let points = [];
for (let i = 0; i < 10; i++) {
let x = Math.random() * canvas.width;
let y = Math.random() * canvas.height;
points.push(new Point(x, y));
}
let selectedPoints = [];
let isDrawing = false;
// 绘制所有点
function drawPoints() {
points.forEach(point => {
ctx.beginPath();
ctx.arc(point.x, point.y, 5, 0, 2 * Math.PI);
ctx.fill();
});
}
// 检测两点是否相连(简单直线连接判断)
function isConnected(p1, p2) {
let dx = p2.x - p1.x;
let dy = p2.y - p1.y;
let distance = Math.sqrt(dx * dx + dy * dy);
return distance < 50;
}
// 绘制连线
function drawLine(p1, p2) {
ctx.beginPath();
ctx.moveTo(p1.x, p1.y);
ctx.lineTo(p2.x, p2.y);
ctx.stroke();
}
canvas.addEventListener('mousedown', (e) => {
let rect = canvas.getBoundingClientRect();
let x = e.clientX - rect.left;
let y = e.clientY - rect.top;
points.forEach(point => {
if (Math.sqrt((point.x - x) * (point.x - x) + (point.y - y) * (point.y - y)) < 10) {
selectedPoints.push(point);
isDrawing = true;
}
});
drawPoints();
if (isDrawing && selectedPoints.length >= 2) {
drawLine(selectedPoints[selectedPoints.length - 2], selectedPoints[selectedPoints.length - 1]);
}
});
canvas.addEventListener('mouseup', () => {
if (isDrawing && selectedPoints.length >= 2) {
// 这里可以添加判断是否完成某种连线逻辑(例如按顺序连接特定点等)
selectedPoints = [];
isDrawing = false;
}
});
drawPoints();
基础概念
mousedown
和mouseup
事件分别用于检测鼠标按下和松开的动作,从而确定用户何时开始和结束连线操作。优势
应用场景
如果在开发过程中遇到问题:
领取专属 10元无门槛券
手把手带您无忧上云