Commit 026e9ec6 authored by 18신대성's avatar 18신대성 Committed by 18류지석

게임 룸 만듬, 일단 임시로 2명이 접속해야 플레이 시작하게 만듬

parent b4989da0
var GameServer = GameServer || {};
GameServer.Phase = {READY: 0, START: 1, MAIN: 2, MUSIC: 3};
GameServer.startCount = 1;
GameServer.currentPlayer = [];
GameServer.playingRoom = [];
GameServer.getPlayerNumber = function()
{
do
{
var num = Math.floor(Math.random() * 1000 + 1);
if (!this.currentPlayer.includes(num)) return num;
} while (true)
}
GameServer.findPlayer = function(playerId)
{
var idx = this.currentPlayer.findIndex(function(element)
{
return element.id === socket;
});
if (idx != -1) return this.currentPlayer[idx];
else
{
console.log('[ERR] wrong playerId to find');
return null;
}
}
GameServer.nextRoomNumber = 0;
GameServer.makeRoom = function()
{
var roomOption =
{
roomNum: GameServer.nextRoomNumber++,
maxPlayer: 3,
currentPlayer: [],
currnetPhase: GameServer.Phase.READY,
rateArrangePoint: 300,
maxPlayerTyping: 0,
minPlayerTyping: 0
}
this.playingRoom.push(roomOption);
console.log('[SERVER] new room made, roomCount: ' + this.playingRoom.length);
return this.playingRoom.length - 1;
}
GameServer.enterRoom = function(roomIdx, playerData)
{
this.playingRoom[roomIdx].currentPlayer.push(playerData);
playerData.currentRoom = this.playingRoom[roomIdx];
console.log('[' + playerData.id + '] entered to room #' + this.playingRoom[roomIdx].roomNum);
if (this.playingRoom[roomIdx].currentPlayer.length > this.startCount) GameServer.startRoom(roomIdx);
return this.playingRoom[roomIdx];
}
GameServer.enterEmptyRoom = function(playerData)
{
var toEnter = -1;
for (let i = 0; i < this.playingRoom.length; i++)
{
if (this.playingRoom[i].currentPlayer.length < this.playingRoom[i].maxPlayer)
{
toEnter = i;
break;
}
}
if (toEnter === -1)
{
toEnter = this.makeRoom();
}
return this.enterRoom(toEnter, playerData);
}
GameServer.startRoom = function(roomIdx)
{
this.playingRoom[roomIdx].Phase = this.Phase.START;
this.playingRoom[roomIdx].currentPlayer.forEach(element => {
element.socketId.emit('phaseChange', this.Phase.START);
element.socketId.emit('startGame');
// 데이터 동기화
});
}
module.exports = GameServer;
\ No newline at end of file
......@@ -14,6 +14,7 @@
<script src="js/SelectWord.js"></script>
</head>
<body>
<script src="js/Client.js"></script>
<script src="js/Main.js"></script>
</body>
</html>
\ No newline at end of file
var socket = io.connect();
socket.emit('idRequest');
socket.on('idSet', function(msg) // {str, num playerNum}
{
console.log(msg.str);
playerNum = msg.num;
});
socket.on('setPlayerTypingRate', function(msg) // number playerTypingRate
{
WordSpace.PlayerTypingRate = msg;
});
socket.on('phaseChange', function(msg) // number Phase
{
console.log('phase changed from ' + WordSpace.CurrentPhase + ' to ' + msg);
WordSpace.CurrentPhase = msg;
});
socket.on('startGame', function()
{
game.scene.start('gameScene');
});
\ No newline at end of file
......@@ -26,7 +26,6 @@ Input.menuSceneEnterReaction = function()
{
socket.emit('setNickname', Input.convInput);
Input.reset();
game.scene.start('gameScene');
game.scene.remove('menuScene');
}
else
......
......@@ -57,7 +57,12 @@ WordSpace.AdjustVarByPhase = function(typingRate, phase)
{
if(phase == WordSpace.Phase.READY)
{
WordSpace.WordSpawnDelay = 10000;
WordSpace.NameSpawnDelay = 10000;
WordSpace.NameSpawnReduce = 0;
WordSpace.GradeProb[0] = 1;
WordSpace.GradeProb[1] = 1;
WordSpace.GradeProb[2] = 1;
}
else if(phase == WordSpace.Phase.START)
{
......@@ -90,13 +95,6 @@ WordSpace.AdjustVarByPhase = function(typingRate, phase)
WordSpace.nameCycle.resetCycle(WordSpace.gameSceneForTest, WordSpace.NameSpawnDelay, WordSpace.nameCycle.currentCycle.getElapsed());
}
WordSpace.GetPhase = function()
{
//서버통신하셈~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//임시
WordSpace.CurrentPhase = WordSpace.Phase.START;
}
WordSpace.GetPlayerTypingRate = function()
{
//서버통신하셈~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
......@@ -176,7 +174,7 @@ WordSpace.varAdjustCycle =
callback: function()
{
//나중에는 메세지 분석해서 Phase랑 PlayerTypingRate 받겠지만 일단 이렇게 해둠
WordSpace.GetPhase();
//WordSpace.GetPhase();
WordSpace.GetPlayerTypingRate();
WordSpace.AdjustVarByPhase(WordSpace.PlayerTypingRate, WordSpace.CurrentPhase);
},
......@@ -386,6 +384,7 @@ WordSpace.playerTyping =
{
this.totalTyping += wordText != null ? WordReader.getWordTyping(wordText) : 0;
this.playerTyping = this.totalTyping / this.gameTimer.now * 1000;
socket.emit('setPlayerTyping', this.playerTyping);
this.text.setText('현재 타수 : ' + this.playerTyping.toFixed(1));
},
initiate: function(scene)
......
......@@ -15,15 +15,6 @@ var config = {
var game = new Phaser.Game(config)
var playerNum = -1;
// client side
var socket = io.connect();
socket.emit('idRequest');
socket.on('idSet', function(msg) // {str, num}
{
console.log(msg.str);
this.playerNum = msg.num;
});
//test
/*
window.addEventListener("message", function (event) {
......
......@@ -2,6 +2,7 @@ var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io').listen(server);
var GameServer = require('./GameServer');
app.use('/css', express.static(__dirname + '/css'));
app.use('/js', express.static(__dirname + '/js'));
......@@ -16,69 +17,6 @@ server.listen(80, function() {
console.log('[SERVER] Listening on port ' + server.address().port);
});
var GameServer = GameServer || {};
GameServer.currentPlayer = [];
GameServer.playingRoom = [];
GameServer.getPlayerNumber = function()
{
do
{
var num = Math.floor(Math.random() * 1000 + 1);
if (!this.currentPlayer.includes(num)) return num;
} while (true)
}
GameServer.findPlayer = function(playerId)
{
var idx = this.currentPlayer.findIndex(function(element)
{
return element.id === socket;
});
if (idx != -1) return this.currentPlayer[idx];
else
{
console.log('[ERR] wrong playerId to find');
return null;
}
}
GameServer.nextRoomNumber = 0;
GameServer.makeRoom = function()
{
var roomOption =
{
roomNum: GameServer.nextRoomNumber++,
maxPlayer: 3,
currentPlayer: []
}
this.playingRoom.push(roomOption);
console.log('[SERVER] new room made, roomCount: ' + this.playingRoom.length);
return this.playingRoom.length - 1;
}
GameServer.enterRoom = function(roomIdx, playerData)
{
this.playingRoom[roomIdx].currentPlayer.push(playerData);
console.log('[' + playerData.id + '] entered to room #' + this.playingRoom[roomIdx].roomNum);
return this.playingRoom[roomIdx];
}
GameServer.enterEmptyRoom = function(playerData)
{
var toEnter = -1;
for (let i = 0; i < this.playingRoom.length; i++)
{
if (this.playingRoom[i].currentPlayer.length < this.playingRoom[i].maxPlayer)
{
toEnter = i;
break;
}
}
if (toEnter === -1)
{
toEnter = this.makeRoom();
}
return this.enterRoom(toEnter, playerData);
}
// 클라이언트 요청에 대한 콜백 정의
io.on('connection', function(socket)
{
......@@ -87,7 +25,10 @@ io.on('connection', function(socket)
{
id: GameServer.getPlayerNumber(),
nickname: '게스트',
socketId: socket
socketId: socket,
currnetRoom: null,
playerTyping: 0
}
socket.playerData = playerSocket;
GameServer.currentPlayer.push(playerSocket);
......@@ -97,13 +38,20 @@ io.on('connection', function(socket)
str: 'your number is ' + playerSocket.id,
num: playerSocket.id
});
GameServer.enterEmptyRoom(playerSocket);
});
socket.on('setNickname', function(msg) // string new_nickname
{
socket.playerData.nickname = msg;
console.log('['+socket.playerData.id+'] nickname set to ' + msg);
GameServer.enterEmptyRoom(socket.playerData);
});
socket.on('setPlayerTyping', function(msg) // number playerTyping
{
socket.playerData.playerTyping = msg;
//let playerTypingRate = (msg - (socket.currnetRoom.minPlayerTyping - socket.currnetRoom.rateArrangePoint)) / (socket.currnetRoom.maxPlayerTyping - socket.currnetRoom.minPlayerTyping + socket.currnetRoom.rateArrangePoint * 2);
//socket.emit('setPlayerTypingRate', playerTypingRate);
});
socket.on('disconnect', function(reason)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment