Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.06.2016, 17:11   #1
Lizoveta
Пользователь
 
Регистрация: 22.06.2013
Сообщений: 44
По умолчанию С++, Visual, sfml, действия и отрисовка по нажатию клавиш

Добрый день! Подскажите, пожалуйста, может быть, в этой части кода что-нибудь не так? Потому что программа при запуске не реагирует на нажатия клавиш, а при отладке, вообще ни одно условие у меня ни разу не выполнилось :С Что странно...

В идеале, должна рисовать карта рубашкой в левом верхнем углу, дальше при нажатии Tab, должна начать реагировать на клавиши, и при нажатии Left нарисовать 5 карт в ряд рубашкой, а при нажатии Right - 5 карт в ряд лицевой стороной, при нажатии Escape - закрыть окно.

Код:
#include "Game.h"
#include <SFML/Graphics.hpp>

void Game::startGame()
{
	sf::RenderWindow window(sf::VideoMode(1800, 1000), "Card and Shift");
	window.setFramerateLimit(60);

	x = 100;
	y = 200;
	step = 0;
	s = clubs;
	num = 2;

	sf::Event event;
	bool change = true; 

	while (window.isOpen())
	{
		window.clear();
		Shift shift;
		shift.drawCard(xsh, ysh, &window); //рисуем колоду в левой верхнем углу (она всегда там есть)

		if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Tab))
			change = true;

		if (change)
		{
			while (window.pollEvent(event))
			{
				//Если нажали <- , то заполняем все и рисуем рубашкой
				if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Left)
				{
					cardDeck.clear();
					shiftDeck.clear();

					x = 100;
					y = 200;
					step = 0;

					updateGame(&window);  //заполняем оба вектора картами 
					drawGame(&window, s, num, false); //рисуем рубашкой
				}
				else
					//Иначе аналогично, но лицевой стороной
					if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Right)
					{
						cardDeck.clear();
						shiftDeck.clear();

						x = 100;
						y = 200;
						step = 0;

						updateGame(&window);
						drawGame(&window, s, num, true); //рисуем лицевой стороной
					}
					else
						//Если нажали esc, то закрываем окно
						if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape)
						{
							change = false;
							window.close();
						}
			}
		}
		window.display();
	}	
	//system("pause");
}

void Game::drawGame(RenderWindow * _window, Suit _s, int _num, bool isclicked)
{
	Shift shift;
	shift.drawCard(xsh, ysh, _window); //рисует одну карту в левом верхнем углу 
	if (isclicked) //было нажатие - рисуем лицевой
	{
		for (int i = 0; i < cardDeck.size(); i++)
		{
			cardDeck[i].drawCard(cardDeck[i].getCordX(), cardDeck[i].getCordY(), cardDeck[i].getSuit(),
				cardDeck[i].getNumber(), _window);
		}
	}
	else //иначе - рубашкой
	{
		for (int i = 0; i < shiftDeck.size(); i++)
		{
			shiftDeck[i].drawCard(shiftDeck[i].getCordX(), shiftDeck[i].getCordY(), _window);
		}
	}
}

void Game::updateGame(RenderWindow *_window) //задание новых значений карты
{
	for (int i = 0; i < 5; i++)
	{
		Shift newShift;
		newShift.setCordCard(step, x, y);

		shiftDeck.insert(shiftDeck.end(), newShift);

		num = 5;
		while (num = 5)
		{
			num = rand() % 10 + 2;
		}

		int randNum;
		randNum = rand() % 3;
		switch (randNum)
		{
		case 0:
			s = clubs;
			break;
		case 1:
			s = diamonds;
			break;
		case 2:
			s = hearts;
			break;
		case 3:
			s = spades;
			break;
		default:
			break;
		}

		Card newCard;
		newCard.setValueCard(s, num);
		newCard.setCordCard(step, x, y);

		cardDeck.insert(cardDeck.end(), newCard);

		x += 50;
		if (x > 1800)
		{
			x = 100;
		}
		step += 1;
	}
}
Lizoveta вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Visual Bacic6. Отрисовка графика. С.М.С Помощь студентам 0 21.01.2012 15:02
Дэлфи: визов действия по нажатию на кнопку на клавиатуре? arahis Помощь студентам 4 13.10.2011 08:15
Выгрузка резидентной программы по нажатию клавиш triest Паскаль, Turbo Pascal, PascalABC.NET 0 12.06.2011 22:39
Выгрузка резидентной программы по нажатию клавиш triest Помощь студентам 4 11.06.2011 16:22
По нажатию, каких сочетаний клавиш можно программно развернуть приложение, если оно свернуто в трее? Johnny_B Win Api 1 04.06.2007 08:20