Wt examples
4.11.3
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
: name_(name)
29
{
30
setContentAlignment
(AlignmentFlag::Center);
31
32
title_
= addNew<WText>(
tr
(
"hangman.readyToPlay"
));
33
34
word_
= addNew<WordWidget>();
35
statusText_
= addNew<WText>();
36
images_
= addNew<ImagesWidget>(MaxGuesses);
37
38
letters_
= addNew<LettersWidget>();
39
letters_
->
letterPushed
().
connect
(
this
, &
HangmanWidget::registerGuess
);
40
41
language_
= addNew<WComboBox>();
42
language_
->
addItem
(
tr
(
"hangman.englishWords"
).arg(18957));
43
language_
->
addItem
(
tr
(
"hangman.dutchWords"
).arg(1688));
44
45
addNew<WBreak>();
46
47
newGameButton_
= addNew<WPushButton>(
tr
(
"hangman.newGame"
));
48
newGameButton_
->
clicked
().
connect
(
this
, &
HangmanWidget::newGame
);
49
50
letters_
->
hide
();
51
}
52
53
void
HangmanWidget::newGame
()
54
{
55
WString
title(
tr
(
"hangman.guessTheWord"
));
56
title_
->
setText
(title.
arg
(
name_
));
57
58
language_
->
hide
();
59
newGameButton_
->
hide
();
60
61
/*
62
* Choose a new secret word and reset the game
63
*/
64
auto
dictionary =
static_cast<
Dictionary
>
(
language_
->
currentIndex
());
65
word_
->
init
(
randomWord
(dictionary));
66
letters_
->
reset
();
67
badGuesses_
= 0;
68
images_
->
showImage
(
badGuesses_
);
69
statusText_
->
setText
(
""
);
70
}
71
72
void
HangmanWidget::registerGuess
(
char
c)
73
{
74
if
(
badGuesses_
< MaxGuesses) {
75
bool
correct =
word_
->
guess
(c);
76
77
if
(!correct) {
78
++
badGuesses_
;
79
images_
->
showImage
(
badGuesses_
);
80
}
81
}
82
83
if
(
badGuesses_
== MaxGuesses) {
84
WString
status =
tr
(
"hangman.youHang"
);
85
statusText_
->
setText
(status.
arg
(
word_
->
word
()));
86
87
letters_
->
hide
();
88
language_
->
show
();
89
newGameButton_
->
show
();
90
91
scoreUpdated_
.emit(-10);
92
}
else
if
(
word_
->
won
()) {
93
statusText_
->
setText
(
tr
(
"hangman.youWin"
));
94
images_
->
showImage
(
ImagesWidget::HURRAY
);
95
96
letters_
->
hide
();
97
language_
->
show
();
98
newGameButton_
->
show
();
99
100
scoreUpdated_
.emit(20 -
badGuesses_
);
101
}
102
}
randomWord
std::string randomWord(Dictionary dictionary)
Definition:
Dictionary.C:14
Dictionary.h
Dictionary
Dictionary
Definition:
Dictionary.h:13
HangmanWidget.h
ImagesWidget.h
LettersWidget.h
Session.h
WordWidget.h
HangmanWidget::name_
std::string name_
Definition:
HangmanWidget.h:39
HangmanWidget::badGuesses_
int badGuesses_
Definition:
HangmanWidget.h:41
HangmanWidget::registerGuess
void registerGuess(char c)
Definition:
HangmanWidget.C:72
HangmanWidget::letters_
LettersWidget * letters_
Definition:
HangmanWidget.h:31
HangmanWidget::statusText_
Wt::WText * statusText_
Definition:
HangmanWidget.h:33
HangmanWidget::language_
Wt::WComboBox * language_
Definition:
HangmanWidget.h:34
HangmanWidget::newGame
void newGame()
Definition:
HangmanWidget.C:53
HangmanWidget::images_
ImagesWidget * images_
Definition:
HangmanWidget.h:30
HangmanWidget::title_
Wt::WText * title_
Definition:
HangmanWidget.h:27
HangmanWidget::HangmanWidget
HangmanWidget(const std::string &name)
Definition:
HangmanWidget.C:27
HangmanWidget::scoreUpdated_
Wt::Signal< int > scoreUpdated_
Definition:
HangmanWidget.h:37
HangmanWidget::word_
WordWidget * word_
Definition:
HangmanWidget.h:29
HangmanWidget::newGameButton_
Wt::WPushButton * newGameButton_
Definition:
HangmanWidget.h:35
ImagesWidget::showImage
void showImage(int index)
Definition:
ImagesWidget.C:36
ImagesWidget::HURRAY
static const int HURRAY
Definition:
ImagesWidget.h:18
LettersWidget::letterPushed
Wt::Signal< char > & letterPushed()
Definition:
LettersWidget.h:27
LettersWidget::reset
void reset()
Definition:
LettersWidget.C:57
WordWidget::init
void init(const std::string &word)
Definition:
WordWidget.C:16
WordWidget::guess
bool guess(char c)
Definition:
WordWidget.C:29
WordWidget::word
std::string word() const
Definition:
WordWidget.h:18
WordWidget::won
bool won()
Definition:
WordWidget.C:44
Wt::EventSignal::connect
Wt::Signals::connection connect(F function)
Wt::Signal::connect
virtual Wt::Signals::connection connect(WObject *target, WObject::Method method) override
Wt::WComboBox::currentIndex
int currentIndex() const
Wt::WComboBox::addItem
void addItem(const WString &text)
Wt::WContainerWidget::setContentAlignment
void setContentAlignment(WFlags< AlignmentFlag > contentAlignment)
Wt::WInteractWidget::clicked
EventSignal< WMouseEvent > & clicked()
Wt::WString
Wt::WString::arg
WString & arg(const std::wstring &value)
Wt::WText::setText
bool setText(const WString &text)
Wt::WWidget::hide
void hide()
Wt::WWidget::show
void show()
Wt::WWidget::tr
static WString tr(const char *key)
Wt
Generated on Wed Feb 19 2025 for
the C++ Web Toolkit (Wt)
by
1.9.1