Nodejs 无聊的多人互动戳点游戏

发布于 1周前 作者 sinazl 来自 nodejs/Nestjs

Nodejs 无聊的多人互动戳点游戏

http://swollen.aligo.me/

三天前莫名奇妙做起来的莫名奇妙的东西

截止目前的进度是通过点和针还有电波进行实时音频采样合成播放 用浏览器干这个真卡

4 回复

Node.js 无聊的多人互动戳点游戏

大家好,今天给大家介绍一个我最近开发的小项目——一个基于Node.js的多人互动戳点游戏。这个游戏的核心玩法是通过点击屏幕上的点来触发音效,并且可以和其他在线玩家实时互动。

项目地址

你可以访问这里来体验一下这个小游戏。

项目背景

这个项目是三天前我突发奇想开始做的。初衷很简单,就是想做一个能够实时互动的游戏,让大家在无聊的时候也能找到一点乐趣。

技术栈

  • 前端: HTML, CSS, JavaScript (使用Socket.IO库)
  • 后端: Node.js (使用Express框架)

游戏功能

  1. 戳点: 玩家可以通过点击屏幕上的点来触发音效。
  2. 多人互动: 不同玩家的点击动作可以实时同步到其他玩家的屏幕上,并且会听到对方的音效。
  3. 音频采样: 通过实时音频采样,可以合成播放不同的音效。

实现思路

  • 客户端:

    • 使用HTML和CSS创建基本的UI布局。
    • 使用JavaScript监听鼠标点击事件,并通过Socket.IO与服务器通信。
    • 接收服务器发送的数据并更新UI。
  • 服务器端:

    • 使用Node.js和Express创建Web服务器。
    • 使用Socket.IO处理实时通信。
    • 存储和管理在线玩家的信息,并将每个玩家的点击事件广播给其他在线玩家。

示例代码

下面是客户端和服务器端的一些核心代码示例:

客户端代码(index.html)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>戳点游戏</title>
    <style>
        #canvas {
            border: 1px solid black;
            width: 400px;
            height: 400px;
        }
    </style>
</head>
<body>
    <canvas id="canvas"></canvas>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        const canvas = document.getElementById('canvas');
        const ctx = canvas.getContext('2d');

        // 连接Socket.IO服务器
        const socket = io();

        // 监听鼠标点击事件
        canvas.addEventListener('click', function(event) {
            const rect = canvas.getBoundingClientRect();
            const x = event.clientX - rect.left;
            const y = event.clientY - rect.top;

            // 在点击位置绘制一个圆
            ctx.beginPath();
            ctx.arc(x, y, 10, 0, Math.PI * 2);
            ctx.fill();

            // 发送点击信息到服务器
            socket.emit('click', { x, y });
        });

        // 监听来自服务器的点击事件
        socket.on('click', function(data) {
            const rect = canvas.getBoundingClientRect();
            const x = data.x;
            const y = data.y;

            // 在点击位置绘制一个圆
            ctx.beginPath();
            ctx.arc(x, y, 10, 0, Math.PI * 2);
            ctx.fill();
        });
    </script>
</body>
</html>
服务器端代码(server.js)
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');

const app = express();
const server = http.createServer(app);
const io = socketIo(server);

app.get('/', (req, res) => {
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', (socket) => {
    console.log('A user connected:', socket.id);

    // 监听客户端的点击事件
    socket.on('click', (data) => {
        console.log('Click detected at:', data.x, data.y);
        // 广播点击事件给所有连接的客户端
        io.emit('click', data);
    });

    // 处理客户端断开连接
    socket.on('disconnect', () => {
        console.log('User disconnected:', socket.id);
    });
});

server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

总结

这个小游戏虽然简单,但是通过实时通信技术实现了多人互动的功能,非常有趣。希望这个项目能给你带来一些灵感!如果你有任何问题或建议,欢迎留言讨论。


希望这段内容对你有帮助!如果有任何需要补充的地方,请告诉我。


要是大家一起来戳或许会很好玩

针对 “Node.js 无聊的多人互动戳点游戏” 这个帖子的内容,可以理解为一个多人互动的戳点游戏,其中涉及实时音频采样和播放。这类应用通常需要服务器端和客户端的配合,利用WebSockets实现数据的实时传输。以下是一个简单的示例,展示如何使用Node.js、Express和Socket.IO来创建这样一个多人互动游戏的基本框架。

示例代码

1. 安装必要的依赖包

首先确保安装了expresssocket.io

npm install express socket.io

2. 创建服务器端代码 (server.js)

const express = require('express');
const http = require('http');
const socketIo = require('socket.io');

// 初始化 Express 应用
const app = express();
const server = http.createServer(app);
const io = socketIo(server);

app.get('/', (req, res) => {
    res.sendFile(__dirname + '/index.html');
});

io.on('connection', (socket) => {
    console.log('New client connected');

    // 当客户端发送 'point' 事件时
    socket.on('point', (data) => {
        console.log('Received point:', data);
        // 将数据广播给所有连接的客户端
        io.emit('point', data);
    });

    socket.on('disconnect', () => {
        console.log('Client disconnected');
    });
});

server.listen(3000, () => {
    console.log('Server is running on port 3000');
});

3. 创建客户端代码 (index.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>戳点游戏</title>
    <script src="/socket.io/socket.io.js"></script>
    <script>
        const socket = io();

        function sendPoint(x, y) {
            socket.emit('point', { x, y });
        }

        window.onload = () => {
            document.getElementById('canvas').addEventListener('click', (event) => {
                const rect = event.target.getBoundingClientRect();
                const x = event.clientX - rect.left;
                const y = event.clientY - rect.top;
                sendPoint(x, y);
            });
        };
    </script>
</head>
<body>
    <canvas id="canvas" width="500" height="500"></canvas>
</body>
</html>

说明

  1. 服务器端:使用expresssocket.io创建了一个简单的HTTP服务器,监听客户端的连接,并处理客户端发送的“点”事件。
  2. 客户端:客户端通过点击画布上的任意位置发送坐标到服务器,服务器再将这些信息广播给其他所有客户端。

这个示例提供了一个基础框架,你可以在此基础上添加更多功能,例如音频采样和处理等。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!