Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "HangmanWidget.h"
00008
00009 #include <Wt/WText>
00010 #include <Wt/WPushButton>
00011 #include <Wt/WVBoxLayout>
00012 #include <boost/lexical_cast.hpp>
00013
00014 #include "Session.h"
00015 #include "WordWidget.h"
00016 #include "ImagesWidget.h"
00017 #include "LettersWidget.h"
00018
00019 using namespace Wt;
00020
00021 HangmanWidget::HangmanWidget(const std::string &name,
00022 Dictionary dictionary,
00023 WContainerWidget *parent):
00024 WContainerWidget(parent),
00025 name_(name),
00026 dictionary_(dictionary)
00027 {
00028 WVBoxLayout *layout = new WVBoxLayout();
00029 layout->setContentsMargins(0, 0, 0, 0);
00030 this->setLayout(layout);
00031
00032 title_ = new WText("<h2>Guess the word!</h2>");
00033 layout->addWidget(title_, 0, AlignCenter | AlignMiddle);
00034
00035 word_ = new WordWidget();
00036 layout->addWidget(word_, 0, AlignCenter | AlignMiddle);
00037
00038 statusText_ = new WText();
00039 layout->addWidget(statusText_, 0, AlignCenter | AlignMiddle);
00040
00041 images_ = new ImagesWidget();
00042 layout->addWidget(images_, 1, AlignCenter | AlignMiddle);
00043
00044 letters_ = new LettersWidget();
00045 layout->addWidget(letters_, 0, AlignCenter | AlignMiddle);
00046 letters_->letterPushed().connect(this, &HangmanWidget::registerGuess);
00047
00048 newGameButton_ = new WPushButton("New Game", this);
00049 newGameButton_->clicked().connect(this, &HangmanWidget::newGame);
00050 layout->addWidget(newGameButton_, 0, AlignCenter | AlignMiddle);
00051
00052
00053 newGame();
00054 }
00055
00056 void HangmanWidget::newGame()
00057 {
00058 WString title("<h2>Guess the word, {1}!</h2>");
00059 title_->setText(title.arg(name_));
00060
00061 newGameButton_->hide();
00062
00063
00064 word_->init(RandomWord(dictionary_));
00065 images_->init();
00066 letters_->init();
00067
00068 statusText_->setText("");
00069 }
00070
00071 void HangmanWidget::registerGuess(char c)
00072 {
00073 bool correct = word_->guess(c);
00074
00075 if (!correct)
00076 images_->badGuess();
00077
00078 if (images_->gameOver()) {
00079 WString status("You hang... <br />The correct answer was: {1} ");
00080 statusText_->setText(status.arg(word_->word()));
00081
00082 letters_->hide();
00083 newGameButton_->show();
00084
00085 updateScore_.emit(-10);
00086 } else if (word_->won()) {
00087 statusText_->setText("You win!");
00088 images_->hurray();
00089
00090 letters_->hide();
00091 newGameButton_->show();
00092
00093 updateScore_.emit(20 - images_->badGuesses());
00094 }
00095 }