diff --git a/Linked-List-Snake/Linked-List-Snake.vcxproj b/Linked-List-Snake/Linked-List-Snake.vcxproj
index 99de33c3..50154510 100644
--- a/Linked-List-Snake/Linked-List-Snake.vcxproj
+++ b/Linked-List-Snake/Linked-List-Snake.vcxproj
@@ -133,10 +133,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -148,11 +162,18 @@
+
+
+
+
+
+
+
@@ -168,6 +189,7 @@
+
diff --git a/Linked-List-Snake/Linked-List-Snake.vcxproj.filters b/Linked-List-Snake/Linked-List-Snake.vcxproj.filters
index 02d87bf3..dc824bd5 100644
--- a/Linked-List-Snake/Linked-List-Snake.vcxproj.filters
+++ b/Linked-List-Snake/Linked-List-Snake.vcxproj.filters
@@ -66,6 +66,54 @@
Source Files
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
+
+ Source Files
+
@@ -119,5 +167,29 @@
Header Files
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
+
+ Header Files
+
\ No newline at end of file
diff --git a/Linked-List-Snake/include/Global/ServiceLocator.h b/Linked-List-Snake/include/Global/ServiceLocator.h
index b73213ab..ac27b79d 100644
--- a/Linked-List-Snake/include/Global/ServiceLocator.h
+++ b/Linked-List-Snake/include/Global/ServiceLocator.h
@@ -4,6 +4,7 @@
#include "UI/UIService.h"
#include "Sound/SoundService.h"
#include "Time/TimeService.h"
+#include "Level/LevelService.h"
namespace Global
{
@@ -15,6 +16,7 @@ namespace Global
Sound::SoundService* sound_service;
UI::UIService* ui_service;
Time::TimeService* time_service;
+ Level::LevelService* level_service;
ServiceLocator();
~ServiceLocator();
@@ -34,6 +36,7 @@ namespace Global
Sound::SoundService* getSoundService();
UI::UIService* getUIService();
Time::TimeService* getTimeService();
+ Level::LevelService* getLevelService();
void deleteServiceLocator();
};
}
\ No newline at end of file
diff --git a/Linked-List-Snake/include/Level/LevelController.h b/Linked-List-Snake/include/Level/LevelController.h
new file mode 100644
index 00000000..440c3233
--- /dev/null
+++ b/Linked-List-Snake/include/Level/LevelController.h
@@ -0,0 +1,23 @@
+#pragma once
+#include "../../include/Level/LevelModel.h"
+#include "../../include/Level/LevelView.h"
+namespace Level
+{
+ class LevelController
+ {
+
+ LevelModel* level_model;
+ LevelView* level_view;
+
+
+
+ public:
+ LevelController();
+ void initialize();
+ void update();
+ void render();
+ ~LevelController();
+ float getCellWidth();
+ float getCellHeight();
+ };
+}
\ No newline at end of file
diff --git a/Linked-List-Snake/include/Level/LevelData.h b/Linked-List-Snake/include/Level/LevelData.h
new file mode 100644
index 00000000..f1fd966b
--- /dev/null
+++ b/Linked-List-Snake/include/Level/LevelData.h
@@ -0,0 +1,21 @@
+#pragma once
+#include "../../include/Level/LevelService.h"
+namespace Level
+{
+ enum class LevelNumber;
+
+
+
+ struct LevelData
+ {
+ LevelNumber level_index;
+
+ LevelData(LevelNumber ind)
+ {
+ level_index = ind;
+ }
+
+
+ };
+
+}
\ No newline at end of file
diff --git a/Linked-List-Snake/include/Level/LevelModel.h b/Linked-List-Snake/include/Level/LevelModel.h
new file mode 100644
index 00000000..e6f89ef8
--- /dev/null
+++ b/Linked-List-Snake/include/Level/LevelModel.h
@@ -0,0 +1,26 @@
+#pragma once
+#include
+#include "Level/LevelData.h"
+#include
+namespace Level
+{
+ class LevelModel
+ {
+ std::vector level_configuration;
+
+ float cell_width;
+ float cell_height;
+
+ public:
+ static const int number_of_rows = 28;
+ static const int number_of_columns = 50;
+
+ LevelModel();
+ ~LevelModel();
+
+ void initialize(int width, int height);
+
+ float getCellWidth();
+ float getCellHeight();
+ };
+}
\ No newline at end of file
diff --git a/Linked-List-Snake/include/Level/LevelNumber.h b/Linked-List-Snake/include/Level/LevelNumber.h
new file mode 100644
index 00000000..d945a609
--- /dev/null
+++ b/Linked-List-Snake/include/Level/LevelNumber.h
@@ -0,0 +1,9 @@
+#pragma once
+namespace Level
+{
+ enum class LevelNumber
+ {
+ ONE,
+ TWO,
+ };
+}
diff --git a/Linked-List-Snake/include/Level/LevelService.h b/Linked-List-Snake/include/Level/LevelService.h
new file mode 100644
index 00000000..f6943d3e
--- /dev/null
+++ b/Linked-List-Snake/include/Level/LevelService.h
@@ -0,0 +1,23 @@
+#pragma once
+#include "../../include/Level/LevelController.h"
+#include "../../include/Level/LevelNumber.h"
+namespace Level
+{
+
+
+ class LevelService
+ {
+ LevelNumber current_level;
+ LevelController* level_controller;
+ void createLevelController();
+ public:
+ LevelService();
+ void initialize();
+ void update();
+ void render();
+ ~LevelService();
+
+
+ void createLevel(LevelNumber level_to_load);
+ };
+}
\ No newline at end of file
diff --git a/Linked-List-Snake/include/Level/LevelView.h b/Linked-List-Snake/include/Level/LevelView.h
new file mode 100644
index 00000000..d81b449a
--- /dev/null
+++ b/Linked-List-Snake/include/Level/LevelView.h
@@ -0,0 +1,41 @@
+#pragma once
+#include
+#include "UI/UIElement/RectangleShapeView.h"
+namespace Level
+{
+ using namespace UI;
+ using namespace UI::UIElement;
+ class LevelView
+ {
+
+ const sf::Color background_color = sf::Color(180, 200, 160);
+ RectangleShapeView* background_rectangle;
+ sf::Color border_color = sf::Color::Black;
+ float grid_width;
+ float grid_height;
+
+ RectangleShapeView* border_rectangle;
+
+ public:
+
+
+
+ static const int border_thickness = 10;
+ static const int border_offset_left = 40;
+ static const int border_offset_top = 40;
+
+
+
+ LevelView();
+ void initialize();
+ void update();
+ void render();
+ ~LevelView();
+ float getGridWidth();
+ float getGridHeight();
+ void initializeBorder();
+ void calculateGridExtents();
+ void initializeBackground();
+
+ };
+}
\ No newline at end of file
diff --git a/Linked-List-Snake/include/UI/GameplayUI/GameplayUIController.h b/Linked-List-Snake/include/UI/GameplayUI/GameplayUIController.h
new file mode 100644
index 00000000..d667d8e1
--- /dev/null
+++ b/Linked-List-Snake/include/UI/GameplayUI/GameplayUIController.h
@@ -0,0 +1,56 @@
+#pragma once
+#include "UI/Interface/IUIController.h"
+#include "UI/UIElement/TextView.h"
+
+namespace UI
+{
+ namespace GameplayUI
+ {
+ class GameplayUIController : public Interface::IUIController
+ {
+ private:
+ // Constants:
+ const float font_size = 60.f;
+
+ const float text_y_position = 7.f;
+ const float level_number_text_x_position = 65.f;
+ const float score_text_x_position = 800.f;
+
+ // Constants: Operations and Time Complexities
+ const float operations_font_size = 36.f;
+ const float operations_text_x_position = 1330.f;
+ const float operations_text_y_position = 10.f;
+ const float time_complexity_text_x_position = 1330.f;
+ const float time_complexity_text_y_position = 45.f;
+
+ UI::UIElement::TextView* level_number_text;
+ UI::UIElement::TextView* score_text;
+ UI::UIElement::TextView* time_complexity_text;
+ UI::UIElement::TextView* operation_text;
+
+ void createTexts();
+ void initializeTexts();
+ void initializeLevelNumberText();
+ void initializeScoreText();
+ void initializeTimeComplexityText();
+ void initializeOperationText();
+
+ void updateLevelNumberText();
+ void updateScoreText();
+ void updateTimeComplexityText();
+ void updateOperationText();
+
+ void destroy();
+
+ public:
+ GameplayUIController();
+ ~GameplayUIController();
+
+ void initialize() override;
+ void update() override;
+ void render() override;
+ void show() override;
+ };
+ }
+}
+
diff --git a/Linked-List-Snake/include/UI/LevelSelection/LevelSelectionUIController.h b/Linked-List-Snake/include/UI/LevelSelection/LevelSelectionUIController.h
new file mode 100644
index 00000000..324dd4b4
--- /dev/null
+++ b/Linked-List-Snake/include/UI/LevelSelection/LevelSelectionUIController.h
@@ -0,0 +1,53 @@
+#pragma once
+#include
+#include "UI/Interface/IUIController.h"
+#include "UI/UIElement/ButtonView.h"
+#include "UI/UIElement/ImageView.h"
+
+namespace UI
+{
+ namespace LevelSelection
+ {
+ class LevelSelectionUIController : public Interface::IUIController
+ {
+ private:
+ // Constants:
+ const float button_width = 400.f;
+ const float button_height = 140.f;
+
+ const float level_one_button_y_position = 500.f;
+ const float level_two_button_y_position = 700.f;
+ const float menu_button_y_position = 900.f;
+
+ const float background_alpha = 85.f;
+
+ UI::UIElement::ImageView* background_image;
+
+ UI::UIElement::ButtonView* level_one_button;
+ UI::UIElement::ButtonView* level_two_button;
+ UI::UIElement::ButtonView* menu_button;
+
+ void createImage();
+ void createButtons();
+ void initializeBackgroundImage();
+ void initializeButtons();
+ void registerButtonCallback();
+ float calculateLeftOffsetForButton();
+
+ void levelOneButtonCallback();
+ void levelTwoButtonCallback();
+ void menuButtonCallback();
+
+ void destroy();
+
+ public:
+ LevelSelectionUIController();
+ ~LevelSelectionUIController();
+
+ void initialize() override;
+ void update() override;
+ void render() override;
+ void show() override;
+ };
+ }
+}
\ No newline at end of file
diff --git a/Linked-List-Snake/include/UI/LinkedListUI/LinkedListSelectionUIController.h b/Linked-List-Snake/include/UI/LinkedListUI/LinkedListSelectionUIController.h
new file mode 100644
index 00000000..1d8eb2a1
--- /dev/null
+++ b/Linked-List-Snake/include/UI/LinkedListUI/LinkedListSelectionUIController.h
@@ -0,0 +1,52 @@
+#pragma once
+#include
+#include "UI/Interface/IUIController.h"
+#include "UI/UIElement/ButtonView.h"
+#include "UI/UIElement/ImageView.h"
+
+namespace UI
+{
+ namespace LinkedListUI
+ {
+ class LinkedListSelectionUIController : public Interface::IUIController
+ {
+ private:
+ const float button_width = 400.f;
+ const float button_height = 140.f;
+
+ const float single_linked_list_button_y_position = 500.f;
+ const float double_linked_list_button_y_position = 700.f;
+ const float menu_button_y_position = 900.f;
+
+ const float background_alpha = 85.f;
+
+ UIElement::ImageView* background_image;
+
+ UIElement::ButtonView* single_linked_list_button;
+ UIElement::ButtonView* double_linked_list_button;
+ UIElement::ButtonView* menu_button;
+
+ void createImage();
+ void createButtons();
+ void initializeBackgroundImage();
+ void initializeButtons();
+ void registerButtonCallback();
+ float calculateLeftOffsetForButton();
+
+ void singleLinkedListButtonCallback();
+ void doubleLinkedListButtonCallback();
+ void menuButtonCallback();
+
+ void destroy();
+
+ public:
+ LinkedListSelectionUIController();
+ ~LinkedListSelectionUIController();
+
+ void initialize() override;
+ void update() override;
+ void render() override;
+ void show() override;
+ };
+ }
+}
\ No newline at end of file
diff --git a/Linked-List-Snake/include/UI/UIElement/RectangleShapeView.h b/Linked-List-Snake/include/UI/UIElement/RectangleShapeView.h
new file mode 100644
index 00000000..dc25fff1
--- /dev/null
+++ b/Linked-List-Snake/include/UI/UIElement/RectangleShapeView.h
@@ -0,0 +1,28 @@
+#pragma once
+#include "UIView.h"
+
+namespace UI
+{
+ namespace UIElement
+ {
+ class RectangleShapeView : public UIView
+ {
+ protected:
+ sf::RectangleShape rectangle_shape;
+
+ public:
+ RectangleShapeView();
+ virtual ~RectangleShapeView();
+
+ virtual void initialize(sf::Vector2f rectangle_size, sf::Vector2f rectangle_position, int outline_thikness = 0, sf::Color fill_color = sf::Color::Transparent, sf::Color outline_color = sf::Color::Transparent);
+ virtual void update() override;
+ virtual void render() override;
+
+ virtual void setSize(sf::Vector2f rectangle_size);
+ virtual void setPosition(sf::Vector2f rectangle_position);
+ virtual void setFillColor(sf::Color fill_color);
+ virtual void setOutlineColor(sf::Color outline_color);
+ virtual void setOutlineThickness(int outline_thikness);
+ };
+ }
+}
\ No newline at end of file
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-audio-s-d.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-audio-s-d.pdb
new file mode 100644
index 00000000..bbd97a4b
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-audio-s-d.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-audio-s.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-audio-s.pdb
new file mode 100644
index 00000000..bbd97a4b
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-audio-s.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-audio.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-audio.pdb
new file mode 100644
index 00000000..e0cd9357
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-audio.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-graphics-s-d.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-graphics-s-d.pdb
new file mode 100644
index 00000000..d187d972
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-graphics-s-d.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-graphics-s.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-graphics-s.pdb
new file mode 100644
index 00000000..d187d972
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-graphics-s.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-graphics.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-graphics.pdb
new file mode 100644
index 00000000..310a084a
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-graphics.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-main-d.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-main-d.pdb
new file mode 100644
index 00000000..432660dd
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-main-d.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-main-s.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-main-s.pdb
new file mode 100644
index 00000000..432660dd
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-main-s.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-network-s-d.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-network-s-d.pdb
new file mode 100644
index 00000000..446f1fb8
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-network-s-d.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-network-s.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-network-s.pdb
new file mode 100644
index 00000000..446f1fb8
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-network-s.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-network.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-network.pdb
new file mode 100644
index 00000000..fa073311
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-network.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-system-s-d.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-system-s-d.pdb
new file mode 100644
index 00000000..aa448263
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-system-s-d.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-system-s.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-system-s.pdb
new file mode 100644
index 00000000..aa448263
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-system-s.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-system.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-system.pdb
new file mode 100644
index 00000000..ea487f4f
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-system.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-window-s-d.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-window-s-d.pdb
new file mode 100644
index 00000000..98a4c966
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-window-s-d.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-window-s.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-window-s.pdb
new file mode 100644
index 00000000..98a4c966
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-window-s.pdb differ
diff --git a/Linked-List-Snake/sfml/lib/Debug/sfml-window.pdb b/Linked-List-Snake/sfml/lib/Debug/sfml-window.pdb
new file mode 100644
index 00000000..1e2442bd
Binary files /dev/null and b/Linked-List-Snake/sfml/lib/Debug/sfml-window.pdb differ
diff --git a/Linked-List-Snake/source/Global/ServiceLocator.cpp b/Linked-List-Snake/source/Global/ServiceLocator.cpp
index 84c99f93..34c3c28e 100644
--- a/Linked-List-Snake/source/Global/ServiceLocator.cpp
+++ b/Linked-List-Snake/source/Global/ServiceLocator.cpp
@@ -7,6 +7,7 @@ namespace Global
using namespace Sound;
using namespace UI;
using namespace Time;
+ using namespace Level;
ServiceLocator::ServiceLocator()
{
@@ -15,6 +16,7 @@ namespace Global
sound_service = nullptr;
ui_service = nullptr;
time_service = nullptr;
+ level_service = nullptr;
createServices();
}
@@ -28,6 +30,7 @@ namespace Global
sound_service = new SoundService();
ui_service = new UIService();
time_service = new TimeService();
+ level_service = new LevelService();
}
void ServiceLocator::initialize()
@@ -37,6 +40,7 @@ namespace Global
event_service->initialize();
ui_service->initialize();
time_service->initialize();
+ level_service->initialize();
}
void ServiceLocator::update()
@@ -45,12 +49,14 @@ namespace Global
event_service->update();
ui_service->update();
time_service->update();
+ level_service->update();
}
void ServiceLocator::render()
{
ui_service->render();
graphic_service->render();
+ level_service->render();
}
void ServiceLocator::clearAllServices()
@@ -60,6 +66,7 @@ namespace Global
delete(sound_service);
delete(event_service);
delete(time_service);
+ delete(level_service);
}
ServiceLocator* ServiceLocator::getInstance()
@@ -78,5 +85,10 @@ namespace Global
Time::TimeService* ServiceLocator::getTimeService() { return time_service; }
+ Level::LevelService* ServiceLocator::getLevelService()
+ {
+ return level_service;
+ }
+
void ServiceLocator::deleteServiceLocator() { delete(this); }
}
\ No newline at end of file
diff --git a/Linked-List-Snake/source/Level/LevelController.cpp b/Linked-List-Snake/source/Level/LevelController.cpp
new file mode 100644
index 00000000..7119f8d4
--- /dev/null
+++ b/Linked-List-Snake/source/Level/LevelController.cpp
@@ -0,0 +1,44 @@
+#include "../../include/Level/LevelController.h"
+namespace Level
+{
+
+ Level::LevelController::LevelController()
+ {
+
+ level_model = new LevelModel();
+ level_view = new LevelView();
+ }
+
+ void Level::LevelController::initialize()
+ {
+ level_view->initialize();
+ level_model->initialize(level_view->getGridWidth(), level_view->getGridHeight());
+ }
+
+ void Level::LevelController::update()
+ {
+ level_view->update();
+ }
+
+ void Level::LevelController::render()
+ {
+ level_view->render();
+ }
+
+ Level::LevelController::~LevelController()
+ {
+ delete level_model;
+ delete level_view;
+ }
+
+ float LevelController::getCellWidth()
+ {
+ return level_model->getCellWidth();
+ }
+
+ float LevelController::getCellHeight()
+ {
+ return level_model->getCellHeight();
+ }
+
+}
diff --git a/Linked-List-Snake/source/Level/LevelModel.cpp b/Linked-List-Snake/source/Level/LevelModel.cpp
new file mode 100644
index 00000000..02c1089f
--- /dev/null
+++ b/Linked-List-Snake/source/Level/LevelModel.cpp
@@ -0,0 +1,33 @@
+#include "../../include/Level/LevelModel.h"
+
+namespace Level
+{
+
+
+
+ LevelModel::LevelModel()
+ {
+ }
+
+ LevelModel::~LevelModel()
+ {
+ }
+
+ void LevelModel::initialize(int width, int height)
+ {
+ cell_width = width / number_of_rows;
+ cell_height = height / number_of_rows;
+ }
+
+ float LevelModel::getCellWidth()
+ {
+ return cell_width;
+ }
+
+ float LevelModel::getCellHeight()
+ {
+ return cell_height;
+
+ }
+
+}
\ No newline at end of file
diff --git a/Linked-List-Snake/source/Level/LevelService.cpp b/Linked-List-Snake/source/Level/LevelService.cpp
new file mode 100644
index 00000000..49477a53
--- /dev/null
+++ b/Linked-List-Snake/source/Level/LevelService.cpp
@@ -0,0 +1,45 @@
+#include "../../include/Level/LevelService.h"
+
+namespace Level
+{
+
+
+
+ void LevelService::createLevelController()
+ {
+ level_controller = new LevelController();
+ }
+
+ LevelService::LevelService()
+ {
+
+ level_controller = nullptr;
+ }
+
+ void LevelService::initialize()
+ {
+ level_controller->initialize();
+ }
+
+ void LevelService::update()
+ {
+ level_controller->update();
+ }
+
+ void LevelService::render()
+ {
+ level_controller->render();
+ }
+
+ LevelService::~LevelService()
+ {
+
+ delete(level_controller);
+ }
+
+ void LevelService::createLevel(LevelNumber level_to_load)
+ {
+ current_level = level_to_load;
+ }
+
+}
\ No newline at end of file
diff --git a/Linked-List-Snake/source/Level/LevelView.cpp b/Linked-List-Snake/source/Level/LevelView.cpp
new file mode 100644
index 00000000..87f2ed46
--- /dev/null
+++ b/Linked-List-Snake/source/Level/LevelView.cpp
@@ -0,0 +1,81 @@
+#include "Global/ServiceLocator.h"
+#include "../../include/Level/LevelView.h"
+
+namespace Level
+{
+ using namespace UI::UIElement;
+ using namespace Global;
+
+ LevelView::LevelView()
+ {
+ background_rectangle = new RectangleShapeView();
+ border_rectangle = new RectangleShapeView();
+
+ }
+
+ void LevelView::initialize()
+ {
+ initializeBackground();
+ calculateGridExtents();
+ initializeBorder();
+
+ }
+
+ void LevelView::update()
+ {
+ background_rectangle->update();
+ }
+
+ void LevelView::render()
+ {
+ background_rectangle->render();
+ }
+
+ LevelView::~LevelView()
+ {
+ delete(background_rectangle);
+ }
+
+ float LevelView::getGridWidth()
+ {
+ return grid_width;
+ }
+
+ float LevelView::getGridHeight()
+ {
+ return grid_height;
+
+ }
+
+ void LevelView::initializeBorder()
+ {
+ sf::RenderWindow* game_window = ServiceLocator::getInstance()->getGraphicService()->getGameWindow();
+
+ sf::Vector2f border_size = sf::Vector2f(grid_width, grid_height);
+ sf::Vector2f border_position = sf::Vector2f(border_offset_left, border_offset_top);
+
+ border_rectangle->initialize(border_size, border_position, border_thickness, sf::Color::Transparent, border_color);
+ border_rectangle->show();
+
+ }
+
+ void LevelView::calculateGridExtents()
+ {
+ sf::RenderWindow* game_window = ServiceLocator::getInstance()->getGraphicService()->getGameWindow();
+
+ grid_width = game_window->getSize().x - 2 * border_offset_left;
+ grid_height = game_window->getSize().y - 2 * border_offset_top;
+ }
+
+ void LevelView::initializeBackground()
+ {
+ sf::RenderWindow* game_window = ServiceLocator::getInstance()
+ ->getGraphicService()
+ ->getGameWindow();
+
+ sf::Vector2f background_size = sf::Vector2f(game_window->getSize().x, game_window->getSize().y);
+ background_rectangle->initialize(background_size, sf::Vector2f(0, 0), 0, background_color);
+ background_rectangle->show();
+ }
+
+}
\ No newline at end of file
diff --git a/Linked-List-Snake/source/UI/UIElement/RectangleShapeView.cpp b/Linked-List-Snake/source/UI/UIElement/RectangleShapeView.cpp
new file mode 100644
index 00000000..d598e28b
--- /dev/null
+++ b/Linked-List-Snake/source/UI/UIElement/RectangleShapeView.cpp
@@ -0,0 +1,63 @@
+#include "UI/UIElement/RectangleShapeView.h"
+
+namespace UI
+{
+ namespace UIElement
+ {
+ RectangleShapeView::RectangleShapeView() = default;
+
+ RectangleShapeView::~RectangleShapeView() = default;
+
+ void RectangleShapeView::initialize(sf::Vector2f rectangle_size, sf::Vector2f rectangle_position, int outline_thickness, sf::Color fill_color, sf::Color outline_color)
+ {
+ UIView::initialize();
+
+ setSize(rectangle_size);
+ setPosition(rectangle_position);
+ setOutlineThickness(outline_thickness);
+ setFillColor(fill_color);
+ setOutlineColor(outline_color);
+ }
+
+ void RectangleShapeView::update()
+ {
+ UIView::update();
+ }
+
+ void RectangleShapeView::render()
+ {
+ UIView::render();
+
+ if (ui_state == UIState::VISIBLE)
+ {
+ game_window->draw(rectangle_shape);
+ }
+ }
+
+ void RectangleShapeView::setSize(sf::Vector2f rectangle_size)
+ {
+ rectangle_shape.setSize(rectangle_size);
+ }
+
+ void RectangleShapeView::setPosition(sf::Vector2f rectangle_position)
+ {
+ rectangle_shape.setPosition(rectangle_position);
+ }
+
+ void RectangleShapeView::setFillColor(sf::Color fill_color)
+ {
+ rectangle_shape.setFillColor(fill_color);
+ }
+
+ void RectangleShapeView::setOutlineColor(sf::Color outline_color)
+ {
+ rectangle_shape.setOutlineColor(outline_color);
+ }
+
+ void RectangleShapeView::setOutlineThickness(int outline_thickness)
+ {
+ rectangle_shape.setOutlineThickness(outline_thickness);
+ }
+
+ }
+}
\ No newline at end of file