public StatusContext playDrinkingGame(List<Player> players) {

		try {
			// play with random roll or not
			if (Constants.randomPlay) {
				Collections.shuffle(players);
			}
			context.setPlayers(players);
			context.setMaxDrinkingCnt(maxDrinkingCnt);
			context.setPausetime(pausetime);

			int nSecond = 0; // time by second
			while (true) {

				// if only one player is left, game finish
				if (context.getPlayers().size() < 2) {
					break;
				}
				// context.setbWin(false);
				context.setnSecond(nSecond);

				Thread.sleep(100);

				ExecutorService pool = Executors.newFixedThreadPool(context
						.getPlayers().size());
				Set<Future<StatusContext>> set = new HashSet<Future<StatusContext>>();

				int sn = context.getSn();
				for (int i = 0; i < context.getPlayers().size(); i++) {
					Player player = context.getPlayers().get(i);
					if (sn == player.getSn()) {
						player.setbTurn(true);
					} else {
						player.setbTurn(false);
					}
					player.setStatus(context);
					Callable<StatusContext> callable = player;
					Future<StatusContext> future = pool.submit(callable);
					set.add(future);
				}
				pool.shutdown();

				nSecond++;
			}

			// print context
			logger.logEnd(context);

		} catch (InterruptedException e1) {
			e1.printStackTrace();
		} catch (Exception e1) {
			e1.printStackTrace();
		}

		return context;
	}