public void negMax(int [][]board)
	{
		/*
		 * Creating a node for every move
		 */
		for(int startMove = 0; startMove < Game.COLS;startMove++)
		{
			//init the first move of the node
			int [][] tmpBoard = GameHelper.copyBoard(board);
			
			int startYPos = GameHelper.makeFakeMove(board, startMove, this.player);
		
			/*
			 * if its a invalid drop
			 */
			if(startYPos ==-1)
			{
				rateMove[startMove][0][startMove] = Integer.MIN_VALUE;
				continue;
			}
			for(int x = 0; x < Game.COLS; x++)
			{
				
				int currentPlayer = this.player;
				for(int deep = 1; deep < this.searchDeep;deep++)
				{
					
					
					int yDrop = GameHelper.makeFakeMove(board, x, currentPlayer);
					
					
					
					System.out.println("XDROP:"+x+"YDrop:"+yDrop);
					/*
					 * if its a invalid drop
					 */
					if(yDrop ==-1)
						break;
					
					
					tmpBoard[x][yDrop] = currentPlayer;
					
					
					/*
					 * Rate all Moves
					 */
					System.out.println("#####current move:######"+x);
					rateMove[startMove][deep][x] = this.aiHelper.countWinningLines(tmpBoard, x,yDrop, currentPlayer);
					int winningMove = this.aiHelper.countWiningMove(tmpBoard, currentPlayer);
					
					rateMove[startMove][deep][x] += this.aiHelper.countBlockEnemyMove(tmpBoard, currentPlayer, x, yDrop);
					rateMove[startMove][deep][x] += this.aiHelper.countMoveAbove(tmpBoard, currentPlayer,x);
					rateMove[startMove][deep][x] += this.aiHelper.countStonesInARow(tmpBoard, currentPlayer, x, yDrop);
					rateMove[startMove][deep][x] += winningMove;
					
					/*
					 * break if the game is finished
					 */
					if(winningMove >0)
					{
						break;
					}
					
					//rate[x] += this.aiHelper.countWiningMove(tmpBoard, player);
					GameHelper.printBoard(tmpBoard);
					
					/*
					 * change the player
					 */
					if(currentPlayer == 1)
						currentPlayer = 2;
					else
						currentPlayer = 1;
				}
	  		}
		}
		
	}