Question

In: Computer Science

Create a Hangman game using C++ by QT creator. please separate each code that will insert...

Create a Hangman game using C++ by QT creator.

please separate each code that will insert in hider files and cpp files and use an accurate screeshoots if needed.

Thanks in advance.

Solutions

Expert Solution

This is the working code for Hangman game developed by QT creator.

#include "HanGame.h"

#include <QFile>

#include <QDebug>

#include <QBuffer>

#include <QRandomGenerator>

#include <QtConcurrent/QtConcurrentRun>

// Code for HanGame.h header file

HanGame::HanGame(QObject *parent)

    : QObject(parent)

    , m_lock(QMutex::Recursive)

    , m_vowelsUnlocked(false)

{

    connect(this, &HanGame::vowelBought, this, &HanGame::registerLetterBought);

    QtConcurrent::run(this, &HanGame::initWordList);

    m_vowelsUnlocked = m_persistentSettings.value("Hangman/vowelsUnlocked", false).toBool();

    m_vowelsAvailable = m_persistentSettings.value("Hangman/vowelsAvailable", 0).toInt();

    m_wordsGiven = m_persistentSettings.value("Hangman/wordsGiven", 0).toInt();

    m_wordsGuessedCorrectly = m_persistentSettings.value("Hangman/wordsGuessedCorrectly", 0).toInt();

    m_score = m_persistentSettings.value("Hangman/score", 0).toInt();

}

// Game Reset Code

void HanGame::reset()

{

    m_lettersOwned.clear();

    emit lettersOwnedChanged();

    emit errorCountChanged();

    chooseRandomWord();

}

// Game reveal code

void HanGame::reveal()

{

    m_lettersOwned += vowels() + consonants();

    emit errorCountChanged();

    emit lettersOwnedChanged();

}

// Game Over Code

void HanGame::gameOverReveal()

{

    m_lettersOwned += vowels() + consonants();

    emit lettersOwnedChanged();

}

// Requesting code

void HanGame::requestLetter(const QString &letterString)

{

    Q_ASSERT(letterString.size() == 1);

    QChar letter = letterString.at(0);

    registerLetterBought(letter);

}

// Guess the word code

void HanGame::guessWord(const QString &word)

{

    if (word.compare(m_word, Qt::CaseInsensitive) == 0) {

        //Determine how many vowels were earned

        setVowelsAvailable(m_vowelsAvailable + calculateEarnedVowels());

        //score is number of remaining consonants + remaining errors

        setScore(m_score + calculateEarnedPoints());

        m_lettersOwned += m_word.toUpper();

    } else {

        // Small hack to get an additional penalty for guessing wrong

        static int i=0;

        Q_ASSERT(i < 10);

        m_lettersOwned += QString::number(i++);

        emit errorCountChanged();

    }

    emit lettersOwnedChanged();

}

// To check vowels

bool HanGame::isVowel(const QString &letter)

{

    Q_ASSERT(letter.size() == 1);

    QChar letterChar = letter.at(0);

    return vowels().contains(letterChar);

}

QString HanGame::vowels() const

{

    return QStringLiteral("AEIOU");

}

// Check Constanants

QString HanGame::consonants() const

{

    return QStringLiteral("BCDFGHJKLMNPQRSTVWXYZ");

}

int HanGame::errorCount() const

{

    int count = 0;

    for (QChar c : m_lettersOwned) {

        if (!m_word.contains(c))

            ++count;

    }

    return count;

}

bool HanGame::vowelsUnlocked() const

{

    return m_vowelsUnlocked;

}

void HanGame::setVowelsUnlocked(bool vowelsUnlocked)

{

    if (m_vowelsUnlocked != vowelsUnlocked) {

        m_vowelsUnlocked = vowelsUnlocked;

        m_persistentSettings.setValue("Hangman/vowelsUnlocked", m_vowelsUnlocked);

        emit vowelsUnlockedChanged(m_vowelsUnlocked);

    }

}

int HanGame::vowelsAvailable() const

{

    return m_vowelsAvailable;

}

int HanGame::wordsGiven() const

{

    return m_wordsGiven;

}

int HanGame::wordsGuessedCorrectly() const

{

    return m_wordsGuessedCorrectly;

}

// Calculating the score

int HanGame::score() const

{

    return m_score;

}

void HanGame::setScore(int score)

{

    if (m_score != score) {

        m_score = score;

        m_persistentSettings.setValue("Hangman/score", m_score);

        emit scoreChanged(score);

    }

}

void HanGame::setWordsGiven(int count)

{

    if (m_wordsGiven != count) {

        m_wordsGiven = count;

        m_persistentSettings.setValue("Hangman/wordsGiven", m_wordsGiven);

        emit wordsGivenChanged(count);

    }

}

// Executes when guessed correctly

void HanGame::setWordsGuessedCorrectly(int count)

{

    if (m_wordsGuessedCorrectly != count) {

        m_wordsGuessedCorrectly = count;

        m_persistentSettings.setValue("Hangman/wordsGuessedCorrectly", m_wordsGuessedCorrectly);

        emit wordsGuessedCorrectlyChanged(count);

    }

}

void HanGame::setVowelsAvailable(int count)

{

    if (m_vowelsAvailable != count) {

        m_vowelsAvailable = count;

        m_persistentSettings.setValue("Hangman/vowelsAvailable", m_vowelsAvailable);

        emit vowelsAvailableChanged(count);

    }

}

void HanGame::registerLetterBought(const QChar &letter)

{

    if (m_lettersOwned.contains(letter))

        return;

    m_lettersOwned.append(letter);

    emit lettersOwnedChanged();

    if (!m_word.contains(letter))

        emit errorCountChanged();

}

// Finding random words

void HanGame::chooseRandomWord()

{

    QMutexLocker locker(&m_lock);

    if (m_wordList.isEmpty())

        return;

    m_word = m_wordList.at(QRandomGenerator::global()->bounded(m_wordList.size()));

    emit wordChanged();

}

void HanGame::initWordList()

{

    QMutexLocker locker(&m_lock);

    QFile file(":/enable2.txt");

    if (file.open(QIODevice::ReadOnly)) {

        QByteArray allData = file.readAll();

        QBuffer buffer(&allData);

        if (!buffer.open(QIODevice::ReadOnly))

           qFatal("Couldn't open buffer for reading!");

        while (!buffer.atEnd()) {

            QByteArray ba = buffer.readLine().trimmed().toUpper();

            if (!ba.isEmpty() && ba.length() < 10)

                m_wordList.append(QString::fromLatin1(ba));

        }

    }

    chooseRandomWord();

}

int HanGame::calculateEarnedVowels()

{

    int total = 0;

    for (int i = 0; i < m_word.length(); ++i) {

        if (isVowel(QString(m_word[i])) && !m_lettersOwned.contains(QString(m_word[i])))

            total++;

    }

    return total;

}

int HanGame::calculateEarnedPoints()

{

    int total = 0;

    for (int i = 0; i < m_word.length(); ++i) {

        if (consonants().contains(QString(m_word[i])) && !m_lettersOwned.contains(QString(m_word[i])))

            total++;

    }

    total += 8 - errorCount();

    return total;

}


Related Solutions

Please create a Hangman game in Java language. For this game a random word will be...
Please create a Hangman game in Java language. For this game a random word will be selected from the following list (abstract, cemetery, nurse, pharmacy, climbing). You should keep a running tab of the user’s score and display it on screen; the user begins with 100 points possible if they correctly guess the word without any mistakes. For every incorrect letter which is guessed, 10 points should be taken away from what is left of their total possible points. For...
In python Using the example code from the HangMan program in our textbook, create a Word...
In python Using the example code from the HangMan program in our textbook, create a Word Guessing Game of your choice. Design a guessing game of your own creation. Choose a theme and build your words around that theme. Keep it simple. Note: I would highly recommend closely reviewing the HangMan code and program from Chapter 10 before starting work on this project. You can run the program via my REPL (Links to an external site.). Using python Similar to...
Create a C++ code for the mastermind game using classes(private classes and public classes). Using this...
Create a C++ code for the mastermind game using classes(private classes and public classes). Using this uml as a reference.
Can you create a player vs computer Hangman game on MATLAB using nested loops, for loops,...
Can you create a player vs computer Hangman game on MATLAB using nested loops, for loops, if loops, while loops, arrays and conditional execution, as well as creating an image of the game board. The list below must be considered in the code. - Selecting a word from a dictionary (a text file) - Reading a single letter from the user - Building a character array showing the letters matched so far - Keeping count of the number of guessed...
Project 6-1: Email Creator C++ code Create a program that reads a file and creates a...
Project 6-1: Email Creator C++ code Create a program that reads a file and creates a series of emails. Console Email Creator ================================================================ To:      [email protected] From:    [email protected] Subject: Deals! Hi James, We've got some great deals for you. Check our website! ================================================================ To:      [email protected] From:    [email protected] Subject: Deals! Hi Josephine, We've got some great deals for you. Check our website! ================================================================ To:      [email protected] From:    [email protected] Subject: Deals! Hi Art, We've got some great deals for you. Check our website! Specifications...
Using C# Windows App Form Create a simple calculator using +,-,*,/ Please show code GUI Code...
Using C# Windows App Form Create a simple calculator using +,-,*,/ Please show code GUI Code for calculator menus radio button input text boxes
How would I create a Hangman game that chooses  a random word and the player needs to...
How would I create a Hangman game that chooses  a random word and the player needs to guess it, letter by letter using  JavaScript and jQuery to allow user interaction. The content and the style of the page must be updated based on user’s input.
For this assignment, you will create a command-line version of the game ​Hangman. You should work...
For this assignment, you will create a command-line version of the game ​Hangman. You should work in a group of two on the project and not view Hangman code of other students or found on-line. Submit this project-- your .java file-- here on Canvas. For this assignment you will research on StringBuilder Class (​Use this link​) and use it in your code. Functional requirements (rubric) ● Your game should have a list of at least ten phrases of your choosing...
please submit the C code( no third party library). the C code will create output to...
please submit the C code( no third party library). the C code will create output to a file, and iterate in a loop 60 times and each iteration is 1 second, and if any key from your keyboard is pressed will write a 1 in the file, for every second no key is pressed, will write a 0 into the output file.
I need to create a code in C++ that first has a menu animation of game...
I need to create a code in C++ that first has a menu animation of game Pacman, a score label in the map, and a bar that have the lives of pacman in the map.
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT