summaryrefslogtreecommitdiff
path: root/Games/Snake
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-04-20 18:50:41 +0200
committerAndreas Kling <awesomekling@gmail.com>2019-04-20 18:50:41 +0200
commitc9b86be1ccadef17b103a3ee6ba557dd37b8235f (patch)
tree86bb2666f964b0e48290846a5df512dc59e5b377 /Games/Snake
parent461901948175dcace8023afdf6126b79cfad658d (diff)
downloadserenity-c9b86be1ccadef17b103a3ee6ba557dd37b8235f.zip
Snake: Add some more fruit types.
Diffstat (limited to 'Games/Snake')
-rw-r--r--Games/Snake/SnakeGame.cpp24
-rw-r--r--Games/Snake/SnakeGame.h3
-rw-r--r--Games/Snake/main.cpp2
3 files changed, 23 insertions, 6 deletions
diff --git a/Games/Snake/SnakeGame.cpp b/Games/Snake/SnakeGame.cpp
index 0b49fe4d10..cfa3511c17 100644
--- a/Games/Snake/SnakeGame.cpp
+++ b/Games/Snake/SnakeGame.cpp
@@ -8,7 +8,10 @@ SnakeGame::SnakeGame(GWidget* parent)
: GWidget(parent)
{
set_font(Font::default_bold_font());
- m_fruit_bitmap = GraphicsBitmap::load_from_file("/res/icons/snake/paprika.png");
+ m_fruit_bitmaps.append(*GraphicsBitmap::load_from_file("/res/icons/snake/paprika.png"));
+ m_fruit_bitmaps.append(*GraphicsBitmap::load_from_file("/res/icons/snake/eggplant.png"));
+ m_fruit_bitmaps.append(*GraphicsBitmap::load_from_file("/res/icons/snake/cauliflower.png"));
+ m_fruit_bitmaps.append(*GraphicsBitmap::load_from_file("/res/icons/snake/tomato.png"));
srand(time(nullptr));
reset();
}
@@ -54,6 +57,7 @@ void SnakeGame::spawn_fruit()
break;
}
m_fruit = coord;
+ m_fruit_type = rand() % m_fruit_bitmaps.size();
}
Rect SnakeGame::score_rect() const
@@ -167,10 +171,22 @@ void SnakeGame::paint_event(GPaintEvent& event)
painter.fill_rect(event.rect(), Color::Black);
painter.fill_rect(cell_rect(m_head), Color::Yellow);
- for (auto& coord : m_tail)
- painter.fill_rect(cell_rect(coord), Color::from_rgb(0xaaaa00));
+ for (auto& part : m_tail) {
+ auto rect = cell_rect(part);
+ painter.fill_rect(rect, Color::from_rgb(0xaaaa00));
+
+ Rect left_side(rect.x(), rect.y(), 2, rect.height());
+ Rect top_side(rect.x(), rect.y(), rect.width(), 2);
+ Rect right_side(rect.right() - 1, rect.y(), 2, rect.height());
+ Rect bottom_side(rect.x(), rect.bottom() - 1, rect.width(), 2);
+ painter.fill_rect(left_side, Color::from_rgb(0xcccc00));
+ painter.fill_rect(right_side, Color::from_rgb(0x888800));
+ painter.fill_rect(top_side, Color::from_rgb(0xcccc00));
+ painter.fill_rect(bottom_side, Color::from_rgb(0x888800));
- painter.draw_scaled_bitmap(cell_rect(m_fruit), *m_fruit_bitmap, m_fruit_bitmap->rect());
+ }
+
+ painter.draw_scaled_bitmap(cell_rect(m_fruit), *m_fruit_bitmaps[m_fruit_type], m_fruit_bitmaps[m_fruit_type]->rect());
painter.draw_text(score_rect(), m_score_text, TextAlignment::TopLeft, Color::White);
}
diff --git a/Games/Snake/SnakeGame.h b/Games/Snake/SnakeGame.h
index 192b548521..ec04227335 100644
--- a/Games/Snake/SnakeGame.h
+++ b/Games/Snake/SnakeGame.h
@@ -50,10 +50,11 @@ private:
Vector<Coordinate> m_tail;
Coordinate m_fruit;
+ int m_fruit_type { 0 };
int m_length { 0 };
unsigned m_score { 0 };
String m_score_text;
- RetainPtr<GraphicsBitmap> m_fruit_bitmap;
+ Vector<Retained<GraphicsBitmap>> m_fruit_bitmaps;
};
diff --git a/Games/Snake/main.cpp b/Games/Snake/main.cpp
index 7cf72b64ff..1ae78b6bfa 100644
--- a/Games/Snake/main.cpp
+++ b/Games/Snake/main.cpp
@@ -13,7 +13,7 @@ int main(int argc, char** argv)
auto* window = new GWindow;
window->set_title("Snake");
- window->set_rect(100, 100, 300, 300);
+ window->set_rect(100, 100, 320, 320);
auto* game = new SnakeGame;
window->set_main_widget(game);