Untitled

mail@pastecode.io avatar
unknown
plain_text
20 days ago
3.3 kB
3
Indexable
Never
#include "Game.h"
#include <iostream>

Game::Game() : window(sf::VideoMode(720, 960), "The Game!"), timer(0), delay(0.3f), gameOver(false) {
    // Load textures and fonts
    t1.loadFromFile("images/tiles.png");
    t2.loadFromFile("images/background.png");
    t3.loadFromFile("images/frame.png");
    font.loadFromFile("Roboto-Regular.ttf");

    s.setTexture(t1);
    s.setScale(2, 2);
    frame.setTexture(t3);

    background.setSize(sf::Vector2f(720, 960));
    background.setFillColor(sf::Color(200, 220, 255, 180));

    // Initialize text objects
    // ... (Initialize all your texts here, similar to how you did in main)

    resetGame();
}

void Game::resetGame() {
    std::fill(&field[0][0], &field[0][0] + 23 * 10, 0);
    currentTetromino.generateNewTetromino();
    nextTetromino.generateNewTetromino();  // Khởi tạo tetromino tiếp theo
    score.reset();
    gameOver = false;
    timer = 0;
}

void Game::run() {
    while (window.isOpen()) {
        processEvents();
        update();
        render();
    }
}

void Game::processEvents() {
    sf::Event event;
    while (window.pollEvent(event)) {
        if (event.type == sf::Event::Closed)
            window.close();
        if (gameOver && event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Space) {
            resetGame();
        }
        // Handle other events like movement, rotation, etc.
    }
}

void Game::update() {
    if (gameOver) return;

    float time = clock.getElapsedTime().asSeconds();
    clock.restart();
    timer += time;

    // Handle game logic (movement, collision, line clearing)
    // ...

    if (timer > delay) {
        // Di chuyển tetromino xuống dưới
        // Kiểm tra va chạm, đặt tetromino, tạo tetromino mới, v.v.
        if (/* Nếu currentTetromino chạm đáy hoặc va chạm */) {
            for (const auto& p : currentTetromino.getBlockPositions()) {
                field[p.y][p.x] = currentTetromino.getColorNum();
            }

            currentTetromino = nextTetromino;  // Đổi tetromino tiếp theo thành tetromino hiện tại
            nextTetromino.generateNewTetromino();  // Tạo tetromino tiếp theo mới

            // Kiểm tra xem có hàng nào đầy không
            checkLines();
        }

        timer = 0;
    }

    if (score.getScore() > score.getHighScore()) {
        score.setHighScore(score.getScore());
    }
}

void Game::render() {
    window.clear(sf::Color::White);
    window.draw(background);
    
    // Vẽ tetromino hiện tại
    for (const auto& p : currentTetromino.getBlockPositions()) {
        s.setTextureRect(sf::IntRect(currentTetromino.getColorNum() * 18, 0, 18, 18));
        s.setPosition(p.x * 36, p.y * 36);
        s.move(28, 31);  // Dịch chuyển một chút để vẽ khung hình
        window.draw(s);
    }

    // Vẽ tetromino tiếp theo
    for (const auto& p : nextTetromino.getBlockPositions()) {
        s.setTextureRect(sf::IntRect(nextTetromino.getColorNum() * 18, 0, 18, 18));
        s.setPosition(p.x * 36, p.y * 36);
        s.move(350, 80);  // Chỉnh sửa vị trí để vẽ trong khu vực "Next"
        window.draw(s);
    }

    // Vẽ các phần tử khác của game: khung, text, score, v.v.
    // ...

    window.display();
}
Leave a Comment