2017-01-24 15 views
0

Есть что-то, что я, должно быть, сделал неправильно с module.exports. К сожалению, я не могу понять это. Я работаю над игрой Yugioh (да, игра с карточной карточкой старого ребенка) в Node.js как консольное приложение (по крайней мере, на данный момент). Любая помощь будет принята с благодарностью.ТипError: utils.getPlayerName не является функцией

game.js:

var utils = require("./utils"); 
var legend = require("./legend"); 
var manager = require("./eventManager"); 

module.exports = { 
    data: { 
     players: { 
      0: { 
       name: null, 
       lifePoints: 4000 
      }, 

      1: { 
       name: null, 
       lifePoints: 4000 
      } 
     }, 

     phase: null, 

     turnOwner: null, 

     turnCount: 1, 

     hasEnded: false 
    }, 

    draw: function(playerId, amount) { 
     utils.out("Draw " + amount + " -> " + utils.getPlayerName(playerId)); 
    }, 

    cyclePhase: function(phaseId) { 
     if (phaseId) { 
      // TODO 
     } 
     else { 
      if (this.data.phase == null) { 
       this.data.phase = legend.phases.standby; 
       this.cyclePhase(); 
      } 
      else { 
       switch (this.data.phase) { 
        case legend.phases.standby: { 
         manager.triggerEvent(legend.phaseEvents.start_standby, this.data.turnOwner); 
         utils.out("Phase -> Stand-By Phase"); 

         break; 
        } 

        case legend.phases.draw: { 
         manager.triggerEvent(legend.phaseEvents.end_standby, this.data.turnOwner); 
         manager.triggerEvent(legend.phaseEvents.in_draw, this.data.turnOwner); 
         utils.out("Phase -> Draw Phase"); 

         break; 
        } 

        case legend.phases.main1: { 
         manager.triggerEvent(legend.phaseEvents.start_main1, this.data.turnOwner); 
         utils.out("Phase -> Main Phase 1"); 

         break; 
        } 

        case legend.phases.battle: { 
         manager.triggerEvent(legend.phaseEvents.end_main1, this.data.turnOwner); 
         manager.triggerEvent(legend.phaseEvents.start_battle, this.data.turnOwner); 
         utils.out("Phase -> Battle Phase"); 

         break; 
        } 

        case legend.phases.main2: { 
         manager.triggerEvent(legend.phaseEvents.end_battle, this.data.turnOwner); 
         manager.triggerEvent(legend.phaseEvents.start_main2, this.data.turnOwner); 
         utils.out("Phase -> Main Phase 2"); 

         break; 
        } 

        case legend.phases.end: { 
         manager.triggerEvent(legend.phaseEvents.end_main2, this.data.turnOwner); 
         manager.triggerEvent(legend.phaseEvents.in_end, this.data.turnOwner); 
         utils.out("Phase -> End Phase") 

         break; 
        } 
       } 
      } 
     } 

     this.data.turnCount++; 

     manager.triggerEvent(legend.turnEvents.countUpdate, null, this.data.turnCount); 
    }, 

    activateCard: function(playerId, cardId, activationType, slotId) { 

    }, 

    summonMonster: function(cardId, summonType) { 
     // TODO 
    }, 

    setCard: function(cardType, slotId, slotPos, handSlotPos) { 
     switch (cardType) { 
      case 0: { 

      } 
     } 
    } 
}; 

utils.js:

var game = require("./game"); 

module.exports = { 
    out: function(msg) { 
     console.log(" " + msg); 
    }, 

    getPlayerName: function(playerId) { 
     return game.data.players[playerId].name; 
    }, 

    getRandomInt: function(min, max) { 
     return min + Math.floor(Math.random() * (max - min + 1)); 
    } 
}; 

трассировки стека:

TypeError: utils.getPlayerName is not a function 
    at Object.module.exports.draw (/home/ubuntu/workspace/game.js:29:53) 
    at start (/home/ubuntu/workspace/engine.js:16:10) 
    at Object.<anonymous> (/home/ubuntu/workspace/engine.js:6:1) 
    at Module._compile (module.js:409:26) 
    at Object.Module._extensions..js (module.js:416:10) 
    at Module.load (module.js:343:32) 
    at Function.Module._load (module.js:300:12) 
    at Function.Module.runMain (module.js:441:10) 
    at startup (node.js:139:18) 
    at node.js:974:3 

ответ

0

я понял это сам. Я не понимаю, но мне удалось исправить ошибку. Я удалил переменную «игра» из файла «utils.js» и переместил функцию «getPlayerName» в файл «game.js», как-то это устранило проблему.

Смежные вопросы