From 2b3210e6d19e32b7746e0e1cdf22035ce508ca8a Mon Sep 17 00:00:00 2001 From: manuel Date: Wed, 6 Apr 2011 15:07:50 +0200 Subject: adding nicer blocks :D --- pacman-c++/actor.cpp | 4 ++-- pacman-c++/block.cpp | 8 +++++++- pacman-c++/block.h | 5 +++-- pacman-c++/constants.h | 3 ++- pacman-c++/mainwidget.cpp | 31 ++++++++++++++++++++++++++++--- pacman-c++/pacman.qrc | 1 + pacman-c++/pics/block0.png | Bin 181 -> 479 bytes pacman-c++/pics/block1.png | Bin 179 -> 453 bytes pacman-c++/pics/block2.png | Bin 195 -> 476 bytes pacman-c++/pics/block4.png | Bin 180 -> 452 bytes pacman-c++/pics/block8.png | Bin 0 -> 471 bytes 11 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 pacman-c++/pics/block8.png diff --git a/pacman-c++/actor.cpp b/pacman-c++/actor.cpp index 3794b63..4a132f9 100644 --- a/pacman-c++/actor.cpp +++ b/pacman-c++/actor.cpp @@ -35,8 +35,8 @@ Actor::Actor(Color::Color color, QGraphicsItem *parent) for (int i = 0; i < 4; i++) { PixmapItem *img = new PixmapItem(m_pix, this); - int x = i * 20 + SPRITE_MARGIN; - int y = m_direction * 20 + SPRITE_MARGIN; + int x = i * SPRITE_OFFSET + SPRITE_MARGIN; + int y = m_direction * SPRITE_OFFSET + SPRITE_MARGIN; img->setSprite(x, y, SPRITE_WIDTH, SPRITE_HEIGHT); img->setZValue(zValue()); img->setVisible(false); diff --git a/pacman-c++/block.cpp b/pacman-c++/block.cpp index ccb7ade..9e5e427 100644 --- a/pacman-c++/block.cpp +++ b/pacman-c++/block.cpp @@ -4,7 +4,7 @@ QMap Block::m_pixmaps; -Block::Block(Color::Color color, Neighbour neighbour, QGraphicsItem *parent) +Block::Block(Color::Color color, unsigned int neighbours, QGraphicsItem *parent) : PixmapItem(parent) { if (m_pixmaps.find(color) == m_pixmaps.end()) @@ -13,5 +13,11 @@ Block::Block(Color::Color color, Neighbour neighbour, QGraphicsItem *parent) m_pixmaps[color] = QPixmap(pixmapName); } setPixmap(m_pixmaps.find(color).value()); + setNeighbours(neighbours); qDebug() << "loading block w color: " << color; } + +void Block::setNeighbours(unsigned int neighbours) +{ + setSprite(neighbours * SPRITE_OFFSET, 0, SPRITE_WIDTH, SPRITE_HEIGHT); +} diff --git a/pacman-c++/block.h b/pacman-c++/block.h index 40bde51..29ddd23 100644 --- a/pacman-c++/block.h +++ b/pacman-c++/block.h @@ -8,6 +8,7 @@ class Block : public PixmapItem { +public: enum Neighbour { None = 0, Left = (1 << 0), @@ -16,8 +17,8 @@ class Block Down = (1 << 3) }; -public: - Block(Color::Color color, Neighbour neighbour = None, QGraphicsItem *parent = 0); + Block(Color::Color color, unsigned int neighbours = None, QGraphicsItem *parent = 0); + void setNeighbours(unsigned int neighbours); private: // map for saving QPixmaps for reuse diff --git a/pacman-c++/constants.h b/pacman-c++/constants.h index 15d3022..33f235a 100644 --- a/pacman-c++/constants.h +++ b/pacman-c++/constants.h @@ -2,8 +2,9 @@ #define CONSTANTS_H #define SPRITE_MARGIN 2 -#define SPRITE_WIDTH 16 +#define SPRITE_WIDTH 16 #define SPRITE_HEIGHT 16 +#define SPRITE_OFFSET 20 const unsigned int map_size[2] = { 20, 20 }; const unsigned int field_size[2] = { 16, 16 }; diff --git a/pacman-c++/mainwidget.cpp b/pacman-c++/mainwidget.cpp index e9b4cc3..062fc6d 100644 --- a/pacman-c++/mainwidget.cpp +++ b/pacman-c++/mainwidget.cpp @@ -86,8 +86,18 @@ transmission::map_t createDummyMap() map[0][0] |= Color::none ^ transmission::block; map[0][1] |= Color::none ^ transmission::block; map[0][2] |= Color::none ^ transmission::block; + map[0][3] |= Color::none ^ transmission::block; + map[0][4] |= Color::none ^ transmission::block; + map[0][5] |= Color::none ^ transmission::block; map[1][0] |= Color::none ^ transmission::block; map[2][0] |= Color::none ^ transmission::block; + map[1][3] |= Color::none ^ transmission::block; + map[2][3] |= Color::none ^ transmission::block; + map[3][3] |= Color::none ^ transmission::block; + map[2][4] |= Color::none ^ transmission::block; + map[2][5] |= Color::none ^ transmission::block; + map[2][2] |= Color::none ^ transmission::block; + map[2][1] |= Color::none ^ transmission::block; map[4][3] |= Color::green ^ transmission::block; @@ -120,9 +130,24 @@ void MainWidget::loadDummyMap() Color::Color color = static_cast(cur & transmission::color_mask); qDebug() << "col=" << color; - PixmapItem *item = 0; + PixmapItem *item = NULL; if (cur & transmission::block) - item = new Block(color); + { + unsigned int neighbours = Block::None; + // check left side + if (x > 0 && map[x - 1][y] & transmission::block) + neighbours |= Block::Left; + // check right side + if (x < map_size[0] && map[x + 1][y] & transmission::block) + neighbours |= Block::Right; + // check upside + if (y > 0 && map[x][y - 1] & transmission::block) + neighbours |= Block::Up; + // check down side + if (y < map_size[1] && map[x][y + 1] & transmission::block) + neighbours |= Block::Down; + item = new Block(color, neighbours); + } else if (cur & transmission::bonuspoint) item = new BonusPoint(); else if (cur & transmission::pacman) @@ -162,7 +187,7 @@ void MainWidget::loadDummyMap() else Q_ASSERT(false); - if(item != 0) + if (item != NULL) { m_scene->addItem(item); item->setPos(mapPositionToCoord(x, y)); diff --git a/pacman-c++/pacman.qrc b/pacman-c++/pacman.qrc index feb4276..e3aab92 100644 --- a/pacman-c++/pacman.qrc +++ b/pacman-c++/pacman.qrc @@ -10,5 +10,6 @@ pics/block4.png pics/bonuspoints.png pics/points.png + pics/block8.png diff --git a/pacman-c++/pics/block0.png b/pacman-c++/pics/block0.png index 7f93087..76bc4b7 100644 Binary files a/pacman-c++/pics/block0.png and b/pacman-c++/pics/block0.png differ diff --git a/pacman-c++/pics/block1.png b/pacman-c++/pics/block1.png index 4188bcf..99e8633 100644 Binary files a/pacman-c++/pics/block1.png and b/pacman-c++/pics/block1.png differ diff --git a/pacman-c++/pics/block2.png b/pacman-c++/pics/block2.png index cf1a043..963207e 100644 Binary files a/pacman-c++/pics/block2.png and b/pacman-c++/pics/block2.png differ diff --git a/pacman-c++/pics/block4.png b/pacman-c++/pics/block4.png index 13eb22d..6662de4 100644 Binary files a/pacman-c++/pics/block4.png and b/pacman-c++/pics/block4.png differ diff --git a/pacman-c++/pics/block8.png b/pacman-c++/pics/block8.png new file mode 100644 index 0000000..00fbd74 Binary files /dev/null and b/pacman-c++/pics/block8.png differ -- cgit v1.2.3