Wt examples
4.3.0
builddir
build
BUILD
wt-4.3.0
examples
hangman
HangmanWidget.C
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2011 Emweb bv, Herent, Belgium
3
*
4
* See the LICENSE file for terms of use.
5
*/
6
7
#include "
HangmanWidget.h
"
8
9
#include <Wt/WBreak.h>
10
#include <Wt/WComboBox.h>
11
#include <Wt/WPushButton.h>
12
#include <Wt/WText.h>
13
#include <Wt/WAny.h>
14
15
#include "
Session.h
"
16
#include "
Dictionary.h
"
17
#include "
WordWidget.h
"
18
#include "
ImagesWidget.h
"
19
#include "
LettersWidget.h
"
20
21
using namespace
Wt
;
22
23
namespace
{
24
const
int
MaxGuesses = 9;
25
}
26
27
HangmanWidget::HangmanWidget
(
const
std::string &name)
28
:
WContainerWidget
(),
29
name_(name),
30
badGuesses_(0)
31
{
32
setContentAlignment
(AlignmentFlag::Center);
33
34
title_
=
addWidget
(cpp14::make_unique<WText>(
tr
(
"hangman.readyToPlay"
)));
35
36
word_
=
addWidget
(cpp14::make_unique<WordWidget>());
37
statusText_
=
addWidget
(cpp14::make_unique<WText>());
38
images_
=
addWidget
(cpp14::make_unique<ImagesWidget>(MaxGuesses));
39
40
letters_
=
addWidget
(cpp14::make_unique<LettersWidget>());
41
letters_
->
letterPushed
().
connect
(
this
, &
HangmanWidget::registerGuess
);
42
43
language_
=
addWidget
(cpp14::make_unique<WComboBox>());
44
language_
->
addItem
(
tr
(
"hangman.englishWords"
).arg(18957));
45
language_
->
addItem
(
tr
(
"hangman.dutchWords"
).arg(1688));
46
47
addWidget
(cpp14::make_unique<WBreak>());
48
49
newGameButton_
=
addWidget
(cpp14::make_unique<WPushButton>(
tr
(
"hangman.newGame"
)));
50
newGameButton_
->
clicked
().
connect
(
this
, &
HangmanWidget::newGame
);
51
52
letters_
->
hide
();
53
}
54
55
void
HangmanWidget::newGame
()
56
{
57
WString
title(
tr
(
"hangman.guessTheWord"
));
58
title_
->
setText
(title.
arg
(
name_
));
59
60
language_
->
hide
();
61
newGameButton_
->
hide
();
62
63
/*
64
* Choose a new secret word and reset the game
65
*/
66
Dictionary
dictionary = (
Dictionary
)
language_
->
currentIndex
();
67
word_
->
init
(
RandomWord
(dictionary));
68
letters_
->
reset
();
69
badGuesses_
= 0;
70
images_
->
showImage
(
badGuesses_
);
71
statusText_
->
setText
(
""
);
72
}
73
74
void
HangmanWidget::registerGuess
(
char
c)
75
{
76
if
(
badGuesses_
< MaxGuesses) {
77
bool
correct =
word_
->
guess
(c);
78
79
if
(!correct) {
80
++
badGuesses_
;
81
images_
->
showImage
(
badGuesses_
);
82
}
83
}
84
85
if
(
badGuesses_
== MaxGuesses) {
86
WString
status =
tr
(
"hangman.youHang"
);
87
statusText_
->
setText
(status.
arg
(
word_
->
word
()));
88
89
letters_
->
hide
();
90
language_
->
show
();
91
newGameButton_
->
show
();
92
93
scoreUpdated_
.
emit
(-10);
94
}
else
if
(
word_
->
won
()) {
95
statusText_
->
setText
(
tr
(
"hangman.youWin"
));
96
images_
->
showImage
(
ImagesWidget::HURRAY
);
97
98
letters_
->
hide
();
99
language_
->
show
();
100
newGameButton_
->
show
();
101
102
scoreUpdated_
.
emit
(20 -
badGuesses_
);
103
}
104
}
Wt
HangmanWidget::language_
Wt::WComboBox * language_
Definition:
HangmanWidget.h:35
Wt::WComboBox::currentIndex
int currentIndex() const
HangmanWidget::title_
Wt::WText * title_
Definition:
HangmanWidget.h:28
WordWidget::guess
bool guess(wchar_t c)
Definition:
WordWidget.C:32
LettersWidget::letterPushed
Signal< char > & letterPushed()
Definition:
LettersWidget.h:29
HangmanWidget::images_
ImagesWidget * images_
Definition:
HangmanWidget.h:31
HangmanWidget.h
WordWidget::won
bool won()
Definition:
WordWidget.C:47
HangmanWidget::scoreUpdated_
Wt::Signal< int > scoreUpdated_
Definition:
HangmanWidget.h:38
HangmanWidget::newGame
void newGame()
Definition:
HangmanWidget.C:55
WordWidget.h
HangmanWidget::HangmanWidget
HangmanWidget(const std::string &name)
Definition:
HangmanWidget.C:27
Wt::WWidget::hide
void hide()
Wt::WContainerWidget
HangmanWidget::newGameButton_
Wt::WPushButton * newGameButton_
Definition:
HangmanWidget.h:36
HangmanWidget::badGuesses_
int badGuesses_
Definition:
HangmanWidget.h:42
HangmanWidget::registerGuess
void registerGuess(char c)
Definition:
HangmanWidget.C:74
LettersWidget::reset
void reset()
Definition:
LettersWidget.C:61
Wt::WWidget::tr
static WString tr(const char *key)
Wt::WWidget::show
void show()
ImagesWidget.h
Wt::WContainerWidget::addWidget
virtual void addWidget(std::unique_ptr< WWidget > widget)
Wt::WString
Wt::WText::setText
bool setText(const WString &text)
RandomWord
std::wstring RandomWord(Dictionary dictionary)
Definition:
Dictionary.C:16
WordWidget::word
std::wstring word() const
Definition:
WordWidget.h:20
Wt::WInteractWidget::clicked
EventSignal< WMouseEvent > & clicked()
Wt::WString::arg
WString & arg(const std::wstring &value)
Wt::EventSignal::connect
Wt::Signals::connection connect(F function)
HangmanWidget::word_
WordWidget * word_
Definition:
HangmanWidget.h:30
WordWidget::init
void init(const std::wstring &word)
Definition:
WordWidget.C:19
Wt::Signal::connect
virtual Wt::Signals::connection connect(WObject *target, WObject::Method method) override
Wt::WContainerWidget::setContentAlignment
void setContentAlignment(WFlags< AlignmentFlag > contentAlignment)
Dictionary.h
HangmanWidget::name_
std::string name_
Definition:
HangmanWidget.h:40
ImagesWidget::HURRAY
static const int HURRAY
Definition:
ImagesWidget.h:20
LettersWidget.h
HangmanWidget::letters_
LettersWidget * letters_
Definition:
HangmanWidget.h:32
HangmanWidget::statusText_
Wt::WText * statusText_
Definition:
HangmanWidget.h:34
Dictionary
Dictionary
Definition:
Dictionary.h:15
ImagesWidget::showImage
void showImage(int index)
Definition:
ImagesWidget.C:36
Session.h
Wt::Signal::emit
void emit(A... args) const
Wt::WComboBox::addItem
void addItem(const WString &text)
Generated on Thu Mar 26 2020 for
the C++ Web Toolkit (Wt)
by
1.8.17