#include<bits/stdc++.h> #include<windows.h> #define dn() ((GetAsyncKeyState(VK_LBUTTON)&0x8000)?true:false) using namespace std; POINT p; CONSOLE_FONT_INFO font; int a[11][11],n,x,y,v,sc; int dx[]= {0,-1,0,0,1},dy[]= {0,0,-1,1,0}; bool g[11][11]; void init() { memset(a,0,sizeof(a)); do { cout<<"Please enter the size of interface(2=n=10):"; cin:%22;%0Acin)>n; } while(n<2 || n>10); srand(int(time(NULL))); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) a[i][j]=rand()%6+1; } void put() { memset(g,false,sizeof(g)); system("cls"); for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { switch(a[i][j]) { case 0: cout<<" "; continue; case 1: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); break; case 2: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN); break; case 3: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN); break; case 4: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE); break; case 5: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_BLUE); break; case 6: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); } cout<<"□"; } cout<<endl; } SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); cout<<"Score:"; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN | FOREGROUND_BLUE); cout<<sc<<endl<<endl; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); } int c(int y) { return (y%2?(y+1)/2:y/2); } void dfs(int x,int y) { if(a[x][y]!=v) return; for(int d=1; d<5; d++) { int xx=x+dx[d],yy=y+dy[d]; if(xx>0 && xx<=n && yy>0 && yy<=n && !g[xx][yy] && a[xx][yy]==v) { g[xx][yy]=true; dfs(xx,yy); } } } bool lose() { for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) for(int d=1; d<5; d++) { int xx=i+dx[d],yy=j+dy[d]; if(xx>0 && xx<=n && yy>0 && yy<=n && a[i][j]==a[xx][yy]) return false; } return true; } int main() { init(); do { Sleep(1250); put(); DWORD mode; GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),&mode); mode&=~ENABLE_QUICK_EDIT_MODE; SetConsoleMode(GetStdHandle(STD_INPUT_HANDLE),mode); do { while(!dn()); POINT p; GetCursorPos(&p); ScreenToClient(GetForegroundWindow(),&p); GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE),FALSE,&font); x=(p.y/=font.dwFontSize.Y)+1; y=(p.x/=font.dwFontSize.X)+1; Sleep(100); if(x>n || y>n*2) continue; break; } while(1); v=a[x][c(y)]; dfs(x,c(y)); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if(g[i][j]) { sc++; a[i][j]=0; } put(); srand(int(time(NULL))); for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) if(!a[i][j]) a[i][j]=rand()%6+1; } while((n<7?(!lose()):1)); Sleep(1875); put(); Sleep(1875); system("cls"); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED); cout<<"You lost!"; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); cout<<"\n\nScore:"; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN | FOREGROUND_BLUE); cout<<sc; SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); return 0; }