Paste from X1234567 at Sun, 29 Oct 2017 01:20:30 +0000
Paste from X1234567 at Sun, 29 Oct 2017 01:20:30 +0000
#include <bits/stdc++.h>
#include <windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1 : 0)
/*
#define R SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED)
#define Ob Rb
#define Rb SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_RED|BACKGROUND_INTENSITY)
#define W SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN)
#define Wb SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_RED|BACKGROUND_BLUE|BACKGROUND_GREEN|BACKGROUND_INTENSITY)
#define Wb2 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_RED|BACKGROUND_BLUE|BACKGROUND_GREEN)
#define B SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_INTENSITY)
#define Bb SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_BLUE|FOREGROUND_RED|FOREGROUND_GREEN)
#define G SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN)
#define Gb SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_GREEN|BACKGROUND_INTENSITY)
#define Y SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN)
#define Yb SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_INTENSITY)
#define S SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_BLUE)
#define Sb SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_GREEN|BACKGROUND_BLUE|BACKGROUND_INTENSITY)
#define P SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_RED)
#define Pb SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_BLUE|BACKGROUND_RED|BACKGROUND_INTENSITY)
*/
#define br BACKGROUND_RED
#define bg BACKGROUND_GREEN
#define bb BACKGROUND_BLUE
#define bi BACKGROUND_INTENSITY
#define fr FOREGROUND_RED
#define fg FOREGROUND_GREEN
#define fb FOREGROUND_BLUE
#define fi FOREGROUND_INTENSITY
using namespace std;
int dx = 1, dy = 1;
int a[101][101];
int score = 0;
void col(int co)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), co);
}
void gotoxy(int x, int y)
{
COORD pos = {x, y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0};
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
bool check(char c)
{
return KEY_DOWN(c);
}
void prin(int num, bool choice)
{
col(fr + fg + fb);
switch (num)
{
case 0:
{
col(fr + fg + fb);
break;
}
case 1:
{
col(br + bi);
break;
}
case 2:
{
col(bg + bi);
break;
}
case 3:
{
col(bb + bi);
break;
}
}
if (choice)
cout << "**";
else
cout << " ";
}
bool dfs_map[101][101];
#define n 10
int dfs(int x, int y, int color)
{
if (color == 0)
return 0;
if (x < 1 || x > n || y < 1 || y > n)
return 0;
if (dfs_map[x][y])
return 0;
if (a[x][y] != 0 && a[x][y] != color)
return 0;
dfs_map[x][y] = 1;
if (a[x][y] == 0)
return dfs(x - 1, y, color) + dfs(x + 1, y, color) + dfs(x, y + 1, color) + dfs(x, y - 1, color);
else
{
a[x][y] = 0;
return 1 + dfs(x - 1, y, color) + dfs(x + 1, y, color) + dfs(x, y + 1, color) + dfs(x, y - 1, color);
}
}
bool wron()
{
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (a[i][j] != 0)
return 1;
return 0;
}
int main()
{
HideCursor();
srand((unsigned)time(NULL));
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
a[i][j] = rand() % 3 + 1, prin(a[i][j], 0); //cout<<a[i][j];
col(0), cout << endl;
}
while (wron())
{
int tmp = 0;
memset(dfs_map, 0, sizeof(dfs_map));
gotoxy(0, 0);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
if (i != dx || j != dy)
prin(a[i][j], 0); //cout<<a[i][j];
else
prin(a[i][j], 1);
col(0), cout << endl;
}
gotoxy(30, 0);
col(fr + fg + fb), cout << "dx:" << dx << " dy:" << dy << " score:" << score << " ";
Sleep(50);
if (check(VK_UP))
dx = max(dx - 1, 1);
if (check(VK_LEFT))
dy = max(dy - 1, 1);
if (check(VK_DOWN))
dx = min(dx + 1, n);
if (check(VK_RIGHT))
dy = min(dy + 1, n);
if (check(VK_RETURN))
tmp = dfs(dx, dy, a[dx][dy]), score += tmp * (tmp + 1);
}
gotoxy(30, 0);
col(fr + fg + fb), cout << " ";
gotoxy(10, 10);
cout << "score:" << score;
Sleep(10000);
}
UPb