나는 그것의 특성의 하나로서 모든 플레이어 요소를 포함하는 배열 방라는 클래스, 객실 클래스에서 게임 서버 OOP 디자인
players = [];
는 실제로 경쟁 선수를 반환하는 방법을 라운드에서.
// below method is called by the room's timer
var getPlayersWhoFinished = function() {
playersWhoFinished = [];
for (i = 0; i < players.length; i++) {
if (players[i].isFinished()) {
playersWhoFinished.push(players[i]);
};
};
return playersWhoFinished;
}
그래서 나는대로 그냥 객실 클래스에서 위를 떠날 수 있다는 것을 알지만, 이미 이미 많은 클래스에서 더 복잡한 매핑을 세 가지 다른 기능, (300 + 라인)가 있습니다. 이러한 클래스를 다른 클래스에 캡슐화하는 방법을 알지 못합니다. 클래스가 Room 클래스 및 모든 Room 참조와 밀접한 관련이 있으므로 적절한 사용자에게 보내야합니다.
위의 코드를 수정하여 Player 클래스에 삽입하면 나에게 맞는 것 같습니다.하지만이 방법을 사용하는 방법은 정적 메서드를 사용하여 룸 객체를 보내는 것입니다.
// players is now a member of the Player class
Player.getPlayersWhoFinished = function(room, players) {
playersWhoFinished = [];
for (i = 0; i < players; i++) {
if (players[i].getRoom() == room) {
playersWhoFinished.push(players[i]);
}
}
return playersWhoFinished;
}
어쨌든, 이것은 나에게 비싸고 비능률적 인 것처럼 보입니다. 나는 정말 내 Room 클래스를 가능한 한 가볍게 만드는 방법을 알아 내려고 애 쓰고있다.
실제로 문제를 해결할 수는 없겠지만,'filter'를 사용하면 짧은 방법으로 필터링 함수를 다시 구현할 수 있습니다 :'var playersWhoFinished = players.filter (function player {return player.isFinished();}); ' – icktoofay
팁, 암묵적인 전역 변수이므로 선언되지 않은'i' 변수에주의하십시오. – elclanrs
흠 .... .... 나는 그들이 방을 만들었을 것이라고 생각했다 .getPlayersWhoFinished()는 모든 플레이어에게 줄 것이다. 방이 방 –