예제 #1
0
void GUI::displayGameScreen(const Map& map, bool isWhosTurn, const Chess* ch)
{
	COORD bufferSize{ WINDOW_COLS, WINDOW_LINES };
	COORD characterBufferSize{ WINDOW_COLS, WINDOW_LINES };
	COORD characterPosition{ 0, 0 };
	SMALL_RECT consoleWriteArea{ 0, 0, WINDOW_COLS - 1, WINDOW_LINES - 1 };
	CHAR_INFO consoleBuffer[WINDOW_COLS * WINDOW_LINES];
	SetConsoleScreenBufferSize(hConsole, bufferSize);
	for (int y = 0; y < WINDOW_LINES; ++y) {
		for (int x = 0; x < WINDOW_COLS; ++x) {
			consoleBuffer[x + WINDOW_COLS * y].Char.AsciiChar = gameScreen[y][x];
			consoleBuffer[x + WINDOW_COLS * y].Attributes = DEFAULT_COLOR;
		}
	}
	WriteConsoleOutputA(hConsole, consoleBuffer, characterBufferSize, characterPosition, &consoleWriteArea);
	displayChessboard(map);
	displayBattleSituation(map);
	displayGameInfo(isWhosTurn, map, ch);
}
예제 #2
0
void GuiGame::processWindowEvents()
{
	sf::Event event;
	while(_context.window->pollEvent(event))
	{
		assert(std::this_thread::get_id() == _ownerId);
		if(_displayRequest.load())
		{
			displayGame();
			_displayRequest.store(false);
		}
		while(not _pendingMessages.empty())
		{
			displayGameInfo(_pendingMessages.front());
			_pendingMessages.pop();
		}
		if(event.type == sf::Event::Closed)
			quit();
		else
			_context.gui->handleEvent(event);
	}
}