private void gameRender() {
		if (dbImage == null) {
			dbImage = createImage(pWidth, pHeight);
			if (dbImage == null) {
				System.out.println("dbImage is null");
				return;
			} else
				dbg = dbImage.getGraphics();
		}

		// clear the background
		dbg.setColor(Color.white);
		dbg.fillRect(0, 0, pWidth, pHeight);

		dbg.setColor(Color.blue);
		dbg.setFont(font);

		// report frame count & average FPS and UPS at top left
		// dbg.drawString("Frame Count " + frameCount, 10, 25);
//		dbg.drawString(
//				"Average FPS/UPS: " + df.format(averageFPS) + ", "
//						+ df.format(averageUPS), 20, 20 ); // was (10,55)

		dbg.setColor(Color.black);

		// draw game elements
		/**
		 * Draw Nodes
		 */
		ArrayList<Node> nodeCopy = new ArrayList<Node>(nodeList);
		for(Node n : nodeCopy){
			n.draw(dbg);
		}
		/**
		 * Draw player1 hand
		 */
		ArrayDeque<Block> p1Hand = player1.getHand().clone();
		Iterator<Block> it = p1Hand.iterator();
		int i = 1;
		while(it.hasNext()){
			Block b = (Block) it.next();
			gui.setPlayer1HandAtIndex(b.getImage(), i);
			i++;
		}
		/**
		 * Draw player2 hand
		 */
		ArrayDeque<Block> p2Hand = player2.getHand().clone();
		Iterator<Block> it2 = p2Hand.iterator();
		int j = 1;
		while(it2.hasNext()){
			Block b = (Block) it2.next();
			gui.setPlayer2HandAtIndex(b.getImage(), j);
			j++;
		}
		
		/**
		 * Draw grid (last to go over the nodes).
		 */
		this.grid.draw(dbg);
		// TODO Make game objects draw themselves eg: point.draw(dbg).	

		if (gameOver)
			gameOverMessage(dbg);
	} // end of gameRender()