Untitled
unknown
plain_text
a year ago
3.6 kB
9
Indexable
#include "Game.h"
#include <SFML/Graphics.hpp>
#include <cstdlib>
Game::Game() : window(sf::VideoMode(720, 960), "The Game!"), gameOver(false) {
tetromino.reset(1 + rand() % 7, rand() % 7, tetromino.figures);
texture.loadFromFile("images/tiles.png");
sprite.setTexture(texture);
font.loadFromFile("Roboto-Regular.ttf");
scoreText.setFont(font);
highScoreText.setFont(font);
gameOverText.setFont(font);
playAgainText.setFont(font);
scoreText.setCharacterSize(20);
highScoreText.setCharacterSize(20);
gameOverText.setCharacterSize(30);
playAgainText.setCharacterSize(20);
scoreText.setFillColor(sf::Color(35, 47, 68));
highScoreText.setFillColor(sf::Color(35, 47, 68));
gameOverText.setFillColor(sf::Color::Red);
playAgainText.setFillColor(sf::Color(35, 47, 68));
}
void Game::run() {
sf::Clock clock;
while (window.isOpen()) {
handleEvents();
float deltaTime = clock.restart().asSeconds();
if (!gameOver) {
update();
}
render();
}
}
void Game::handleEvents() {
sf::Event event;
while (window.pollEvent(event)) {
if (event.type == sf::Event::Closed) {
window.close();
}
if (event.type == sf::Event::KeyPressed) {
switch (event.key.code) {
case sf::Keyboard::Left:
tetromino.move(-1, 0);
break;
case sf::Keyboard::Right:
tetromino.move(1, 0);
break;
case sf::Keyboard::Down:
tetromino.move(0, 1);
break;
case sf::Keyboard::Up:
tetromino.rotate();
break;
case sf::Keyboard::Space:
// Placeholder for rotating Tetromino
break;
default:
break;
}
}
}
}
void Game::update() {
if (tetromino.gameOver) {
gameOver = true;
field.setGameOver(true);
}
tetromino.timer += clock.restart().asSeconds();
if (tetromino.timer > tetromino.delay) {
tetromino.move(0, 1);
if (!tetromino.checkCollision(field.field)) {
tetromino.move(0, -1);
field.checkLines(score.getScore());
}
tetromino.timer = 0;
}
if (field.isGameOver()) {
gameOver = true;
}
}
void Game::render() {
window.clear(sf::Color::White);
field.draw(sprite, window);
tetromino.draw(sprite, window);
scoreText.setString("Score: " + std::to_string(score.getScore()));
highScoreText.setString("High Score: " + std::to_string(score.getHighScore()));
scoreText.setPosition(10, 10);
highScoreText.setPosition(10, 50);
window.draw(scoreText);
window.draw(highScoreText);
if (gameOver) {
gameOverText.setString("Game Over!");
playAgainText.setString("Press R to Restart or Q to Quit");
gameOverText.setPosition(180, 400);
playAgainText.setPosition(150, 460);
window.draw(gameOverText);
window.draw(playAgainText);
if (sf::Keyboard::isKeyPressed(sf::Keyboard::R)) {
reset();
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Q)) {
window.close();
}
}
window.display();
}
void Game::reset() {
field.reset();
tetromino.reset(1 + rand() % 7, rand() % 7, tetromino.figures);
score.updateScore(0);
gameOver = false;
}Editor is loading...
Leave a Comment