mirror of https://github.com/Aelita4/Hanoi.git
Add project files.
This commit is contained in:
parent
fd876a8003
commit
e95f59bdce
|
@ -0,0 +1,234 @@
|
|||
#include <iostream>
|
||||
#include <windows.h>
|
||||
#include <conio.h>
|
||||
|
||||
//COLORS
|
||||
#define BLACK 0
|
||||
#define BLUE 1
|
||||
#define GREEN 2
|
||||
#define AQUA 3
|
||||
#define RED 4
|
||||
#define PURPLE 5
|
||||
#define YELLOW 6
|
||||
#define WHITE 7
|
||||
#define GRAY 8
|
||||
#define LIGHT_BLUE 9
|
||||
#define LIGHT_GREEN 10
|
||||
#define LIGHT_AQUA 11
|
||||
#define LIGHT_RED 12
|
||||
#define LIGHT_PURPLE 13
|
||||
#define LIGHT_YELLOW 14
|
||||
#define BRIGHT_WHITE 15
|
||||
|
||||
unsigned int counter = 0;
|
||||
unsigned int maxx = 0;
|
||||
|
||||
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
|
||||
void gotoxy(int x, int y)
|
||||
{
|
||||
COORD c;
|
||||
c.X = x;
|
||||
c.Y = y;
|
||||
SetConsoleCursorPosition(hConsole, c);
|
||||
}
|
||||
|
||||
char getCursorChar()
|
||||
{
|
||||
char c = '\0';
|
||||
CONSOLE_SCREEN_BUFFER_INFO con;
|
||||
if (hConsole != INVALID_HANDLE_VALUE &&
|
||||
GetConsoleScreenBufferInfo(hConsole, &con))
|
||||
{
|
||||
DWORD read = 0;
|
||||
if (!ReadConsoleOutputCharacterA(hConsole, &c, 1,
|
||||
con.dwCursorPosition, &read) || read != 1
|
||||
)
|
||||
c = '\0';
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
char readChar(int x, int y)
|
||||
{
|
||||
gotoxy(x, y);
|
||||
char c = getCursorChar();
|
||||
return c;
|
||||
}
|
||||
|
||||
void vanishCursor()
|
||||
{
|
||||
CONSOLE_CURSOR_INFO info;
|
||||
info.dwSize = 100;
|
||||
info.bVisible = FALSE;
|
||||
SetConsoleCursorInfo(hConsole, &info);
|
||||
}
|
||||
|
||||
void color(int foreground, int background)
|
||||
{
|
||||
int color = (background * 16) + foreground;
|
||||
SetConsoleTextAttribute(hConsole, color);
|
||||
}
|
||||
|
||||
int getColor(int n)
|
||||
{
|
||||
switch (n)
|
||||
{
|
||||
case 1:
|
||||
return LIGHT_GREEN;
|
||||
case 2:
|
||||
return YELLOW;
|
||||
case 3:
|
||||
return BLUE;
|
||||
case 4:
|
||||
return LIGHT_RED;
|
||||
case 5:
|
||||
return RED;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
void generatePoles()
|
||||
{
|
||||
color(WHITE, BLACK);
|
||||
gotoxy(15, 20);
|
||||
std::cout << "-----+-----";
|
||||
gotoxy(30, 20);
|
||||
std::cout << "-----+-----";
|
||||
gotoxy(45, 20);
|
||||
std::cout << "-----+-----";
|
||||
|
||||
for (int i = 1; i <= 5; i++)
|
||||
{
|
||||
gotoxy(20, 20 - i);
|
||||
std::cout << "|";
|
||||
gotoxy(35, 20 - i);
|
||||
std::cout << "|";
|
||||
gotoxy(50, 20 - i);
|
||||
std::cout << "|";
|
||||
}
|
||||
}
|
||||
|
||||
void generateRing(int n)
|
||||
{
|
||||
for (int j = n; j > 0; j--)
|
||||
{
|
||||
color(getColor(j), BLACK);
|
||||
for (int i = 0; i < j; i++)
|
||||
{
|
||||
gotoxy(21 + i, (19 - n) + j);
|
||||
std::cout << "_";
|
||||
gotoxy(19 - i, (19 - n) + j);
|
||||
std::cout << "_";
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void editRing(char action, int n, char pole, int total)
|
||||
{
|
||||
int x = 0;
|
||||
switch (pole)
|
||||
{
|
||||
case 'A':
|
||||
x = 20;
|
||||
break;
|
||||
case 'B':
|
||||
x = 35;
|
||||
break;
|
||||
case 'C':
|
||||
x = 50;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (action)
|
||||
{
|
||||
case 'P':
|
||||
case 'p':
|
||||
for (int i = 0; i < total; i++)
|
||||
{
|
||||
if (readChar(x + 1, 19 - i) == ' ')
|
||||
{
|
||||
for (int j = 0; j < n; j++)
|
||||
{
|
||||
color(getColor(n), BLACK);
|
||||
gotoxy(x + 1 + j, 19 - i);
|
||||
std::cout << "_";
|
||||
gotoxy(x - 1 - j, 19 - i);
|
||||
std::cout << "_";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case 'r':
|
||||
case 'R':
|
||||
for (int i = 0; i < total + 1; i++)
|
||||
{
|
||||
if (readChar(x + 1, 19 - i) == ' ')
|
||||
{
|
||||
for (int j = 0; j < total; j++)
|
||||
{
|
||||
gotoxy(x + 1 + j, 19 - i + 1);
|
||||
std::cout << " ";
|
||||
gotoxy(x - 1 - j, 19 - i + 1);
|
||||
std::cout << " ";
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void hanoi(int n, char x, char y, char z)
|
||||
{
|
||||
if (n > maxx) maxx = n;
|
||||
if (n == 1)
|
||||
{
|
||||
editRing('R', n, x, maxx);
|
||||
editRing('P', n, y, maxx);
|
||||
Sleep(1000);
|
||||
}
|
||||
else
|
||||
{
|
||||
hanoi(n - 1, x, z, y);
|
||||
editRing('R', n, x, maxx);
|
||||
editRing('P', n, y, maxx);
|
||||
Sleep(1000);
|
||||
hanoi(n - 1, z, y, x);
|
||||
}
|
||||
}
|
||||
|
||||
void hanoiMain(int n)
|
||||
{
|
||||
generatePoles();
|
||||
generateRing(n);
|
||||
Sleep(1000);
|
||||
hanoi(n, 'A', 'B', 'C');
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
vanishCursor();
|
||||
int n;
|
||||
while (1)
|
||||
{
|
||||
std::cout << "How many rings? ";
|
||||
std::cin >> n;
|
||||
if (n > 5 || n < 3)
|
||||
{
|
||||
std::cout << "Select a number between 3 and 5" << std::endl;
|
||||
n = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
system("cls");
|
||||
hanoiMain(n);
|
||||
break;
|
||||
}
|
||||
}
|
||||
color(WHITE, BLACK);
|
||||
gotoxy(0, 0);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.30523.141
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Hanoi", "Hanoi.vcxproj", "{AF18BCDC-F52C-41BA-9F04-EF47025D1B00}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{AF18BCDC-F52C-41BA-9F04-EF47025D1B00}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{AF18BCDC-F52C-41BA-9F04-EF47025D1B00}.Debug|x64.Build.0 = Debug|x64
|
||||
{AF18BCDC-F52C-41BA-9F04-EF47025D1B00}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{AF18BCDC-F52C-41BA-9F04-EF47025D1B00}.Debug|x86.Build.0 = Debug|Win32
|
||||
{AF18BCDC-F52C-41BA-9F04-EF47025D1B00}.Release|x64.ActiveCfg = Release|x64
|
||||
{AF18BCDC-F52C-41BA-9F04-EF47025D1B00}.Release|x64.Build.0 = Release|x64
|
||||
{AF18BCDC-F52C-41BA-9F04-EF47025D1B00}.Release|x86.ActiveCfg = Release|Win32
|
||||
{AF18BCDC-F52C-41BA-9F04-EF47025D1B00}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {1FE5F2FE-8E15-4671-B9AC-63E0AF9AD87B}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,147 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{af18bcdc-f52c-41ba-9f04-ef47025d1b00}</ProjectGuid>
|
||||
<RootNamespace>Hanoi</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Hanoi.cpp" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Hanoi.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
Loading…
Reference in New Issue