diff --git a/CommandEngine/CMakeLists.txt b/CommandEngine/CMakeLists.txt
new file mode 100644
index 0000000..1933627
--- /dev/null
+++ b/CommandEngine/CMakeLists.txt
@@ -0,0 +1,49 @@
+cmake_minimum_required(VERSION 3.10)
+project(CommandEngine)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+if(WIN32)
+ add_definitions(-D_WIN32_WINNT=0x0601)
+ add_definitions(-DNOMINMAX)
+endif()
+
+# Убираем -Werror и уменьшаем строгость предупреждений
+if(MSVC)
+ add_compile_options(/W4 /EHsc) # Убрали /WX (трактовать предупреждения как ошибки)
+else()
+ add_compile_options(-Wall -Wextra -pedantic) # Убрали -Werror
+endif()
+
+add_executable(CommandEngine
+ CommandEngine.cpp
+ TestFunctions.cpp
+)
+
+set_source_files_properties(
+ CommandEngine.cpp
+ TestFunctions.cpp
+ PROPERTIES LANGUAGE CXX
+)
+
+target_include_directories(CommandEngine PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
+
+if(WIN32)
+ target_compile_definitions(CommandEngine PRIVATE _CRT_SECURE_NO_WARNINGS)
+endif()
+
+# Настройка для отладки
+if(CMAKE_BUILD_TYPE STREQUAL "Debug")
+ if(MSVC)
+ target_compile_options(CommandEngine PRIVATE /Zi /Od)
+ else()
+ target_compile_options(CommandEngine PRIVATE -g -O0)
+ endif()
+else()
+ if(MSVC)
+ target_compile_options(CommandEngine PRIVATE /O2)
+ else()
+ target_compile_options(CommandEngine PRIVATE -O3)
+ endif()
+endif()
\ No newline at end of file
diff --git a/CommandEngine/CommandEngine.cpp b/CommandEngine/CommandEngine.cpp
new file mode 100644
index 0000000..b2a2ec8
--- /dev/null
+++ b/CommandEngine/CommandEngine.cpp
@@ -0,0 +1,17 @@
+#include "TestFunctions.hpp"
+#include "locale.h"
+
+int main() {
+ setlocale(LC_ALL, "Rus");
+ try {
+ runAssignmentTest();
+ runAllTypeTests();
+ testDefaultArguments();
+
+ return 0;
+ }
+ catch (const std::exception& e) {
+ std::cerr << "\nОшибка: " << e.what() << std::endl;
+ return 1;
+ }
+}
diff --git a/CommandEngine/CommandEngine.vcxproj b/CommandEngine/CommandEngine.vcxproj
new file mode 100644
index 0000000..5283007
--- /dev/null
+++ b/CommandEngine/CommandEngine.vcxproj
@@ -0,0 +1,146 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 17.0
+ Win32Proj
+ {ca454cd1-3686-4938-91ba-6330fcaf4ce2}
+ CommandEngine
+ 10.0
+
+
+
+ Application
+ true
+ v143
+ Unicode
+
+
+ Application
+ false
+ v143
+ true
+ Unicode
+
+
+ Application
+ true
+ v143
+ Unicode
+
+
+ Application
+ false
+ v143
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Level3
+ true
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ stdcpp17
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ stdcpp17
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+ Level3
+ true
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ stdcpp17
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+ stdcpp17
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/CommandEngine/CommandEngine.vcxproj.filters b/CommandEngine/CommandEngine.vcxproj.filters
new file mode 100644
index 0000000..3e38657
--- /dev/null
+++ b/CommandEngine/CommandEngine.vcxproj.filters
@@ -0,0 +1,39 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Исходные файлы
+
+
+ Файлы заголовков
+
+
+ Исходные файлы
+
+
+
+
+ Файлы заголовков
+
+
+ Файлы заголовков
+
+
+ Файлы заголовков
+
+
+
\ No newline at end of file
diff --git a/CommandEngine/Engine.hpp b/CommandEngine/Engine.hpp
new file mode 100644
index 0000000..9ca3a07
--- /dev/null
+++ b/CommandEngine/Engine.hpp
@@ -0,0 +1,54 @@
+#pragma once
+#ifndef ENGINE_HPP
+#define ENGINE_HPP
+
+#include "InterfaceCommand.hpp"
+#include
+#include
+#include
+#include
+
+class Engine {
+public:
+ Engine() = default;
+ void register_command(InterfaceCommand* cmd, const std::string& name) {
+
+ if (name.empty()) {
+ throw std::invalid_argument("Command name cannot be empty");
+ }
+
+ if (commands.find(name) != commands.end()) {
+ throw std::runtime_error("Command already registered: " + name);
+ }
+
+ commands[name] = cmd;
+ }
+
+ CommandResult execute(const std::string& name, const ArgList& args = {}) {
+
+ auto it = commands.find(name);
+ if (it == commands.end()) {
+ throw std::runtime_error("Command not found: " + name);
+ }
+
+ try {
+ return it->second->execute(args);
+ }
+ catch (const std::exception& e) {
+ throw std::runtime_error("Error executing command '" + name + "': " + e.what());
+ }
+ }
+
+ bool has_command(const std::string& name) const {
+ return commands.find(name) != commands.end();
+ }
+
+ void clear() {
+ commands.clear();
+ }
+
+private:
+ std::unordered_map commands;
+};
+
+#endif
\ No newline at end of file
diff --git a/CommandEngine/InterfaceCommand.hpp b/CommandEngine/InterfaceCommand.hpp
new file mode 100644
index 0000000..833b9f3
--- /dev/null
+++ b/CommandEngine/InterfaceCommand.hpp
@@ -0,0 +1,35 @@
+#pragma once
+#ifndef INTERFACECOMMAND_HPP
+#define INTERFACECOMMAND_HPP
+
+#include
+#include
+#include
+#include
+#include