Game.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #include "Game.h"
  2. Game::~Game() {
  3. delete deck;
  4. }
  5. void Game::Render(Canvas *const canvas) {
  6. if (!buffer) return;
  7. if (had_change) {
  8. deck->Render(buffer);
  9. for (int i = 0; i < 7; i++) {
  10. FURI_LOG_D("Game", "%i", i);
  11. tableau[i].Render(i * 18 + 1, 25, false, 0, buffer);
  12. }
  13. for (int i = 0; i < 4; i++) {
  14. if (piles[i])
  15. piles[i]->Render(i * 18 + 55, 1, false, buffer);
  16. else
  17. Card::RenderEmptyCard(i * 18 + 55, 1, buffer);
  18. }
  19. }
  20. had_change = false;
  21. buffer->render(canvas);
  22. }
  23. void Game::Press(InputKey key) {
  24. if (key == InputKeyOk && state == GameStateStart) {
  25. Reset();
  26. NewRound();
  27. return;
  28. }
  29. had_change = true;
  30. }
  31. Game::Game() {
  32. deck = new Deck(1);
  33. buffer = new RenderBuffer(128, 64);
  34. }
  35. void Game::NewRound() {
  36. round_start = furi_get_tick();
  37. state = GameStatePlay;
  38. had_change = true;
  39. }
  40. void Game::Reset() {
  41. can_auto_solve = false;
  42. current_column = 0;
  43. current_row = 0;
  44. column_selection = -1;
  45. deck->Generate();
  46. deck->Cycle();
  47. //Reset foundations
  48. for (int i = 0; i < 4; i++) {
  49. if (piles[i]) delete piles[i];
  50. piles[i] = nullptr;
  51. }
  52. //Populate columns
  53. for (int i = 0; i < 7; i++) {
  54. tableau[i].Reset();
  55. for (int j = 0; j <= i; j++) {
  56. Card *card = deck->Extract();
  57. if (j >= i) card->exposed = true;
  58. tableau[i].AddCard(card);
  59. }
  60. }
  61. }
  62. void Game::LongPress(InputKey key) {
  63. UNUSED(key);
  64. }
  65. void Game::Update(NotificationApp *app) {
  66. UNUSED(app);
  67. }