#include<math.h>
#include<Windows.h>
#include<conio.h>
#include<ctime>
using namespace std;
enum DIR
{
UP,
RIGHT,
DOWN,
LEFT
};
time_t start = 0, finish = 0;
int _x = 6, _y = 1;//??????
int map[30][16] = { 0 };
int sharp[20][8] = {
{0,0,0,0,0,0,0,0},
//I?
{0,0,0,1,0,2,0,3},
{0,0,1,0,2,0,3,0},
//??
{0,0,1,0,0,1,1,1},
//L?
{0,0,0,1,0,2,1,2},
{0,0,0,1,1,0,2,0},
{0,0,1,0,1,1,1,2},
{0,1,1,1,2,0,2,1},
//J?
{0,2,1,0,1,1,1,2},
{0,0,0,1,1,1,2,1},
{0,0,0,1,0,2,1,0},
{0,0,1,0,2,0,2,1},
//Z?
{0,0,1,0,1,1,2,1},
{0,1,0,2,1,0,1,1},
//S?
{0,1,1,0,1,1,2,0},
{0,0,0,1,1,1,1,2},
//T?
{0,1,1,0,1,1,2,1},
{0,0,0,1,0,2,1,1},
{0,0,1,0,1,1,2,0},
{0,1,1,0,1,1,1,2}
};
class Game
{
public:
int score;//????
int _id;//????
int top;//?????
int speed;//????
Game();
void showMenu();//????
void showGround();//??????
void gameOver();//??????
void Run();//????
void sharpDraw(int id, bool show = false);//????
void keyControl();//????
bool move(int dir, int id);//????
bool downSet(int id);//??
void Turn(int id);//??
void clean();//??
};
void SetPos(int i, int j)//??????? ?? ?
{
COORD pos = { i,j };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
int main()
{
CONSOLE_CURSOR_INFO cursor;
GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor);
cursor.bVisible = 0; //????????????
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor);
srand((unsigned)time(NULL));
Game game;
game.showMenu();
return 0;
}
Game::Game()
{
score = 0;
_id = 0;
top = 58;
speed = 1000;
}
void Game::showMenu()
{
for (int i = 0; i < 30; i++)
{
for (int j = 0; j < 26; j++)
{
if ((i == 0 || i == 29) || (j == 0 || j == 25))
{
cout << "?";
}
else
{
cout << " ";
}
}
cout << endl;
}
SetPos(17, 8);
cout << "? ? ? ? ?" << endl;
SetPos(13, 12);
cout << "????? ?????" << endl;
SetPos(12, 14);
cout << "? ????? ?? ??" << endl;
SetPos(15, 20);
cout << "0 ?? Enter ??" << endl;
while (1)
{
int select = _getch();
if (select == 13)
{
system("cls");
this->Run();
}
else if (select = 48)
{
system("cls");
exit(0);
}
}
}
void Game::showGround()
{
for (int i = 0; i < 30; i++)
{
for (int j = 0; j < 26; j++)
{
if ((i == 0 || i == 29) || (j == 0 || j == 25 || j == 15))
{
cout << "?";
}
else if (i == 15 && j > 15)
{
cout << "?";
}
else
{
cout << " ";
}
}
cout << endl;
}
SetPos(31, 2);
cout << "? ???" << endl;
SetPos(31, 17);
cout << "? ???" << endl;
for (int i = 0; i < 30; i++)
{
for (int j = 0; j < 16; j++)
{
if ((i == 0 || i == 29) || (j == 0 || j == 15))
{
map[i][j] = 1;
}
else
{
map[i][j] = 0;
}
}
}
}
void Game::gameOver()
{
for (int i = 5; i < 15; i++)
{
SetPos(1, i);
cout << " " << endl;
}
SetPos(8, 7);
cout << "G a m e O v e r" << endl;
SetPos(3, 10);
cout << "0 ?? Enter ????" << endl;
while (1)
{
int select = _getch();
if (select == 13)
{
system("cls");
this->Run();
}
else if (select == 48)
{
system("cls");
exit(0);
}
}
}
void Game::Run()
{
score = 0;
_id = 0;
top = 58;
_x = 6;
_y = 1;
showGround();
start = clock();
int new_id = rand() % 19 + 1;
while (1)
{
sharpDraw(_id);
keyControl();
if (downSet(_id))
{
sharpDraw(-new_id, 1);
_id = new_id;
new_id = rand() % 19 + 1;
sharpDraw(new_id, 1);
clean();
}
SetPos(34, 20);
cout << score << endl;
}
}
void Game::sharpDraw(int id, bool show)
{
int x, y;
if (show == true)
{
if (id > 0)
{
for (int i = 0; i < 4; i++)
{
x = 19 + sharp[id][2 * i];
y = 6 + sharp[id][2 * i + 1];
SetPos(2 * x, y);
cout << "?";
}
}
else
{
for (int i = 0; i < 4; i++)
{
x = 19 + sharp[-id][2 * i];
y = 6 + sharp[-id][2 * i + 1];
SetPos(2 * x, y);
cout << " ";
}
}
return;
}
if (id > 0)
{
for (int i = 0; i < 4; i++)
{
x = _x + sharp[id][2 * i];
y = _y + sharp[id][2 * i + 1];
SetPos(2 * x, y);
cout << "?";
}
}
else
{
for (int i = 0; i < 4; i++)
{
x = _x + sharp[-id][2 * i];
y = _y + sharp[-id][2 * i + 1];
SetPos(2 * x, y);
cout << " ";
}
}
return;
}
bool Game::downSet(int id)
{
if (id == 0)
return true;
finish = clock();
if (finish - start < speed)
{
return false;
}
start = clock();
if (!move(DOWN, _id))
{
int x, y;
for (int i = 0; i < 4; i++)
{
x = _x + sharp[id][2 * i];
y = _y + sharp[id][2 * i + 1];
map[y][x] = 1;
if (y < top)
{
top = y;
}
if (top <= 1)
{
gameOver();
}
}
_x = 6;
_y = 1;
return true;
}
sharpDraw(-id);
_y++;
sharpDraw(id);
return false;
}
bool Game::move(int dir, int id)
{
int x, y;
switch (dir)
{
case UP:
for (int i = 0; i < 4; i++)
{
x = _x + sharp[id][2 * i];
y = _y + sharp[id][2 * i + 1];
if (map[y][x] == 1)
{
return false;
}
}
break;
case DOWN:
{
for (int i = 0; i < 4; i++)
{
x = _x + sharp[id][2 * i];
y = _y + sharp[id][2 * i + 1];
if (map[y + 1][x] == 1)
{
return false;
}
}
}
break;
case RIGHT:
{
for (int i = 0; i < 4; i++)
{
x = _x + sharp[id][2 * i];
y = _y + sharp[id][2 * i + 1];
if (map[y][x + 1] == 1)
{
return false;
}
}
}
break;
case LEFT:
{
for (int i = 0; i < 4; i++)
{
x = _x + sharp[id][2 * i];
y = _y + sharp[id][2 * i + 1];
if (map[y][x - 1] == 1)
{
return false;
}
}
}
break;
default:
break;
}
return true;
}
void Game::Turn(int id)
{
switch (id)
{
case 1:id++; break;
case 2:id--; break;
case 3: break;
case 4:id++; break;
case 5:id++; break;
case 6:id++; break;
case 7:id -= 3; break;
case 8:id++; break;
case 9:id++; break;
case 10:id++; break;
case 11:id -= 3; break;
case 12:id++; break;
case 13:id--; break;
case 14:id++; break;
case 15:id--; break;
case 16:id++; break;
case 17:id++; break;
case 18:id++; break;
case 19:id -= 3; break;
default:
break;
}
if (!move(UP, id))
{
return;
}
sharpDraw(-_id);
_id = id;
}
void Game::keyControl()
{
if (!_kbhit())
return;
int key = _getch();
switch (key)
{
case 72:
Turn(_id);
break;
case 80:
if (move(DOWN, _id))
{
sharpDraw(-_id);
_y++;
}
break;
case 75:
if (move(LEFT, _id))
{
sharpDraw(-_id);
_x--;
}
break;
case 77:
if (move(RIGHT, _id))
{
sharpDraw(-_id);
_x++;
}
break;
case 32:
{
for (int i = 5; i < 15; i++)
{
SetPos(1, i);
cout << " " << endl;
}
SetPos(10, 7);
cout << "? ? ? ?" << endl;
SetPos(3, 10);
cout << "0 ???? ?? ????" << endl;
while (1)
{
int select = _getch();
if (select == 13)
{
for (int i = 5; i < 15; i++)
{
SetPos(1, i);
cout << " " << endl;
}
break;
}
else if (select == 48)
{
system("cls");
showMenu();
}
}
}
default:
break;
}
}
void Game::clean()
{
int n = -1;
int line = -1;
while (1)
{
for (int i = 28; i > 0; i--)
{
for (int j = 1; j < 15; j++)
{
line = i;
if (map[i][j] == 0)
{
line = -1;
break;
}
}
if (line != -1)
break;
}
if (line == -1)
break;
for (int i = line; i > 0; i--)
{
for (int j = 1; j < 15; j++)
{
if (i == 1)
map[i][j] = 0;
else
{
map[i][j] = map[i - 1][j];
SetPos(2 * j, i);
if (map[i][j] == 1)
cout << "?";
else
cout << " ";
}
}
}
top++;
n++;
}
if (n >= 0)
{
score += n * n * 100 + 100;
if (speed > 100)
speed = 1000 - score / 10;
}
}
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
+a4=