void attackTest() { player1->setActive(true); // Set up terrain qrw::Terrain terrain1(qrw::ET_HILL, -1, +1); board->getSquare(0, 0)->setTerrain(&terrain1); qrw::Terrain terrain2(qrw::ET_HILL, +2, -1); board->getSquare(0, 1)->setTerrain(&terrain2); qrw::Unit::AttackResult result = unit1->attack(unit2); CPPUNIT_ASSERT_EQUAL(true, result.attackPerformed); CPPUNIT_ASSERT_EQUAL(3, result.attackerHPDelta); CPPUNIT_ASSERT_EQUAL(1, result.defenderHPDelta); CPPUNIT_ASSERT_EQUAL(2, unit1->getHP()); CPPUNIT_ASSERT_EQUAL(4, unit2->getHP()); // Check if attackPerformed is false if attacking was not able. result = unit2->attack(unit1); CPPUNIT_ASSERT_EQUAL(false, result.attackPerformed); // Check if movement was reset correctly CPPUNIT_ASSERT_EQUAL(0, unit1->getCurrentMovement()); CPPUNIT_ASSERT_EQUAL(4, unit2->getCurrentMovement()); }
int main() { std::srand(std::time(0)); sf::RenderWindow window(sf::VideoMode(800, 800, 32), "Pixel Terrain"); window.setVerticalSyncEnabled(true); Player player; PixelShape terrain1(sf::Vector2i(200, 200), sf::Vector2f(0, 0), sf::Color::Red); PixelShape terrain2(sf::Vector2i(200, 200), sf::Vector2f(200, 0), sf::Color::Blue); PixelShape terrain3(sf::Vector2i(200, 200), sf::Vector2f(200, 200), sf::Color::Green); PixelShape terrain4(sf::Vector2i(200, 200), sf::Vector2f(0, 200), sf::Color::Yellow); sf::Event event; sf::Time prevFrameTime(sf::seconds(1.f / 60.f)); sf::Clock frameClock; while (window.isOpen()) { while (window.pollEvent(event)) { player.handleEvent(event); switch(event.type) { case sf::Event::Closed: { window.close(); break; } case sf::Event::MouseButtonPressed: { if (event.mouseButton.button == sf::Mouse::Left) { terrain1.destroy(sf::Vector2i(event.mouseButton.x, event.mouseButton.y), 50); terrain2.destroy(sf::Vector2i(event.mouseButton.x, event.mouseButton.y), 50); terrain3.destroy(sf::Vector2i(event.mouseButton.x, event.mouseButton.y), 50); terrain4.destroy(sf::Vector2i(event.mouseButton.x, event.mouseButton.y), 50); } else { terrain1.create(sf::Vector2i(event.mouseButton.x, event.mouseButton.y), 50); terrain2.create(sf::Vector2i(event.mouseButton.x, event.mouseButton.y), 50); terrain3.create(sf::Vector2i(event.mouseButton.x, event.mouseButton.y), 50); terrain4.create(sf::Vector2i(event.mouseButton.x, event.mouseButton.y), 50); } break; } default: { break; } } } if (!checkCollision(player.getShape(), terrain1) && !checkCollision(player.getShape(), terrain2) && !checkCollision(player.getShape(), terrain3) && !checkCollision(player.getShape(), terrain4)) { Player player2 = player; player2.update(prevFrameTime.asSeconds()); if (!checkCollision(player2.getShape(), terrain1) && !checkCollision(player2.getShape(), terrain2) && !checkCollision(player2.getShape(), terrain3) && !checkCollision(player2.getShape(), terrain4)) { player = player2; } } window.clear(sf::Color(40, 40, 40)); window.draw(terrain1); window.draw(terrain2); window.draw(terrain3); window.draw(terrain4); window.draw(player); drawCollisionIntersection(player.getShape(), terrain1, window); drawCollisionIntersection(player.getShape(), terrain2, window); drawCollisionIntersection(player.getShape(), terrain3, window); drawCollisionIntersection(player.getShape(), terrain4, window); window.display(); //std::cout << "FPS: " << 1.f / prevFrameTime.asSeconds() << "\n"; prevFrameTime = frameClock.restart(); } return 0; }