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 @@ ...@@ -14,6 +14,7 @@
<script src="js/SelectWord.js"></script> <script src="js/SelectWord.js"></script>
</head> </head>
<body> <body>
<script src="js/Client.js"></script>
<script src="js/Main.js"></script> <script src="js/Main.js"></script>
</body> </body>
</html> </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() ...@@ -26,7 +26,6 @@ Input.menuSceneEnterReaction = function()
{ {
socket.emit('setNickname', Input.convInput); socket.emit('setNickname', Input.convInput);
Input.reset(); Input.reset();
game.scene.start('gameScene');
game.scene.remove('menuScene'); game.scene.remove('menuScene');
} }
else else
......
...@@ -57,7 +57,12 @@ WordSpace.AdjustVarByPhase = function(typingRate, phase) ...@@ -57,7 +57,12 @@ WordSpace.AdjustVarByPhase = function(typingRate, phase)
{ {
if(phase == WordSpace.Phase.READY) 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) else if(phase == WordSpace.Phase.START)
{ {
...@@ -90,13 +95,6 @@ WordSpace.AdjustVarByPhase = function(typingRate, phase) ...@@ -90,13 +95,6 @@ WordSpace.AdjustVarByPhase = function(typingRate, phase)
WordSpace.nameCycle.resetCycle(WordSpace.gameSceneForTest, WordSpace.NameSpawnDelay, WordSpace.nameCycle.currentCycle.getElapsed()); WordSpace.nameCycle.resetCycle(WordSpace.gameSceneForTest, WordSpace.NameSpawnDelay, WordSpace.nameCycle.currentCycle.getElapsed());
} }
WordSpace.GetPhase = function()
{
//서버통신하셈~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//임시
WordSpace.CurrentPhase = WordSpace.Phase.START;
}
WordSpace.GetPlayerTypingRate = function() WordSpace.GetPlayerTypingRate = function()
{ {
//서버통신하셈~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //서버통신하셈~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
...@@ -176,7 +174,7 @@ WordSpace.varAdjustCycle = ...@@ -176,7 +174,7 @@ WordSpace.varAdjustCycle =
callback: function() callback: function()
{ {
//나중에는 메세지 분석해서 Phase랑 PlayerTypingRate 받겠지만 일단 이렇게 해둠 //나중에는 메세지 분석해서 Phase랑 PlayerTypingRate 받겠지만 일단 이렇게 해둠
WordSpace.GetPhase(); //WordSpace.GetPhase();
WordSpace.GetPlayerTypingRate(); WordSpace.GetPlayerTypingRate();
WordSpace.AdjustVarByPhase(WordSpace.PlayerTypingRate, WordSpace.CurrentPhase); WordSpace.AdjustVarByPhase(WordSpace.PlayerTypingRate, WordSpace.CurrentPhase);
}, },
...@@ -386,6 +384,7 @@ WordSpace.playerTyping = ...@@ -386,6 +384,7 @@ WordSpace.playerTyping =
{ {
this.totalTyping += wordText != null ? WordReader.getWordTyping(wordText) : 0; this.totalTyping += wordText != null ? WordReader.getWordTyping(wordText) : 0;
this.playerTyping = this.totalTyping / this.gameTimer.now * 1000; this.playerTyping = this.totalTyping / this.gameTimer.now * 1000;
socket.emit('setPlayerTyping', this.playerTyping);
this.text.setText('현재 타수 : ' + this.playerTyping.toFixed(1)); this.text.setText('현재 타수 : ' + this.playerTyping.toFixed(1));
}, },
initiate: function(scene) initiate: function(scene)
......
...@@ -15,15 +15,6 @@ var config = { ...@@ -15,15 +15,6 @@ var config = {
var game = new Phaser.Game(config) var game = new Phaser.Game(config)
var playerNum = -1; 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 //test
/* /*
window.addEventListener("message", function (event) { window.addEventListener("message", function (event) {
......
...@@ -2,6 +2,7 @@ var express = require('express'); ...@@ -2,6 +2,7 @@ var express = require('express');
var app = express(); var app = express();
var server = require('http').Server(app); var server = require('http').Server(app);
var io = require('socket.io').listen(server); var io = require('socket.io').listen(server);
var GameServer = require('./GameServer');
app.use('/css', express.static(__dirname + '/css')); app.use('/css', express.static(__dirname + '/css'));
app.use('/js', express.static(__dirname + '/js')); app.use('/js', express.static(__dirname + '/js'));
...@@ -16,69 +17,6 @@ server.listen(80, function() { ...@@ -16,69 +17,6 @@ server.listen(80, function() {
console.log('[SERVER] Listening on port ' + server.address().port); 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) io.on('connection', function(socket)
{ {
...@@ -87,7 +25,10 @@ io.on('connection', function(socket) ...@@ -87,7 +25,10 @@ io.on('connection', function(socket)
{ {
id: GameServer.getPlayerNumber(), id: GameServer.getPlayerNumber(),
nickname: '게스트', nickname: '게스트',
socketId: socket socketId: socket,
currnetRoom: null,
playerTyping: 0
} }
socket.playerData = playerSocket; socket.playerData = playerSocket;
GameServer.currentPlayer.push(playerSocket); GameServer.currentPlayer.push(playerSocket);
...@@ -97,13 +38,20 @@ io.on('connection', function(socket) ...@@ -97,13 +38,20 @@ io.on('connection', function(socket)
str: 'your number is ' + playerSocket.id, str: 'your number is ' + playerSocket.id,
num: playerSocket.id num: playerSocket.id
}); });
GameServer.enterEmptyRoom(playerSocket);
}); });
socket.on('setNickname', function(msg) // string new_nickname socket.on('setNickname', function(msg) // string new_nickname
{ {
socket.playerData.nickname = msg; socket.playerData.nickname = msg;
console.log('['+socket.playerData.id+'] nickname set to ' + 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) 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