Wt examples
3.7.1
public-git
wt
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>
10
#include <Wt/WComboBox>
11
#include <Wt/WPushButton>
12
#include <Wt/WText>
13
#include <boost/lexical_cast.hpp>
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,
WContainerWidget
*parent)
28
:
WContainerWidget
(parent),
29
name_(name),
30
badGuesses_(0)
31
{
32
setContentAlignment
(AlignCenter);
33
34
title_
=
new
WText
(
tr
(
"hangman.readyToPlay"
),
this
);
35
36
word_
=
new
WordWidget
(
this
);
37
statusText_
=
new
WText
(
this
);
38
images_
=
new
ImagesWidget
(MaxGuesses,
this
);
39
40
letters_
=
new
LettersWidget
(
this
);
41
letters_
->
letterPushed
().
connect
(
this
, &
HangmanWidget::registerGuess
);
42
43
language_
=
new
WComboBox
(
this
);
44
language_
->
addItem
(
tr
(
"hangman.englishWords"
).arg(18957));
45
language_
->
addItem
(
tr
(
"hangman.dutchWords"
).arg(1688));
46
47
new
WBreak
(
this
);
48
49
newGameButton_
=
new
WPushButton
(
tr
(
"hangman.newGame"
),
this
);
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
}
Session.h
WordWidget::word
std::wstring word() const
Definition:
WordWidget.h:18
WordWidget
Definition:
WordWidget.h:13
Dictionary.h
HangmanWidget::scoreUpdated_
Wt::Signal< int > scoreUpdated_
Definition:
HangmanWidget.h:38
HangmanWidget::newGame
void newGame()
Definition:
HangmanWidget.C:55
Wt::WString::arg
WString & arg(const std::wstring &value)
Wt::WInteractWidget::clicked
EventSignal< WMouseEvent > & clicked()
LettersWidget.h
LettersWidget::reset
void reset()
Definition:
LettersWidget.C:53
ImagesWidget.h
Wt::WWidget::tr
static WString tr(const char *key)
Wt::WComboBox::addItem
void addItem(const WString &text)
Wt::WWidget::show
void show()
Wt::WText
HangmanWidget::images_
ImagesWidget * images_
Definition:
HangmanWidget.h:31
LettersWidget
Definition:
LettersWidget.h:19
WordWidget::init
void init(const std::wstring &word)
Definition:
WordWidget.C:19
Wt::WWidget::hide
void hide()
Wt::WContainerWidget::setContentAlignment
void setContentAlignment(WFlags< AlignmentFlag > contentAlignment)
Wt::Signal::emit
void emit(A... args) const
ImagesWidget::showImage
void showImage(int index)
Definition:
ImagesWidget.C:38
Wt::WText::setText
bool setText(const WString &text)
HangmanWidget::HangmanWidget
HangmanWidget(const std::string &name, Wt::WContainerWidget *parent=0)
Definition:
HangmanWidget.C:27
HangmanWidget::language_
Wt::WComboBox * language_
Definition:
HangmanWidget.h:35
ImagesWidget::HURRAY
static const int HURRAY
Definition:
ImagesWidget.h:18
HangmanWidget::word_
WordWidget * word_
Definition:
HangmanWidget.h:30
Wt::WPushButton
WordWidget.h
WordWidget::guess
bool guess(wchar_t c)
Definition:
WordWidget.C:32
HangmanWidget::newGameButton_
Wt::WPushButton * newGameButton_
Definition:
HangmanWidget.h:36
Dictionary
Dictionary
Definition:
Dictionary.h:13
Wt::WString
WordWidget::won
bool won()
Definition:
WordWidget.C:47
HangmanWidget::letters_
LettersWidget * letters_
Definition:
HangmanWidget.h:32
HangmanWidget::name_
std::string name_
Definition:
HangmanWidget.h:40
Wt
Wt::WComboBox
RandomWord
std::wstring RandomWord(Dictionary dictionary)
Definition:
Dictionary.C:16
Wt::WContainerWidget
Wt::WComboBox::currentIndex
int currentIndex() const
LettersWidget::letterPushed
Wt::Signal< char > & letterPushed()
Definition:
LettersWidget.h:26
HangmanWidget::badGuesses_
int badGuesses_
Definition:
HangmanWidget.h:42
HangmanWidget::statusText_
Wt::WText * statusText_
Definition:
HangmanWidget.h:34
HangmanWidget::title_
Wt::WText * title_
Definition:
HangmanWidget.h:28
Wt::Signal::connect
virtual Wt::Signals::connection connect(WObject *target, WObject::Method method) override
HangmanWidget.h
ImagesWidget
Definition:
ImagesWidget.h:15
Wt::WBreak
HangmanWidget::registerGuess
void registerGuess(char c)
Definition:
HangmanWidget.C:74
Generated on Tue Dec 15 2020 for
the C++ Web Toolkit (Wt)
by
1.8.13