|
Wt examples
3.3.5
|
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/WBreak> 00010 #include <Wt/WComboBox> 00011 #include <Wt/WPushButton> 00012 #include <Wt/WText> 00013 #include <boost/lexical_cast.hpp> 00014 00015 #include "Session.h" 00016 #include "Dictionary.h" 00017 #include "WordWidget.h" 00018 #include "ImagesWidget.h" 00019 #include "LettersWidget.h" 00020 00021 using namespace Wt; 00022 00023 namespace { 00024 const int MaxGuesses = 9; 00025 } 00026 00027 HangmanWidget::HangmanWidget(const std::string &name, WContainerWidget *parent) 00028 : WContainerWidget(parent), 00029 name_(name), 00030 badGuesses_(0) 00031 { 00032 setContentAlignment(AlignCenter); 00033 00034 title_ = new WText(tr("hangman.readyToPlay"), this); 00035 00036 word_ = new WordWidget(this); 00037 statusText_ = new WText(this); 00038 images_ = new ImagesWidget(MaxGuesses, this); 00039 00040 letters_ = new LettersWidget(this); 00041 letters_->letterPushed().connect(this, &HangmanWidget::registerGuess); 00042 00043 language_ = new WComboBox(this); 00044 language_->addItem(tr("hangman.englishWords").arg(18957)); 00045 language_->addItem(tr("hangman.dutchWords").arg(1688)); 00046 00047 new WBreak(this); 00048 00049 newGameButton_ = new WPushButton(tr("hangman.newGame"), this); 00050 newGameButton_->clicked().connect(this, &HangmanWidget::newGame); 00051 00052 letters_->hide(); 00053 } 00054 00055 void HangmanWidget::newGame() 00056 { 00057 WString title(tr("hangman.guessTheWord")); 00058 title_->setText(title.arg(name_)); 00059 00060 language_->hide(); 00061 newGameButton_->hide(); 00062 00063 /* 00064 * Choose a new secret word and reset the game 00065 */ 00066 Dictionary dictionary = (Dictionary) language_->currentIndex(); 00067 word_->init(RandomWord(dictionary)); 00068 letters_->reset(); 00069 badGuesses_ = 0; 00070 images_->showImage(badGuesses_); 00071 statusText_->setText(""); 00072 } 00073 00074 void HangmanWidget::registerGuess(char c) 00075 { 00076 if (badGuesses_ < MaxGuesses) { 00077 bool correct = word_->guess(c); 00078 00079 if (!correct) { 00080 ++badGuesses_; 00081 images_->showImage(badGuesses_); 00082 } 00083 } 00084 00085 if (badGuesses_ == MaxGuesses) { 00086 WString status(tr("hangman.youHang")); 00087 statusText_->setText(status.arg(word_->word())); 00088 00089 letters_->hide(); 00090 language_->show(); 00091 newGameButton_->show(); 00092 00093 scoreUpdated_.emit(-10); 00094 } else if (word_->won()) { 00095 statusText_->setText(tr("hangman.youWin")); 00096 images_->showImage(ImagesWidget::HURRAY); 00097 00098 letters_->hide(); 00099 language_->show(); 00100 newGameButton_->show(); 00101 00102 scoreUpdated_.emit(20 - badGuesses_); 00103 } 00104 }
1.7.6.1