Wt examples
3.3.12
tmp
package-src
examples
hangman
HangmanWidget.C
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2011 Emweb bvba, Heverlee, 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
}
RandomWord
std::wstring RandomWord(Dictionary dictionary)
Definition
Dictionary.C:16
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:40
HangmanWidget::badGuesses_
int badGuesses_
Definition
HangmanWidget.h:42
HangmanWidget::registerGuess
void registerGuess(char c)
Definition
HangmanWidget.C:74
HangmanWidget::letters_
LettersWidget * letters_
Definition
HangmanWidget.h:32
HangmanWidget::statusText_
Wt::WText * statusText_
Definition
HangmanWidget.h:34
HangmanWidget::language_
Wt::WComboBox * language_
Definition
HangmanWidget.h:35
HangmanWidget::newGame
void newGame()
Definition
HangmanWidget.C:55
HangmanWidget::images_
ImagesWidget * images_
Definition
HangmanWidget.h:31
HangmanWidget::title_
Wt::WText * title_
Definition
HangmanWidget.h:28
HangmanWidget::HangmanWidget
HangmanWidget(const std::string &name, Wt::WContainerWidget *parent=0)
Definition
HangmanWidget.C:27
HangmanWidget::scoreUpdated_
Wt::Signal< int > scoreUpdated_
Definition
HangmanWidget.h:38
HangmanWidget::word_
WordWidget * word_
Definition
HangmanWidget.h:30
HangmanWidget::newGameButton_
Wt::WPushButton * newGameButton_
Definition
HangmanWidget.h:36
ImagesWidget
Definition
ImagesWidget.h:16
ImagesWidget::showImage
void showImage(int index)
Definition
ImagesWidget.C:38
ImagesWidget::HURRAY
static const int HURRAY
Definition
ImagesWidget.h:18
LettersWidget
Definition
LettersWidget.h:20
LettersWidget::letterPushed
Wt::Signal< char > & letterPushed()
Definition
LettersWidget.h:26
LettersWidget::reset
void reset()
Definition
LettersWidget.C:53
WordWidget
Definition
WordWidget.h:14
WordWidget::word
std::wstring word() const
Definition
WordWidget.h:18
WordWidget::guess
bool guess(wchar_t c)
Definition
WordWidget.C:32
WordWidget::init
void init(const std::wstring &word)
Definition
WordWidget.C:19
WordWidget::won
bool won()
Definition
WordWidget.C:47
Wt::Signal::emit
void emit(A1 a1=NoClass::none, A2 a2=NoClass::none, A3 a3=NoClass::none, A4 a4=NoClass::none, A5 a5=NoClass::none, A6 a6=NoClass::none) const
Wt::Signal::connect
virtual Wt::Signals::connection connect(WObject *target, WObject::Method method)
Wt::WBreak
Wt::WComboBox
Wt::WComboBox::currentIndex
int currentIndex() const
Wt::WComboBox::addItem
void addItem(const WString &text)
Wt::WContainerWidget
Wt::WContainerWidget::setContentAlignment
void setContentAlignment(WFlags< AlignmentFlag > contentAlignment)
Wt::WInteractWidget::clicked
EventSignal< WMouseEvent > & clicked()
Wt::WPushButton
Wt::WString
Wt::WString::arg
WString & arg(const std::wstring &value)
Wt::WText
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
Wt::AlignCenter
AlignCenter
Generated on Fri May 17 2024 for
the C++ Web Toolkit (Wt)
by
1.9.8