Nodejs 用node.js写手机游戏,“单机安装,多机同玩“

Nodejs 用node.js写手机游戏,“单机安装,多机同玩“

如果你有Android手机可以试用一下我的相友象棋。这是个开源的游戏。MIT License 有问题,请跟贴提问。

特色

这个是第一个“单机安装,多机同玩“的游戏。让你和对手用各自设备下象棋。

开玩的过程大致这样

  1. 确保你和对手的设备联入同一局网。
  2. 你的Android设备安装游戏,并启动
  3. 你选择红棋或黑棋后,进入棋局,并会出现二维码,
  4. 对手用他的设备,如ipad, iphone, 或android手机或平板都可,扫描二维码,用浏览器打开链接
  5. 两人的设备各自进入游戏。红方先行棋,拖动棋子就可以了。
  6. 行动后,黑方设备,棋盘状态更新,黑方可以行棋。如此往复。

原理

这个游戏基于node4android, 即node.js 在Android上的移植版。

其实它是在你手机上启了一个node.js写的http服务器,游戏只是一个页游。 二维码给了其它设备一个连到它本身url。

也就是说你和对手的设备,最终都连到了你手机上的http服务器上。这样多人游戏就进行了。因为是这种B/S结构,所以还是跨平台的。

node4android扩展了一个js函数 process.str2qr(string), 将一个字串,其实一般就是url,转成二维码图片,png格式的。

源码

请访问 相友象棋源码Node4Android源码 或者访问shuttleplay.net获得更多帮助

整个框架,基本完成。你也可以利用它来写其它桌游,战棋等游戏。

最小代价,你只要会前端游戏代码就可,后端完全可以复用。

小广告

也请大家试用我的Android应用,“流传"。功能独特,绝对让你吃惊。在shuttleplay.net中有,也是开源的,MIT License.

联系我,可以给我邮件

zhentao_huang#hotmail.com, #改为@


6 回复

Nodejs 用node.js写手机游戏,“单机安装,多机同玩”

如果你有Android手机可以试用一下我的相友象棋。这是个开源的游戏。MIT License

特色

这个是第一个“单机安装,多机同玩”的游戏。让你和对手用各自设备下象棋。

开玩的过程大致这样

  1. 确保你和对手的设备联入同一局网。
  2. 你的Android设备安装游戏,并启动。
  3. 你选择红棋或黑棋后,进入棋局,并会出现二维码。
  4. 对手用他的设备,如iPad、iPhone、Android手机或平板都可,扫描二维码,用浏览器打开链接。
  5. 两人的设备各自进入游戏。红方先行棋,拖动棋子就可以了。
  6. 行动后,黑方设备,棋盘状态更新,黑方可以行棋。如此往复。

原理

这个游戏基于node4android,即node.js在Android上的移植版。它实际上是在你的手机上启动了一个Node.js编写的HTTP服务器,而游戏只是一个网页游戏。二维码提供了其他设备连接到该手机上HTTP服务器的一个入口。

具体来说,你和对手的设备最终都连接到了你手机上的HTTP服务器上。这样多人游戏就实现了。由于是这种B/S(浏览器/服务器)架构,因此游戏是跨平台的。

node4android扩展了一个JavaScript函数 process.str2qr(string),将一个字符串(通常是一个URL)转换为二维码图片,格式为PNG。

示例代码

以下是一个简单的Node.js代码片段,展示如何创建一个HTTP服务器,并生成二维码。

const http = require('http');
const qr = require('qr-image');

// 创建HTTP服务器
const server = http.createServer((req, res) => {
    if (req.url === '/') {
        // 发送HTML页面
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end(`
            <!DOCTYPE html>
            <html>
            <head>
                <title>Chinese Chess</title>
            </head>
            <body>
                <h1>欢迎来到中国象棋</h1>
                <p>请扫描以下二维码开始游戏:</p>
                <img src="${qr.imageSync('http://localhost:8000/game', { type: 'png' })}" alt="QR Code">
            </body>
            </html>
        `);
    } else if (req.url.startsWith('/game')) {
        // 处理游戏逻辑
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end('<h1>正在游戏中...</h1>');
    }
});

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

源码

请访问 相友象棋源码Node4Android源码,或者访问 shuttleplay.net 获取更多帮助。

整个框架基本完成。你可以利用它来写其他桌游、战棋等游戏。最小代价是你只需要会前端游戏代码即可,后端可以完全复用。

小广告

也请大家试用我的Android应用,“流传”。功能独特,绝对让你吃惊。在shuttleplay.net中有,也是开源的,MIT License.

联系我

可以给我邮件: zhentao_huang#hotmail.com#改为@


想法挺好,不过把手机做web服务器耗电量是不是会很大。

艹,赞!搞私服的利器啊……

有的设备的确耗电大,但有的还可以,看来和系统相关

根据你提供的背景信息,要实现“单机安装,多机同玩”的功能,主要需要以下几个步骤:

  1. 创建HTTP服务器:使用Node.js在一台设备(例如手机)上启动一个HTTP服务器。
  2. 生成二维码:服务器生成一个URL并将其转换为二维码,供其他设备扫描以加入游戏。
  3. 通信机制:客户端通过HTTP请求与服务器通信,以同步游戏状态。

以下是一个简化的示例代码,展示了如何实现这些功能:

示例代码

const http = require('http');
const qr = require('qr-image');

// 创建HTTP服务器
const server = http.createServer((req, res) => {
    if (req.url === '/join') {
        // 获取客户端加入的信息
        const data = req.url.slice(6);
        console.log(`Player joined: ${data}`);
        // 更新游戏状态
        updateGameState(data);
        res.end('Joined successfully!');
    } else {
        // 返回HTML页面
        res.writeHead(200, {'Content-Type': 'text/html'});
        res.end(`
            <html>
                <head>
                    <title>Chinese Chess</title>
                </head>
                <body>
                    <h1>Scan the QR code to join the game</h1>
                    <img src="${qr.imageSync('http://localhost:3000/join?player=red', { type: 'png' })}">
                </body>
            </html>
        `);
    }
});

server.listen(3000, () => {
    console.log('Server running at http://localhost:3000/');
});

function updateGameState(player) {
    // 更新游戏状态的逻辑
    console.log(`${player} made a move`);
}

解释

  1. 创建HTTP服务器

    • 使用http.createServer创建一个HTTP服务器。
    • 当客户端请求/join时,获取请求参数并打印出来,然后调用updateGameState函数更新游戏状态。
    • 对于其他请求,返回一个包含二维码的HTML页面。
  2. 生成二维码

    • 使用qr-image库将URL转换为二维码图像。
  3. 更新游戏状态

    • updateGameState函数中实现同步游戏状态的逻辑。

注意事项

  • 这个示例仅用于演示基本思路,实际应用中需要处理更多细节,如网络通信、游戏逻辑等。
  • 需要确保所有设备连接到同一个局域网,并且设备能够解析本地IP地址(如http://192.168.1.100:3000/)。

以上代码展示了基本的实现思路,你可以在此基础上继续开发和完善。

回到顶部