Hello guys,
This is very simple and one of my old projects I've created.It's probably the best one,as it really looks like a game,mind you the code is not very complicated.It has 11 levels you can try, every level the speed and the amount of "birds" is increasing.The controls are arrow keys for moving and 1 / 2 for shooting.
Have fun ! Foxefde
预览图:
源代码:
#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 = 0;
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 level\n,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 << "\n\n\n\n Points:" << points;
LOGIC();
}
void game::gameover()
{
system("cls");
std::cout <<"GG,YOU'VE JUST LOSE!";
std::cout <<"You scored " << points << " points\n";
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();
}