Snake: Add some more fruit types.

This commit is contained in:
Andreas Kling 2019-04-20 18:50:41 +02:00
parent 4619019481
commit c9b86be1cc
Notes: sideshowbarker 2024-07-19 14:38:18 +09:00
6 changed files with 23 additions and 6 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B

View File

@ -8,7 +8,10 @@ SnakeGame::SnakeGame(GWidget* parent)
: GWidget(parent) : GWidget(parent)
{ {
set_font(Font::default_bold_font()); 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)); srand(time(nullptr));
reset(); reset();
} }
@ -54,6 +57,7 @@ void SnakeGame::spawn_fruit()
break; break;
} }
m_fruit = coord; m_fruit = coord;
m_fruit_type = rand() % m_fruit_bitmaps.size();
} }
Rect SnakeGame::score_rect() const 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(event.rect(), Color::Black);
painter.fill_rect(cell_rect(m_head), Color::Yellow); painter.fill_rect(cell_rect(m_head), Color::Yellow);
for (auto& coord : m_tail) for (auto& part : m_tail) {
painter.fill_rect(cell_rect(coord), Color::from_rgb(0xaaaa00)); auto rect = cell_rect(part);
painter.fill_rect(rect, Color::from_rgb(0xaaaa00));
painter.draw_scaled_bitmap(cell_rect(m_fruit), *m_fruit_bitmap, m_fruit_bitmap->rect()); 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_bitmaps[m_fruit_type], m_fruit_bitmaps[m_fruit_type]->rect());
painter.draw_text(score_rect(), m_score_text, TextAlignment::TopLeft, Color::White); painter.draw_text(score_rect(), m_score_text, TextAlignment::TopLeft, Color::White);
} }

View File

@ -50,10 +50,11 @@ private:
Vector<Coordinate> m_tail; Vector<Coordinate> m_tail;
Coordinate m_fruit; Coordinate m_fruit;
int m_fruit_type { 0 };
int m_length { 0 }; int m_length { 0 };
unsigned m_score { 0 }; unsigned m_score { 0 };
String m_score_text; String m_score_text;
RetainPtr<GraphicsBitmap> m_fruit_bitmap; Vector<Retained<GraphicsBitmap>> m_fruit_bitmaps;
}; };

View File

@ -13,7 +13,7 @@ int main(int argc, char** argv)
auto* window = new GWindow; auto* window = new GWindow;
window->set_title("Snake"); window->set_title("Snake");
window->set_rect(100, 100, 300, 300); window->set_rect(100, 100, 320, 320);
auto* game = new SnakeGame; auto* game = new SnakeGame;
window->set_main_widget(game); window->set_main_widget(game);