Commit a5784ccc authored by 18손재민's avatar 18손재민

서버와 머지함

parents 2f14acfd 4f461a07
......@@ -33,9 +33,11 @@ GameServer.makeRoom = function()
var roomOption =
{
roomNum: GameServer.nextRoomNumber++,
maxPlayer: 3,
maxPlayer: 5,
nextRank: 5,
currentPlayer: [],
currnetPhase: GameServer.Phase.READY,
currentSocket: [],
currentPhase: GameServer.Phase.READY,
rateArrangePoint: 300,
maxTypingPlayer: null,
......@@ -54,18 +56,24 @@ GameServer.findRoomIndex = function(roomNum)
}
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 && this.playingRoom[roomIdx].Phase != GameServer.Phase.START) GameServer.startRoom(roomIdx);
return this.playingRoom[roomIdx];
let room = this.playingRoom[roomIdx];
let player = new Player(room.currentPlayer.length, playerData);
room.currentPlayer.push(player);
room.currentSocket.push(playerData);
playerData.playingData = player;
playerData.currentRoom = room;
console.log('[' + playerData.id + '] entered to room #' + room.roomNum);
if (room.currentPlayer.length >= this.startCount) GameServer.startRoom(roomIdx);
return room;
}
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)
if (this.playingRoom[i].currentPlayer.length < this.playingRoom[i].maxPlayer && this.playingRoom[i].currentPhase == this.Phase.READY)
{
toEnter = i;
break;
......@@ -80,23 +88,44 @@ GameServer.enterEmptyRoom = function(playerData)
GameServer.startRoom = function(roomIdx)
{
let room = this.playingRoom[roomIdx];
this.playingRoom[roomIdx].Phase = this.Phase.START;
this.playingRoom[roomIdx].maxTypingPlayer = room.currentPlayer[0];
this.playingRoom[roomIdx].mimTypingPlayer = room.currentPlayer[0];
room.currentPhase = this.Phase.START;
room.maxTypingPlayer = room.currentPlayer[0];
room.minTypingPlayer = room.currentPlayer[0];
// sync roomData
let toSync =
{
roomNum: room.roomNum,
players: room.currentPlayer
};
console.log(toSync);
this.announceToRoom(roomIdx, 'syncRoomData', toSync);
console.log('[ROOM#'+room.roomNum+'] Game Start');
this.announceToRoom(roomIdx, 'phaseChange', this.Phase.START);
this.announceToRoom(roomIdx, 'changePhase', this.Phase.START);
this.announceToRoom(roomIdx, 'startGame');
// 데이터 동기화도
}
GameServer.announceToRoom = function(roomIdx, message, data = null)
GameServer.announceToRoom = function(roomIdx, _message, _data = null)
{
this.playingRoom[roomIdx].currentPlayer.forEach(element =>
this.playingRoom[roomIdx].currentSocket.forEach(function(element)
{
element.socketId.emit(message, data);
element.socketId.emit(_message, _data);
});
}
// 데이터 동기화 함수 만들기
// 동기화할것: 유저리스트(id - nickname 쌍)
class Player
{
constructor(index, playerData)
{
this.index = index;
this.id = playerData.id;
this.nickname = playerData.nickname;
this.isAlive = true;
this.rank = -1;
this.playerTyping = 0;
}
}
module.exports = GameServer;
\ No newline at end of file
var socket = io.connect();
socket.emit('idRequest');
socket.on('idSet', function(msg) // {str, num playerNum}
socket.on('setId', function(msg) // {str, num playerNum}
{
console.log(msg.str);
playerNum = msg.num;
PlayerData.idNum = msg.num;
});
socket.on('setPlayerTypingRate', function(msg) // number playerTypingRate
{
WordSpace.PlayerTypingRate = msg;
console.log('rate: ' + msg);
});
socket.on('phaseChange', function(msg) // number Phase
socket.on('syncRoomData', function(msg) // {num roomNum, [] players}
{
console.log('phase changed from ' + WordSpace.CurrentPhase + ' to ' + msg);
WordSpace.CurrentPhase = msg;
console.log(msg);
RoomData.roomNum = msg.roomNum;
RoomData.players = msg.players;
});
socket.on('startGame', function()
{
game.scene.start('gameScene');
});
socket.on('changePhase', function(msg) // number Phase
{
console.log('phase changed from ' + WordSpace.CurrentPhase + ' to ' + msg);
WordSpace.CurrentPhase = msg;
});
socket.on('userDisconnect', function(msg) // {num id, str nickname}
{
console.log(msg.id + ' / ' + msg.nickname + ' disconnected');
......
......@@ -4,6 +4,7 @@ Input.input = [];
Input.convInput = ''; // converted input
Input.isShifted = false;
Input.isEntered = false;
Input.pressCount = 0;
Input.justPressed = '';
Input.maxInput = 5;
......@@ -13,10 +14,14 @@ Input.attackOption = null;
Input.gameSceneEnterReaction = function()
{
Input.convInput = Input.removeConVow(Input.convInput);
if (Input.attackMode) WordSpace.attack(Input.convInput, Input.attackOption.wordGrade);
else WordSpace.findWord(Input.convInput);
Input.reset();
if (!Input.isEntered)
{
Input.convInput = Input.removeConVow(Input.convInput);
if (Input.attackMode) WordSpace.attack(Input.convInput, Input.attackOption.wordGrade);
else WordSpace.findWord(Input.convInput);
Input.reset();
Input.isEntered = true;
}
}
Input.menuSceneEnterReaction = function()
{
......@@ -24,6 +29,7 @@ Input.menuSceneEnterReaction = function()
if (Input.convInput.length > 0)
{
socket.emit('setNickname', Input.convInput);
PlayerData.nickname = Input.convInput;
Input.reset();
game.scene.remove('menuScene');
}
......@@ -317,6 +323,7 @@ Input.inputField =
}
});
scene.input.keyboard.on('keydown-ENTER', enterCallback);
scene.input.keyboard.on('keyup-ENTER', function(){Input.isEntered = false;})
// upside 10 keys
scene.input.keyboard.on('keydown-Q', function() {Input.pushInput('')});
scene.input.keyboard.on('keydown-W', function() {Input.pushInput('')});
......
......@@ -120,7 +120,7 @@ class AttackWord extends WordObject
this.wordGrade = _wordGrade;
this.wordWeight = WordReader.getWordWeight(this.wordGrade);
if(WordReader.getWordTyping(_attacker) <= 9)
this.wordWeight += this.wordWeight * 0.2 * (WordReader.getWordTyping(playerName) - 9);
this.wordWeight += this.wordWeight * 0.2 * (WordReader.getWordTyping(PlayerData.nickname) - 9);
this.wordWeight *= isStrong ? 3 : 2;
this.attacker = _attacker;
//서버 사용하게 되면 PlayerTyping을 피격자의 것으로 바꿔야 함
......
......@@ -253,7 +253,7 @@ WordSpace.generateWord =
Name: function(scene, isStrong, lenRate)
{
//To do
word = new NameWord(playerName, isStrong);
word = new NameWord(PlayerData.nickname, isStrong);
WordSpace.pushWord(scene, word, lenRate);
}
}
......@@ -346,8 +346,8 @@ WordSpace.setPlayerTyping =
add: function(wordText)
{
this.totalTyping += wordText != null ? WordReader.getWordTyping(wordText) : 0;
WordSpace.playerTyping = this.totalTyping / WordSpace.gameTimer.now * 1000;
socket.emit('setPlayerTyping', this.playerTyping);
WordSpace.playerTyping = this.totalTyping / WordSpace.gameTimer.now * 60 * 1000;
socket.emit('setPlayerTyping', WordSpace.playerTyping);
this.text.setText('현재 타수 : ' + WordSpace.playerTyping.toFixed(1));
},
initiate: function(scene)
......@@ -365,9 +365,9 @@ WordSpace.attack = function(wordText, grade)
{
console.log('attack ' + wordText + ', grade: ' + grade);
//호패에 따른 isStrong 구분 필요함
WordSpace.nameGroup.forEach(function(element)
WordSpace.nameGroup.forEach(function(element)
{
WordSpace.generateWord.Attack(WordSpace.gameSceneForTest, wordText, grade, playerName, element.isStrong);
WordSpace.generateWord.Attack(WordSpace.gameSceneForTest, wordText, grade, PlayerData.nickname, element.isStrong);
});
WordSpace.nameGroup = [];
......
......@@ -16,5 +16,13 @@ var game = new Phaser.Game(config)
//플레이어 정보, 서버 통신시 필요할 듯
//테스트용이므로 차후 수정 요망
var playerNum = -1; //플레이어 아이디, 고유 번호
var playerName = '임시아이디' //플레이어 닉네임
\ No newline at end of file
var PlayerData = PlayerData || {};
PlayerData.idNum = -1; //플레이어 아이디, 고유 번호
PlayerData.nickname = '홍길동'; //플레이어 닉네임
// 현재 들어가있는 Game Room의 정보
var RoomData = RoomData || {};
RoomData.roomNum = -1;
RoomData.players = null;
\ No newline at end of file
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