2017-01-24 1 views
0

Da ist etwas, das ich mit module.exports falsch gemacht haben muss. Leider kann ich es nicht herausfinden. Ich arbeite an einem Yugioh-Spiel (ja, das Sammelkartenspiel für alte Kinder) in Node.js als Konsolenanwendung (zumindest für jetzt). Jede Hilfe würde sehr geschätzt werden.TypeError: utils.getPlayerName ist keine Funktion

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)); 
    } 
}; 

Stack-Trace:

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 

Antwort

0

Habe ich es mir heraus. Ich verstehe es nicht, aber ich habe es geschafft, den Fehler zu beheben. Ich habe die Variable "Spiel" aus der Datei "utils.js" entfernt und die Funktion "getPlayerName" in die Datei "game.js" verschoben, irgendwie hat das das Problem behoben.