Nodejs 用node.js写手机游戏,“单机安装,多机同玩“
Nodejs 用node.js写手机游戏,“单机安装,多机同玩“
如果你有Android手机可以试用一下我的相友象棋。这是个开源的游戏。MIT License 有问题,请跟贴提问。
特色
这个是第一个“单机安装,多机同玩“的游戏。让你和对手用各自设备下象棋。
开玩的过程大致这样
- 确保你和对手的设备联入同一局网。
- 你的Android设备安装游戏,并启动
- 你选择红棋或黑棋后,进入棋局,并会出现二维码,
- 对手用他的设备,如ipad, iphone, 或android手机或平板都可,扫描二维码,用浏览器打开链接
- 两人的设备各自进入游戏。红方先行棋,拖动棋子就可以了。
- 行动后,黑方设备,棋盘状态更新,黑方可以行棋。如此往复。
原理
这个游戏基于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, #改为@
Nodejs 用node.js写手机游戏,“单机安装,多机同玩”
如果你有Android手机可以试用一下我的相友象棋。这是个开源的游戏。MIT License
特色
这个是第一个“单机安装,多机同玩”的游戏。让你和对手用各自设备下象棋。
开玩的过程大致这样
- 确保你和对手的设备联入同一局网。
- 你的Android设备安装游戏,并启动。
- 你选择红棋或黑棋后,进入棋局,并会出现二维码。
- 对手用他的设备,如iPad、iPhone、Android手机或平板都可,扫描二维码,用浏览器打开链接。
- 两人的设备各自进入游戏。红方先行棋,拖动棋子就可以了。
- 行动后,黑方设备,棋盘状态更新,黑方可以行棋。如此往复。
原理
这个游戏基于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服务器耗电量是不是会很大。
艹,赞!搞私服的利器啊……
有的设备的确耗电大,但有的还可以,看来和系统相关
根据你提供的背景信息,要实现“单机安装,多机同玩”的功能,主要需要以下几个步骤:
- 创建HTTP服务器:使用Node.js在一台设备(例如手机)上启动一个HTTP服务器。
- 生成二维码:服务器生成一个URL并将其转换为二维码,供其他设备扫描以加入游戏。
- 通信机制:客户端通过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`);
}
解释
-
创建HTTP服务器:
- 使用
http.createServer创建一个HTTP服务器。 - 当客户端请求
/join时,获取请求参数并打印出来,然后调用updateGameState函数更新游戏状态。 - 对于其他请求,返回一个包含二维码的HTML页面。
- 使用
-
生成二维码:
- 使用
qr-image库将URL转换为二维码图像。
- 使用
-
更新游戏状态:
- 在
updateGameState函数中实现同步游戏状态的逻辑。
- 在
注意事项
- 这个示例仅用于演示基本思路,实际应用中需要处理更多细节,如网络通信、游戏逻辑等。
- 需要确保所有设备连接到同一个局域网,并且设备能够解析本地IP地址(如
http://192.168.1.100:3000/)。
以上代码展示了基本的实现思路,你可以在此基础上继续开发和完善。

