summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pacman-c++/actor.cpp8
-rw-r--r--pacman-c++/bonuspoint.cpp2
-rw-r--r--pacman-c++/constants.h21
-rw-r--r--pacman-c++/mainwidget.cpp134
-rw-r--r--pacman-c++/mainwidget.h10
5 files changed, 94 insertions, 81 deletions
diff --git a/pacman-c++/actor.cpp b/pacman-c++/actor.cpp
index 3794b63..cfd832c 100644
--- a/pacman-c++/actor.cpp
+++ b/pacman-c++/actor.cpp
@@ -22,7 +22,7 @@ Actor::Actor(Color::Color color, QGraphicsItem *parent)
22 22
23 /* setup icon for player */ 23 /* setup icon for player */
24 m_icon.setPixmap(m_pix); 24 m_icon.setPixmap(m_pix);
25 m_icon.setSprite(SPRITE_MARGIN, SPRITE_MARGIN, SPRITE_WIDTH, SPRITE_HEIGHT); 25 m_icon.setSprite(Constants::sprite_margin, Constants::sprite_margin, Constants::field_size.width, Constants::field_size.height);
26 26
27 m_direction = Actor::Left; 27 m_direction = Actor::Left;
28 28
@@ -35,9 +35,9 @@ Actor::Actor(Color::Color color, QGraphicsItem *parent)
35 for (int i = 0; i < 4; i++) 35 for (int i = 0; i < 4; i++)
36 { 36 {
37 PixmapItem *img = new PixmapItem(m_pix, this); 37 PixmapItem *img = new PixmapItem(m_pix, this);
38 int x = i * 20 + SPRITE_MARGIN; 38 int x = i * 20 + Constants::sprite_margin;
39 int y = m_direction * 20 + SPRITE_MARGIN; 39 int y = m_direction * 20 + Constants::sprite_margin;
40 img->setSprite(x, y, SPRITE_WIDTH, SPRITE_HEIGHT); 40 img->setSprite(x, y, Constants::field_size.width, Constants::field_size.height);
41 img->setZValue(zValue()); 41 img->setZValue(zValue());
42 img->setVisible(false); 42 img->setVisible(false);
43 img->setPos(QPointF(200, 0)); 43 img->setPos(QPointF(200, 0));
diff --git a/pacman-c++/bonuspoint.cpp b/pacman-c++/bonuspoint.cpp
index 8ebc195..0517c64 100644
--- a/pacman-c++/bonuspoint.cpp
+++ b/pacman-c++/bonuspoint.cpp
@@ -17,5 +17,5 @@ BonusPoint::BonusPoint(QGraphicsItem *parent)
17 setPixmap(*pixmap); 17 setPixmap(*pixmap);
18 18
19 int rand = (int) (BONUSPOINTS_NUM_SPRITES * (qrand() / (RAND_MAX + 1.0))); 19 int rand = (int) (BONUSPOINTS_NUM_SPRITES * (qrand() / (RAND_MAX + 1.0)));
20 setSprite(rand * 20 + SPRITE_MARGIN, SPRITE_MARGIN, SPRITE_WIDTH, SPRITE_HEIGHT); 20 setSprite(rand * 20 + Constants::sprite_margin, Constants::sprite_margin, Constants::field_size.width, Constants::field_size.height);
21} 21}
diff --git a/pacman-c++/constants.h b/pacman-c++/constants.h
index 15d3022..34f29d0 100644
--- a/pacman-c++/constants.h
+++ b/pacman-c++/constants.h
@@ -1,12 +1,17 @@
1#ifndef CONSTANTS_H 1#ifndef CONSTANTS_H
2#define CONSTANTS_H 2#define CONSTANTS_H
3 3
4#define SPRITE_MARGIN 2 4namespace Constants {
5#define SPRITE_WIDTH 16
6#define SPRITE_HEIGHT 16
7 5
8const unsigned int map_size[2] = { 20, 20 }; 6 const struct {
9const unsigned int field_size[2] = { 16, 16 }; 7 const unsigned int width, height;
8 } field_size = { 16, 16 },
9 map_size = { 20, 20 },
10 map_size_pixel = { field_size.width * map_size.width,
11 field_size.height * map_size.height};
12
13 const unsigned int sprite_margin = 2;
14}
10 15
11namespace Color 16namespace Color
12{ 17{
@@ -18,13 +23,13 @@ namespace Color
18 green = (1 << 2), 23 green = (1 << 2),
19 }; 24 };
20} 25}
21 26
22// constants for data transmission to client 27// constants for data transmission to client
23namespace transmission 28namespace Transmission
24{ 29{
25 typedef unsigned int field_t; 30 typedef unsigned int field_t;
26 typedef unsigned int mask_t; 31 typedef unsigned int mask_t;
27 32
28 const field_t block = (1 << 3); 33 const field_t block = (1 << 3);
29 const field_t bonuspoint = (1 << 4); 34 const field_t bonuspoint = (1 << 4);
30 const field_t pacman = (1 << 5); 35 const field_t pacman = (1 << 5);
diff --git a/pacman-c++/mainwidget.cpp b/pacman-c++/mainwidget.cpp
index e9b4cc3..809e786 100644
--- a/pacman-c++/mainwidget.cpp
+++ b/pacman-c++/mainwidget.cpp
@@ -5,9 +5,53 @@
5#include "bonuspoint.h" 5#include "bonuspoint.h"
6#include "constants.h" 6#include "constants.h"
7 7
8// temporary
9Transmission::map_t createDummyMap()
10{
11 Transmission::map_t map;
12 map = new Transmission::field_t*[Constants::map_size.width];
13 for (unsigned int i = 0; i < Constants::map_size.width; ++i)
14 map[i] = new Transmission::field_t[Constants::map_size.height];
15
16 for (unsigned int x = 0; x < Constants::map_size.width; ++x)
17 {
18 for (unsigned int y = 0; y < Constants::map_size.height; ++y)
19 {
20 Transmission::field_t &cur = map[x][y];
21 cur = 0;
22 }
23 }
24
25 map[0][0] |= Color::none ^ Transmission::block;
26 map[0][1] |= Color::none ^ Transmission::block;
27 map[0][2] |= Color::none ^ Transmission::block;
28 map[1][0] |= Color::none ^ Transmission::block;
29 map[2][0] |= Color::none ^ Transmission::block;
30
31 map[4][3] |= Color::green ^ Transmission::block;
32
33 map[5][3] |= Color::none ^ Transmission::block;
34 map[6][3] |= Color::none ^ Transmission::block;
35 map[7][3] |= Color::red ^ Transmission::block;
36
37 map[7][5] |= Transmission::bonuspoint;
38
39 map[5][5] |= Color::blue;
40 map[5][5] |= Transmission::pacman;
41 map[5][5] |= Transmission::direction_left;
42
43 return map;
44}
45
8MainWidget::MainWidget() 46MainWidget::MainWidget()
9 : currentKey(0) 47 : currentKey(0)
10{ 48{
49 createGui();
50 updateMap(createDummyMap());
51}
52
53void MainWidget::createGui()
54{
11 setFocusPolicy(Qt::StrongFocus); 55 setFocusPolicy(Qt::StrongFocus);
12 56
13 QVBoxLayout *layout = new QVBoxLayout(this); 57 QVBoxLayout *layout = new QVBoxLayout(this);
@@ -30,24 +74,23 @@ MainWidget::MainWidget()
30 m_playerScoreLayouts.append(playerLayout); 74 m_playerScoreLayouts.append(playerLayout);
31 } 75 }
32 76
33 m_scene = new QGraphicsScene(0, 0, 500, 500, this); 77 m_scene = new QGraphicsScene(0, 0, Constants::map_size_pixel.width, Constants::map_size_pixel.height, this);
34 m_scene->setBackgroundBrush(Qt::black); 78 m_scene->setBackgroundBrush(Qt::black);
35 79
36 QGraphicsView *window = new QGraphicsView(m_scene, this); 80 QGraphicsView *window = new QGraphicsView(m_scene, this);
37 window->setFrameStyle(0); 81 window->setFrameStyle(0);
38 window->setAlignment(Qt::AlignLeft | Qt::AlignTop); 82 window->setAlignment(Qt::AlignLeft | Qt::AlignTop);
39 window->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 83 //window->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
40 window->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 84 //window->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
41 85
42 layout->addLayout(m_scoreLayout); 86 layout->addLayout(m_scoreLayout);
43 layout->addWidget(window); 87 layout->addWidget(window);
44 88
45 setLayout(layout); 89 setLayout(layout);
46 setWindowTitle("pacman client"); 90 setWindowTitle("pacman client");
47
48 loadDummyMap();
49} 91}
50 92
93
51void MainWidget::updateScore() 94void MainWidget::updateScore()
52{ 95{
53 QMapIterator<Color::Color, Actor*> i(m_actors); 96 QMapIterator<Color::Color, Actor*> i(m_actors);
@@ -66,66 +109,27 @@ void MainWidget::updateScore()
66 } 109 }
67} 110}
68 111
69// temporary
70transmission::map_t createDummyMap()
71{
72 transmission::map_t map;
73 map = new transmission::field_t*[map_size[0]];
74 for (unsigned int i = 0; i < map_size[0]; ++i)
75 map[i] = new transmission::field_t[map_size[1]];
76
77 for (unsigned int x = 0; x < map_size[0]; ++x)
78 {
79 for (unsigned int y = 0; y < map_size[1]; ++y)
80 {
81 transmission::field_t &cur = map[x][y];
82 cur = 0;
83 }
84 }
85
86 map[0][0] |= Color::none ^ transmission::block;
87 map[0][1] |= Color::none ^ transmission::block;
88 map[0][2] |= Color::none ^ transmission::block;
89 map[1][0] |= Color::none ^ transmission::block;
90 map[2][0] |= Color::none ^ transmission::block;
91
92 map[4][3] |= Color::green ^ transmission::block;
93
94 map[5][3] |= Color::none ^ transmission::block;
95 map[6][3] |= Color::none ^ transmission::block;
96 map[7][3] |= Color::red ^ transmission::block;
97
98 map[7][5] |= transmission::bonuspoint;
99
100 map[5][5] |= Color::blue;
101 map[5][5] |= transmission::pacman;
102 map[5][5] |= transmission::direction_left;
103
104 return map;
105}
106 112
107void MainWidget::loadDummyMap() 113void MainWidget::updateMap(const Transmission::map_t& map)
108{ 114{
109 transmission::map_t map = createDummyMap(); 115 for (unsigned int x = 0; x < Constants::map_size.width; ++x)
110
111 for (unsigned int x = 0; x < map_size[0]; ++x)
112 { 116 {
113 for (unsigned int y = 0; y < map_size[1]; ++y) 117 for (unsigned int y = 0; y < Constants::map_size.height; ++y)
114 { 118 {
115 const transmission::field_t &cur = map[x][y]; 119 const Transmission::field_t &cur = map[x][y];
116 if (cur == 0) 120 if (cur == 0)
117 continue; 121 continue;
118 qDebug() << "not 0 at x=" << x << ", y=" << y << ", val=" << cur; 122 qDebug() << "not 0 at x=" << x << ", y=" << y << ", val=" << cur;
119 123
120 Color::Color color = static_cast<Color::Color>(cur & transmission::color_mask); 124 Color::Color color = static_cast<Color::Color>(cur & Transmission::color_mask);
121 qDebug() << "col=" << color; 125 qDebug() << "col=" << color;
122 126
123 PixmapItem *item = 0; 127 PixmapItem *item = 0;
124 if (cur & transmission::block) 128 if (cur & Transmission::block)
125 item = new Block(color); 129 item = new Block(color);
126 else if (cur & transmission::bonuspoint) 130 else if (cur & Transmission::bonuspoint)
127 item = new BonusPoint(); 131 item = new BonusPoint();
128 else if (cur & transmission::pacman) 132 else if (cur & Transmission::pacman)
129 { 133 {
130 Actor *actor = m_actors.value(color, 0); 134 Actor *actor = m_actors.value(color, 0);
131 if (actor == 0) { // 0 entspricht NULL ;) 135 if (actor == 0) { // 0 entspricht NULL ;)
@@ -137,21 +141,21 @@ void MainWidget::loadDummyMap()
137 } 141 }
138 142
139 Actor::Movement direction; 143 Actor::Movement direction;
140 switch (cur & transmission::direction_mask) 144 switch (cur & Transmission::direction_mask)
141 { 145 {
142 case transmission::direction_none: 146 case Transmission::direction_none:
143 direction = Actor::None; 147 direction = Actor::None;
144 break; 148 break;
145 case transmission::direction_left: 149 case Transmission::direction_left:
146 direction = Actor::Left; 150 direction = Actor::Left;
147 break; 151 break;
148 case transmission::direction_right: 152 case Transmission::direction_right:
149 direction = Actor::Right; 153 direction = Actor::Right;
150 break; 154 break;
151 case transmission::direction_up: 155 case Transmission::direction_up:
152 direction = Actor::Up; 156 direction = Actor::Up;
153 break; 157 break;
154 case transmission::direction_down: 158 case Transmission::direction_down:
155 direction = Actor::Down; 159 direction = Actor::Down;
156 break; 160 break;
157 default: 161 default:
@@ -174,23 +178,23 @@ void MainWidget::loadDummyMap()
174 178
175QPoint MainWidget::mapPositionToCoord(unsigned int x, unsigned int y) 179QPoint MainWidget::mapPositionToCoord(unsigned int x, unsigned int y)
176{ 180{
177 return QPoint(x * field_size[0], y * field_size[1]); 181 return QPoint(x * Constants::field_size.width, y * Constants::field_size.height);
178} 182}
179 183
180transmission::field_t MainWidget::translateKey(int key) 184Transmission::field_t MainWidget::translateKey(int key)
181{ 185{
182 switch(key) { 186 switch(key) {
183 case Qt::Key_Up: 187 case Qt::Key_Up:
184 return transmission::direction_up; 188 return Transmission::direction_up;
185 break; 189 break;
186 case Qt::Key_Down: 190 case Qt::Key_Down:
187 return transmission::direction_down; 191 return Transmission::direction_down;
188 break; 192 break;
189 case Qt::Key_Left: 193 case Qt::Key_Left:
190 return transmission::direction_left; 194 return Transmission::direction_left;
191 break; 195 break;
192 case Qt::Key_Right: 196 case Qt::Key_Right:
193 return transmission::direction_right; 197 return Transmission::direction_right;
194 break; 198 break;
195 default: 199 default:
196 return 0; 200 return 0;
@@ -206,7 +210,7 @@ void MainWidget::keyPressEvent(QKeyEvent* event)
206void MainWidget::keyReleaseEvent(QKeyEvent* event) 210void MainWidget::keyReleaseEvent(QKeyEvent* event)
207{ 211{
208 QWidget::keyReleaseEvent(event); 212 QWidget::keyReleaseEvent(event);
209 transmission::field_t releasedKey = translateKey(event->key()); 213 Transmission::field_t releasedKey = translateKey(event->key());
210 if (releasedKey == currentKey) { 214 if (releasedKey == currentKey) {
211 // current key got released 215 // current key got released
212 // if this is false, a key got released which has already 216 // if this is false, a key got released which has already
diff --git a/pacman-c++/mainwidget.h b/pacman-c++/mainwidget.h
index 0a97116..0056669 100644
--- a/pacman-c++/mainwidget.h
+++ b/pacman-c++/mainwidget.h
@@ -21,10 +21,14 @@ protected:
21 virtual void keyReleaseEvent(QKeyEvent* ); 21 virtual void keyReleaseEvent(QKeyEvent* );
22 22
23private: 23private:
24 void loadDummyMap(); 24 void createGui();
25
26 void updateMap(const Transmission::map_t& map);
25 27
26 void updateScore(); 28 void updateScore();
27 29
30 Transmission::map_t currentMap;
31
28 // data conversion 32 // data conversion
29 QPoint mapPositionToCoord(unsigned int x, unsigned int y); 33 QPoint mapPositionToCoord(unsigned int x, unsigned int y);
30 34
@@ -36,10 +40,10 @@ private:
36 QMap<Color::Color, Actor*> m_actors; 40 QMap<Color::Color, Actor*> m_actors;
37 41
38 // key currently pressed by user 42 // key currently pressed by user
39 transmission::field_t currentKey; 43 Transmission::field_t currentKey;
40 44
41 // translate Qt::Key to our key format 45 // translate Qt::Key to our key format
42 transmission::field_t translateKey(int); 46 Transmission::field_t translateKey(int);
43}; 47};
44 48
45#endif // MAINWIDGET_H 49#endif // MAINWIDGET_H