summaryrefslogtreecommitdiffstats
path: root/pacman-c++
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2011-04-06 15:15:03 +0200
committermanuel <manuel@mausz.at>2011-04-06 15:15:03 +0200
commitcbc0da21f393dc7bf2a11beaf1314c9dcaeb0999 (patch)
tree534fee860ef8f0064425f98bbbb1febb7335f820 /pacman-c++
parent2b3210e6d19e32b7746e0e1cdf22035ce508ca8a (diff)
parentdce91729ff119ce6e00340f67297ca9e3e72110c (diff)
downloadfoop-cbc0da21f393dc7bf2a11beaf1314c9dcaeb0999.tar.gz
foop-cbc0da21f393dc7bf2a11beaf1314c9dcaeb0999.tar.bz2
foop-cbc0da21f393dc7bf2a11beaf1314c9dcaeb0999.zip
Merge branch 'master' of ssh://manuel.mausz.at/foop
Conflicts: pacman-c++/actor.cpp pacman-c++/constants.h pacman-c++/mainwidget.cpp
Diffstat (limited to 'pacman-c++')
-rw-r--r--pacman-c++/actor.cpp8
-rw-r--r--pacman-c++/block.cpp2
-rw-r--r--pacman-c++/bonuspoint.cpp2
-rw-r--r--pacman-c++/constants.h24
-rw-r--r--pacman-c++/mainwidget.cpp162
-rw-r--r--pacman-c++/mainwidget.h10
6 files changed, 110 insertions, 98 deletions
diff --git a/pacman-c++/actor.cpp b/pacman-c++/actor.cpp
index 4a132f9..9d35d47 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 * SPRITE_OFFSET + SPRITE_MARGIN; 38 int x = i * Constants::sprite_offset + Constants::sprite_margin;
39 int y = m_direction * SPRITE_OFFSET + SPRITE_MARGIN; 39 int y = m_direction * Constants::sprite_offset + 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++/block.cpp b/pacman-c++/block.cpp
index 9e5e427..7cb77cc 100644
--- a/pacman-c++/block.cpp
+++ b/pacman-c++/block.cpp
@@ -19,5 +19,5 @@ Block::Block(Color::Color color, unsigned int neighbours, QGraphicsItem *parent)
19 19
20void Block::setNeighbours(unsigned int neighbours) 20void Block::setNeighbours(unsigned int neighbours)
21{ 21{
22 setSprite(neighbours * SPRITE_OFFSET, 0, SPRITE_WIDTH, SPRITE_HEIGHT); 22 setSprite(neighbours * Constants::sprite_offset, 0, Constants::field_size.width, Constants::field_size.height);
23} 23}
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 33f235a..46791be 100644
--- a/pacman-c++/constants.h
+++ b/pacman-c++/constants.h
@@ -1,13 +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 5 const struct
6#define SPRITE_HEIGHT 16 6 {
7#define SPRITE_OFFSET 20 7 const unsigned int width, height;
8 8 } field_size = { 16, 16 },
9const unsigned int map_size[2] = { 20, 20 }; 9 map_size = { 20, 20 },
10const unsigned int field_size[2] = { 16, 16 }; 10 map_size_pixel = { field_size.width * map_size.width,
11 field_size.height * map_size.height};
12 const unsigned int sprite_margin = 2;
13 const unsigned int sprite_offset = 20;
14}
11 15
12namespace Color 16namespace Color
13{ 17{
@@ -19,13 +23,13 @@ namespace Color
19 green = (1 << 2), 23 green = (1 << 2),
20 }; 24 };
21} 25}
22 26
23// constants for data transmission to client 27// constants for data transmission to client
24namespace transmission 28namespace Transmission
25{ 29{
26 typedef unsigned int field_t; 30 typedef unsigned int field_t;
27 typedef unsigned int mask_t; 31 typedef unsigned int mask_t;
28 32
29 const field_t block = (1 << 3); 33 const field_t block = (1 << 3);
30 const field_t bonuspoint = (1 << 4); 34 const field_t bonuspoint = (1 << 4);
31 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 062fc6d..fe1ba9c 100644
--- a/pacman-c++/mainwidget.cpp
+++ b/pacman-c++/mainwidget.cpp
@@ -5,9 +5,63 @@
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[0][3] |= Color::none ^ Transmission::block;
29 map[0][4] |= Color::none ^ Transmission::block;
30 map[0][5] |= Color::none ^ Transmission::block;
31 map[1][0] |= Color::none ^ Transmission::block;
32 map[2][0] |= Color::none ^ Transmission::block;
33 map[1][3] |= Color::none ^ Transmission::block;
34 map[2][3] |= Color::none ^ Transmission::block;
35 map[3][3] |= Color::none ^ Transmission::block;
36 map[2][4] |= Color::none ^ Transmission::block;
37 map[2][5] |= Color::none ^ Transmission::block;
38 map[2][2] |= Color::none ^ Transmission::block;
39 map[2][1] |= Color::none ^ Transmission::block;
40
41 map[4][3] |= Color::green ^ Transmission::block;
42
43 map[5][3] |= Color::none ^ Transmission::block;
44 map[6][3] |= Color::none ^ Transmission::block;
45 map[7][3] |= Color::red ^ Transmission::block;
46
47 map[7][5] |= Transmission::bonuspoint;
48
49 map[5][5] |= Color::blue;
50 map[5][5] |= Transmission::pacman;
51 map[5][5] |= Transmission::direction_left;
52
53 return map;
54}
55
8MainWidget::MainWidget() 56MainWidget::MainWidget()
9 : currentKey(0) 57 : currentKey(0)
10{ 58{
59 createGui();
60 updateMap(createDummyMap());
61}
62
63void MainWidget::createGui()
64{
11 setFocusPolicy(Qt::StrongFocus); 65 setFocusPolicy(Qt::StrongFocus);
12 66
13 QVBoxLayout *layout = new QVBoxLayout(this); 67 QVBoxLayout *layout = new QVBoxLayout(this);
@@ -30,24 +84,23 @@ MainWidget::MainWidget()
30 m_playerScoreLayouts.append(playerLayout); 84 m_playerScoreLayouts.append(playerLayout);
31 } 85 }
32 86
33 m_scene = new QGraphicsScene(0, 0, 500, 500, this); 87 m_scene = new QGraphicsScene(0, 0, Constants::map_size_pixel.width, Constants::map_size_pixel.height, this);
34 m_scene->setBackgroundBrush(Qt::black); 88 m_scene->setBackgroundBrush(Qt::black);
35 89
36 QGraphicsView *window = new QGraphicsView(m_scene, this); 90 QGraphicsView *window = new QGraphicsView(m_scene, this);
37 window->setFrameStyle(0); 91 window->setFrameStyle(0);
38 window->setAlignment(Qt::AlignLeft | Qt::AlignTop); 92 window->setAlignment(Qt::AlignLeft | Qt::AlignTop);
39 window->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 93 //window->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
40 window->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 94 //window->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
41 95
42 layout->addLayout(m_scoreLayout); 96 layout->addLayout(m_scoreLayout);
43 layout->addWidget(window); 97 layout->addWidget(window);
44 98
45 setLayout(layout); 99 setLayout(layout);
46 setWindowTitle("pacman client"); 100 setWindowTitle("pacman client");
47
48 loadDummyMap();
49} 101}
50 102
103
51void MainWidget::updateScore() 104void MainWidget::updateScore()
52{ 105{
53 QMapIterator<Color::Color, Actor*> i(m_actors); 106 QMapIterator<Color::Color, Actor*> i(m_actors);
@@ -66,91 +119,42 @@ void MainWidget::updateScore()
66 } 119 }
67} 120}
68 121
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 122
86 map[0][0] |= Color::none ^ transmission::block; 123void MainWidget::updateMap(const Transmission::map_t& map)
87 map[0][1] |= Color::none ^ transmission::block;
88 map[0][2] |= Color::none ^ transmission::block;
89 map[0][3] |= Color::none ^ transmission::block;
90 map[0][4] |= Color::none ^ transmission::block;
91 map[0][5] |= Color::none ^ transmission::block;
92 map[1][0] |= Color::none ^ transmission::block;
93 map[2][0] |= Color::none ^ transmission::block;
94 map[1][3] |= Color::none ^ transmission::block;
95 map[2][3] |= Color::none ^ transmission::block;
96 map[3][3] |= Color::none ^ transmission::block;
97 map[2][4] |= Color::none ^ transmission::block;
98 map[2][5] |= Color::none ^ transmission::block;
99 map[2][2] |= Color::none ^ transmission::block;
100 map[2][1] |= Color::none ^ transmission::block;
101
102 map[4][3] |= Color::green ^ transmission::block;
103
104 map[5][3] |= Color::none ^ transmission::block;
105 map[6][3] |= Color::none ^ transmission::block;
106 map[7][3] |= Color::red ^ transmission::block;
107
108 map[7][5] |= transmission::bonuspoint;
109
110 map[5][5] |= Color::blue;
111 map[5][5] |= transmission::pacman;
112 map[5][5] |= transmission::direction_left;
113
114 return map;
115}
116
117void MainWidget::loadDummyMap()
118{ 124{
119 transmission::map_t map = createDummyMap(); 125 for (unsigned int x = 0; x < Constants::map_size.width; ++x)
120
121 for (unsigned int x = 0; x < map_size[0]; ++x)
122 { 126 {
123 for (unsigned int y = 0; y < map_size[1]; ++y) 127 for (unsigned int y = 0; y < Constants::map_size.height; ++y)
124 { 128 {
125 const transmission::field_t &cur = map[x][y]; 129 const Transmission::field_t &cur = map[x][y];
126 if (cur == 0) 130 if (cur == 0)
127 continue; 131 continue;
128 qDebug() << "not 0 at x=" << x << ", y=" << y << ", val=" << cur; 132 qDebug() << "not 0 at x=" << x << ", y=" << y << ", val=" << cur;
129 133
130 Color::Color color = static_cast<Color::Color>(cur & transmission::color_mask); 134 Color::Color color = static_cast<Color::Color>(cur & Transmission::color_mask);
131 qDebug() << "col=" << color; 135 qDebug() << "col=" << color;
132 136
133 PixmapItem *item = NULL; 137 PixmapItem *item = NULL;
134 if (cur & transmission::block) 138 if (cur & Transmission::block)
135 { 139 {
136 unsigned int neighbours = Block::None; 140 unsigned int neighbours = Block::None;
137 // check left side 141 // check left side
138 if (x > 0 && map[x - 1][y] & transmission::block) 142 if (x > 0 && map[x - 1][y] & Transmission::block)
139 neighbours |= Block::Left; 143 neighbours |= Block::Left;
140 // check right side 144 // check right side
141 if (x < map_size[0] && map[x + 1][y] & transmission::block) 145 if (x < Constants::map_size.width && map[x + 1][y] & Transmission::block)
142 neighbours |= Block::Right; 146 neighbours |= Block::Right;
143 // check upside 147 // check upside
144 if (y > 0 && map[x][y - 1] & transmission::block) 148 if (y > 0 && map[x][y - 1] & Transmission::block)
145 neighbours |= Block::Up; 149 neighbours |= Block::Up;
146 // check down side 150 // check down side
147 if (y < map_size[1] && map[x][y + 1] & transmission::block) 151 if (y < Constants::map_size.height && map[x][y + 1] & Transmission::block)
148 neighbours |= Block::Down; 152 neighbours |= Block::Down;
149 item = new Block(color, neighbours); 153 item = new Block(color, neighbours);
150 } 154 }
151 else if (cur & transmission::bonuspoint) 155 else if (cur & Transmission::bonuspoint)
152 item = new BonusPoint(); 156 item = new BonusPoint();
153 else if (cur & transmission::pacman) 157 else if (cur & Transmission::pacman)
154 { 158 {
155 Actor *actor = m_actors.value(color, 0); 159 Actor *actor = m_actors.value(color, 0);
156 if (actor == 0) { // 0 entspricht NULL ;) 160 if (actor == 0) { // 0 entspricht NULL ;)
@@ -162,21 +166,21 @@ void MainWidget::loadDummyMap()
162 } 166 }
163 167
164 Actor::Movement direction; 168 Actor::Movement direction;
165 switch (cur & transmission::direction_mask) 169 switch (cur & Transmission::direction_mask)
166 { 170 {
167 case transmission::direction_none: 171 case Transmission::direction_none:
168 direction = Actor::None; 172 direction = Actor::None;
169 break; 173 break;
170 case transmission::direction_left: 174 case Transmission::direction_left:
171 direction = Actor::Left; 175 direction = Actor::Left;
172 break; 176 break;
173 case transmission::direction_right: 177 case Transmission::direction_right:
174 direction = Actor::Right; 178 direction = Actor::Right;
175 break; 179 break;
176 case transmission::direction_up: 180 case Transmission::direction_up:
177 direction = Actor::Up; 181 direction = Actor::Up;
178 break; 182 break;
179 case transmission::direction_down: 183 case Transmission::direction_down:
180 direction = Actor::Down; 184 direction = Actor::Down;
181 break; 185 break;
182 default: 186 default:
@@ -199,23 +203,23 @@ void MainWidget::loadDummyMap()
199 203
200QPoint MainWidget::mapPositionToCoord(unsigned int x, unsigned int y) 204QPoint MainWidget::mapPositionToCoord(unsigned int x, unsigned int y)
201{ 205{
202 return QPoint(x * field_size[0], y * field_size[1]); 206 return QPoint(x * Constants::field_size.width, y * Constants::field_size.height);
203} 207}
204 208
205transmission::field_t MainWidget::translateKey(int key) 209Transmission::field_t MainWidget::translateKey(int key)
206{ 210{
207 switch(key) { 211 switch(key) {
208 case Qt::Key_Up: 212 case Qt::Key_Up:
209 return transmission::direction_up; 213 return Transmission::direction_up;
210 break; 214 break;
211 case Qt::Key_Down: 215 case Qt::Key_Down:
212 return transmission::direction_down; 216 return Transmission::direction_down;
213 break; 217 break;
214 case Qt::Key_Left: 218 case Qt::Key_Left:
215 return transmission::direction_left; 219 return Transmission::direction_left;
216 break; 220 break;
217 case Qt::Key_Right: 221 case Qt::Key_Right:
218 return transmission::direction_right; 222 return Transmission::direction_right;
219 break; 223 break;
220 default: 224 default:
221 return 0; 225 return 0;
@@ -231,7 +235,7 @@ void MainWidget::keyPressEvent(QKeyEvent* event)
231void MainWidget::keyReleaseEvent(QKeyEvent* event) 235void MainWidget::keyReleaseEvent(QKeyEvent* event)
232{ 236{
233 QWidget::keyReleaseEvent(event); 237 QWidget::keyReleaseEvent(event);
234 transmission::field_t releasedKey = translateKey(event->key()); 238 Transmission::field_t releasedKey = translateKey(event->key());
235 if (releasedKey == currentKey) { 239 if (releasedKey == currentKey) {
236 // current key got released 240 // current key got released
237 // if this is false, a key got released which has already 241 // 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