1 Star 0 Fork 0

unkvcc/thirty_point

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
index.js 3.58 KB
一键复制 编辑 原始数据 按行查看 历史
unkvcc 提交于 2022-08-23 11:16 . 打算更换技术栈来做这个小游戏
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
const port = process.env.PORT || 5500;
const path = require('path');
const Player = require('./player');
const Room = require('./room');
// Game 类代表一局游戏,以及游戏的数据处理
const Game = require('./game');
// new Game(Data.now(),'init')
// socket.join(game.roomName) 当前连接的客户端加入某个房间
// socket.to(game.roomName).emit() 发送给房间所有人除了自己
// io.to(game.roomName).emit() 发送给房间所有人
// socket.to(player.sid).emit() 单独发送给某个人 不能发给自己
// io.to(player.sid).emit() 单独发送给某个人 能发给自己 能连写
// io.to(sid).to(sid).emit() 连写
// socket.emit 只发给当前连接的客户端
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', (req, res) => {
res.sendFile('/public/index.html');
});
// 已登录的在线玩家列表 { name sid ip isHuman state roomIndex deskIndex}
// 玩家昵称 socketID 是否当前在线 在哪个下标的房间 在房间游戏的几号位置
let players = [];
// rooms 代表当前服务器维护的所有游戏 Game 和房间 Room 信息 {roomIndex 房间编号 game:new Game(),desk:[player.name,],waiting} desk 房间的0 1 2 号位置 waiting true 时表示未开始游戏 false 表示正在游戏
let rooms = [];
let PlayerState = {
"Error": 0,
"Login": 1,
"Reconnect": 2,
"InRoomWaiting": 3,
"InRoomGaming": 4
}
io.on('connection', (socket) => {
console.log(socket.handshake.address);
// 离线处理,如果玩家在游戏中,由机器人托管至游戏结束或玩家重连;否则,视为玩家退出登录。
socket.on('disconnect', () => {
let playerIndex = players.map(e => e.sid).indexOf(socket.id)
if (playerIndex != -1) {
players[playerIndex].isHuman = false;
}
// 如果已在房间中或开始游戏发送掉线信息给房间游戏中所有人
// 否则发送在线玩家人数的信息给其他所有客户端
})
// 处理登录请求
socket.on('login', (name, callback) => {
let playerIndex = players.map(e => e.name).indexOf(name);
let state = PlayerState.Error;
// 接下来检查当前在线的玩家列表中有没有该昵称的玩家
if (playerIndex != -1) {
if (socket.handshake.address == players[playerIndex].ip) {
// 有该昵称的在线玩家,判断属于同一ip,则视为掉线重连
handleReconnectPlayer(playerIndex, socket.id);
state = PlayerState.Reconnect;
players[playerIndex].state = state;
// 重连时将服务器保存的游戏状态发给客户端,客户端重新渲染进入游戏界面
} else {
// 拒绝玩家登录
}
} else {
// 允许玩家登录
state = PlayerState.Login;
players.push(new Player(name, socket.id, socket.handshake.address));
}
// 调用客户端回调
callback(state);
// 发送更新在线玩家人数的信息给所有客户端
io.emit("room")
console.log(players);
})
});
http.listen(port, () => {
console.log(`server running at http://localhost:${port}/`);
});
function createRoom() {
for (let i = 0; i < 6; i++) {
rooms.push(new Room(i));
}
}
function handleReconnectPlayer(index, sid) {
console.log("玩家重连" + players[index]);
// players[index].isHuman = true;
// players[index].sid = sid;
// 如果重连进入房间,发送房间信息
// 如果重连进入游戏中,发送游戏信息
// 更新所有玩家的在线玩家列表
}
createRoom()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
JavaScript
1
https://gitee.com/unkvcc/thirty_point.git
git@gitee.com:unkvcc/thirty_point.git
unkvcc
thirty_point
thirty_point
master

搜索帮助