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