public GameController(int numPlayers){
		
		//creates players and adds them to the list also adds state change listeners for listener updating
		for (int i = 0; i<numPlayers; i++){
			players.add(new Player(BOARD_WIDTH, BOARD_HEIGHT, this, "Player " + (i+1)));
			players.get(i).addStateChangeListener(new PlayerStateListener(){
				@Override
				public void playerStateUpdated(Player player) {
					notifyStateListeners();
				}
			});
		}
        
        if (numPlayers == 1){
        	manaProduction = -1;
        	players.get(0).setSpeedUp(true);
        } else {
        	//init game powerups
            this.addPowerUp(4, new Reinforce());
            this.addPowerUp(1, new RemoveRows(3));
            this.addPowerUp(3, new ManaSteal());
            this.addPowerUp(1, new PushLeft());
        }
        
        //init upcoming tetrominoes
  		for (int i = 0; i<NUM_UPCOMING_TET; i++){
  			Tetromino newTet = new Tetromino(STD_TETROMINOS[random.nextInt(STD_TETROMINOS.length)], ViewController.getRandomVisual());
  			futurePieces.add(newTet);
  		}
		
	}