Suppose you are playing a killing game and have to kill few of your enemies. You are at a cliff and from there you can see few of them. You see the enemies at your height only. Therefore, you can only kill at the same height. The enemies are forming a balanced binary tree where their General is at the top of the other cliff, his two commanders are on the first level below him. The soldiers are at the lowest level. Total four soldiers are appointed. Under both the commanders exact two soldiers serve.
You have to make a strategy to kill the left commander first, than whoever takes his position kill him. Now start killing the right side with same strategy until only one enemy is left at left side. Now increase your height and kill the General. You can only win if only three of your enemies are left.
Display the enemies who are left and who have been killed. Don’t forget to print your victory message.
HINT: Balancing is the key to achieve your goal.
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <ctime>
#include <vector>
class game
{
private:
std::vector <int> fake;
char map[1800];
int x;//COORDINATES
int c;
int speed;
int points ;
int CurrentLevel;
bool check;
public:
game()
{
x = 1940;
speed = 215;
check = 0;
points = 0;
}
void PrepareGraphics();
void graphics();
void LevelMenu();
void Levels();
void LOGIC();
void gameover();
friend void cls();
friend void sp();
friend void s();
};
void cls()
{
HANDLE hOut;
COORD Position;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
Position.X = 0;
Position.Y = 0;
SetConsoleCursorPosition(hOut, Position);
}
void game::Levels() //Just minimize this function
////////////////////////////////////////////////////////////////////////////*//
{
speed-=20;
for(int a = 0;a < 1800;a++)
{
map[a] = ' '; //CLEAN IT FIRST
}
switch(CurrentLevel)
{
case 1://///////////////////////////////////////////////////////////////*//
for(int b = 0;b < 26;b++)
{
map[b + 7] = char(253);
}
for(int b = 0;b < 26;b++)
{
map[b + 47] = char(253);
}
for(int b = 0;b < 26;b++)
{
map[b + 87] = char(253);
}
for(int b = 0;b < 26;b++)
{
map[b + 127] = char(253);
}
for(int b = 0;b < 26;b++)
{
map[b + 167] = char(253);
}
for(int b = 0;b < 26;b++)
{
map[b + 207] = char(253);
}
break;
case 2://///////////////////////////////////////////////////////////////*//
for(int b = 0;b < 26;b++)
{
map[b + 7] = char(253);
}
for(int b = 0;b < 26;b++)
{
map[b + 47] = char(253);
}
for(int b = 0;b < 26;b++)
{
map[b + 87] = char(253);
}
for(int b = 0;b < 26;b++)
{
map[b + 127] = char(253);
}
for(int b = 0;b < 26;b++)
{
map[b + 167] = char(253);
}
for(int b = 0;b < 26;b++)
{
map[b + 207] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 240] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 280] = char(253);
}
break;
case 3://///////////////////////////////////////////////////////////////*//
for(int b = 0;b < 30;b++)
{
map[b + 5] = char(253);
}
for(int b = 0;b < 30;b++)
{
map[b + 45] = char(253);
}
for(int b = 0;b < 30;b++)
{
map[b + 85] = char(253);
}
for(int b = 0;b < 30;b++)
{
map[b + 125] = char(253);
}
for(int b = 0;b < 30;b++)
{
map[b + 165] = char(253);
}
for(int b = 0;b < 30;b++)
{
map[b + 205] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 240] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 280] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 320] = char(253);
}
break;
case 4://///////////////////////////////////////////////////////////////*//
for(int b = 0;b < 34;b++)
{
map[b + 3] = char(253);
}
for(int b = 0;b < 34;b++)
{
map[b + 43] = char(253);
}
for(int b = 0;b < 34;b++)
{
map[b + 83] = char(253);
}
for(int b = 0;b < 34;b++)
{
map[b + 123] = char(253);
}
for(int b = 0;b < 34;b++)
{
map[b + 163] = char(253);
}
for(int b = 0;b < 34;b++)
{
map[b + 203] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 240] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 280] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 320] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 360] = char(253);
}
break;
case 5://///////////////////////////////////////////////////////////////*//
for(int b = 0;b < 38;b++)
{
map[b + 1] = char(253);
}
for(int b = 0;b < 38;b++)
{
map[b + 41] = char(253);
}
for(int b = 0;b < 38;b++)
{
map[b + 81] = char(253);
}
for(int b = 0;b < 38;b++)
{
map[b + 121] = char(253);
}
for(int b = 0;b < 38;b++)
{
map[b + 161] = char(253);
}
for(int b = 0;b < 38;b++)
{
map[b + 201] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 240] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 280] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 320] = char(253);
}
break;
case 6://///////////////////////////////////////////////////////////////*//
for(int b = 0;b < 34;b++)
{
map[b + 3] = char(253);
}
for(int b = 0;b < 34;b++)
{
map[b + 43] = char(253);
}
for(int b = 0;b < 34;b++)
{
map[b + 83] = char(253);
}
for(int b = 0;b < 34;b++)
{
map[b + 123] = char(253);
}
for(int b = 0;b < 34;b++)
{
map[b + 163] = char(253);
}
for(int b = 0;b < 34;b++)
{
map[b + 203] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 240] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 280] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 320] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 360] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 400] = char(253);
}
break;
case 7://///////////////////////////////////////////////////////////////*//
for(int b = 0;b < 40;b++)
{
map[b] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 40] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 80] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 120] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 160] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 200] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 240] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 280] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 320] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 360] = char(253);
}
break;
case 8://///////////////////////////////////////////////////////////////*//
for(int b = 0;b < 40;b++)
{
map[b] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 40] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 80] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 120] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 160] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 200] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 240] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 280] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 320] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 360] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 400] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 440] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 480] = char(253);
}
break;
case 9://///////////////////////////////////////////////////////////////*//
for(int b = 0;b < 40;b++)
{
map[b] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 40] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 80] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 120] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 160] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 200] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 240] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 280] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 320] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 360] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 400] = char(253);
}
for(int b = 0;b < 20 ;b++)
{
map[400 + 2 * b] = char(253);
}
for(int b = 0;b < 20 ;b++)
{
map[440 + 2 * b] = char(253);
}
break;
case 10://///////////////////////////////////////////////////////////////*//
for(int b = 0;b < 40;b++)
{
map[b] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 40] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 80] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 120] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 160] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 200] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 240] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 280] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 320] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 360] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 400] = char(253);
}
for(int b = 0;b < 20 ;b++)
{
map[400 + 2 * b] = char(253);
}
for(int b = 0;b < 20 ;b++)
{
map[440 + 2 * b] = char(253);
}
for(int b = 0;b < 20 ;b++)
{
map[480 + 2 * b] = char(253);
}
for(int b = 0;b < 20 ;b++)
{
map[520 + 2 * b] = char(253);
}
for(int b = 0;b < 20 ;b++)
{
map[560 + 2 * b] = char(253);
}
break;
case 11:
for(int b = 0;b < 40;b++)
{
map[b] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 40] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 80] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 120] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 160] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 200] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 240] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 280] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 320] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 360] = char(253);
}
for(int b = 0;b < 40;b++)
{
map[b + 400] = char(253);
}
for(int b = 0;b < 20 ;b++)
{
map[400 + 2 * b] = char(253);
}
for(int b = 0;b < 20 ;b++)
{
map[440 + 2 * b] = char(253);
}
for(int b = 0;b < 20 ;b++)
{
map[480 + 2 * b] = char(253);
}
for(int b = 0;b < 20 ;b++)
{
map[520 + 2 * b] = char(253);
}
for(int b = 0;b < 20 ;b++)
{
map[560 + 2 * b] = char(253);
}
break;
default:
system("cls");
std::cout << "CONGRULATIONS ";
Sleep(5000);
}
PrepareGraphics();
}
//////////////////////////////////////////////////////////////////////////
void sp(int spalva)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), spalva);
}
void game::LevelMenu()
{
std::cout <<"CONTROLS: > ^ < for moving and 1 / 2 for shooting...";
Sleep(4500);
system("cls");
system("color a5");
sp(481);
std::cout << "CHOOSE YOUR LEVEL:";
std::cout <<"1." << std::endl;
std::cout <<"2." << std::endl;
std::cout <<"3." << std::endl;
std::cout <<"4." << std::endl;
std::cout <<"5." << std::endl;
std::cout <<"6." << std::endl;
std::cout <<"7." << std::endl;
std::cout <<"8." << std::endl;
std::cout <<"9." << std::endl;
std::cout <<"10."<< std::endl;
std::cout <<"11."<< std::endl;
int y;
while(y > 12 || y < 1)
{
std::cin >> y;
}
if(y == 1)
{
CurrentLevel = 1;
speed = 215;
}
else if(y == 2)
{
CurrentLevel = 2;
speed = 195;
}
else if(y == 3)
{
CurrentLevel = 3;
speed = 175;
}
else if(y == 4)
{
CurrentLevel = 4;
speed = 155;
}
else if(y == 5)
{
CurrentLevel = 5;
speed = 135;
}
else if(y == 6)
{
CurrentLevel = 6;
speed = 115;
}
else if(y == 7)
{
CurrentLevel = 7;
speed = 95;
}
else if(y == 8)
{
CurrentLevel = 8;
speed = 75;
}
else if(y == 9)
{
CurrentLevel = 9;
speed = 55;
}
else if(y == 10)
{
CurrentLevel = 10;
speed =35 ;
}
else if(y == 11)
{
CurrentLevel = 11;
speed = 28;
}
std::cout << "GET READY.";
Sleep(2500);
Levels();
}
void game::PrepareGraphics()
{
x = 1140;
map[x] = 'H';
graphics();
}
void game::graphics()
{
c = 0;
for(int CheckingForWin = 0;CheckingForWin < 40;CheckingForWin++)
{
if(map[CheckingForWin] == ' ')
{
c++;
}
}
if(c == 40)
{
CurrentLevel++;
std::cout << "Congrulations,you have passed this leveln,let's try another one!";
Sleep(4000);
Levels();
}
std::cout << std::endl;
for(int k = 0;k < 40;k++ )
{
std::cout << char(219);
}
std::cout << std::endl;
for(int u = 0;u < 1800;u++)
{
if(u!= 0 && u % 40 == 0)
{
std::cout << std::endl;
}
/////////////////////////////////////
/////////////////////////////////////
/////////////////////////////////////
if(map[u + 40] == char(173))
{
map[u + 40] = ' ';
if(map[u]!=char(253))
{
map[u] = char(173);
}
else
{
map[u] = ' ';
points++;
}
}
else if(u <= 39 && map[u] == char(173))
{
map[u] = ' ';
}
if(map[u] == char(253) && map[u + 40 ] != char(253))
{
c = rand() % speed + 1;
if(c == 5)
{
map[u + 40] = 'o';
}
};
if(map[u] == 'o')
{
for(unsigned int g = 0;g != fake.size();g++)
{
if(fake[g] == u)
{
g = fake.size() - 1;
check = 1;
}
}
if(!check)
{
map[u] = ' ';
if(x == u + 40)
{
gameover();
}
map[u + 40] = 'o';
fake.push_back(u + 40);
}
};
check = 0;
std::cout << map[u];
}
for(int h = 1760;h < 1800;h++)
{
if(map[h] == 'o')
{
map[h] = ' ';
}
}
fake.clear();
std::cout << std::endl;
for(int k = 0;k < 40;k++ )
{
std::cout << char(219);
}
std::cout << std::endl;
std::cout << "nnnn Points:" << points;
LOGIC();
}
void game::gameover()
{
system("cls");
std::cout <<"GG,YOU'VE JUST LOSE!";
std::cout <<"You scored " << points << " pointsn";
Sleep(2000);
std::cout <<"Restarting...";
Sleep(2000);
system("cls");
system("color a5");
sp(481);
LevelMenu();
}
void game::LOGIC()
{
if (GetAsyncKeyState(VK_LEFT))
{
if(x % 40 != 0)
{
if(map[x - 1] == 'o')
{
gameover();
};
x--;
map[x + 1] = ' ';
map[x] = 'H';
}
}
else if (GetAsyncKeyState(VK_RIGHT))
{
if((x + 1) % 40 != 0)
{
if(map[x + 1] == 'o')
{
gameover();
};
x++;
map[x - 1] = ' ';
map[x] = 'H';
}
}
else if (GetAsyncKeyState(VK_UP))
{
if(x > 480)
{
x-=40;
map[x+40] = ' ';
map[x] = 'H';
}
}
else if (GetAsyncKeyState(VK_DOWN))
{
if(x < 1760 )
{
x+=40;
map[x - 40] = ' ';
map[x] = 'H';
}
}
else{}
if(_kbhit())
{
char l = _getch();
if(l == '1' || l == '2')
{
map[x - 40] = char(173);
};
}
cls();
graphics();
}
int main()
{
system("color a5");
sp(481);
srand((unsigned)time(0));
game *memb;
memb = new game;
memb->LevelMenu();
}
Comments
Leave a comment