连连看(外观较简陋)

xiaoxiao2021-02-28  111

#include <windows.h> #include <conio.h> #include <iostream> #include<time.h> #include<stdio.h> #define jie 8  ///偶数 using namespace std; HANDLE hout; int X=0,Y=0,a,b,i=0,type;///xy记录当前坐标,ab记录上一个按下的坐标,i记录按下次数,type记录上一个的类型 void gotoxy(int x,int y) {         COORD coord; ///屏幕上的坐标         CONSOLE_SCREEN_BUFFER_INFO csbi; ///控制台屏幕缓冲区信息GetConsoleScreenBufferInfo(hout,&csbi);         coord.X=csbi.dwCursorPosition.X; ///得到坐标X的值         coord.Y=csbi.dwCursorPosition.Y; ///得到坐标Y的值         coord.X=x+2;         coord.Y=y+2;         SetConsoleCursorPosition(hout,coord); } class tu { private :     int gg[jie][jie]; public  :     ///构造函数     void dayin();///打印现状     void shubiaoyidong();     tu();     void jieshu(); }; void panduan(int tu[jie][jie],int m,int n,int x,int y)///m代表次数,n的0123代表方向 {     if(!m)     return;     if(x==a&&y==b)     {         tu[X][Y]=-1;         tu[a][b]=-1;         return;     }     if(y-1>=0)///上0         {             if(tu[x][y-1]==-1||(x==a&&y-1==b))             {                 if(n!=0)                 panduan(tu,m-1,0,x,y-1);                 else                 panduan(tu,m,0,x,y-1);             }         }     if(y+1<jie)///下1         {             if(tu[x][y+1]==-1||(x==a&&y+1==b))             {                 if(n!=1)                 panduan(tu,m-1,1,x,y+1);                 else                 panduan(tu,m,1,x,y+1);             }         }     if(x-1>=0)///左2         {             if(tu[x-1][y]==-1||(x-1==a&&y==b))                 {                     if(n!=2)                     panduan(tu,m-1,2,x,y);                     else                     panduan(tu,m,2,x-1,y);                 }         }     if(x+1<jie)///右3         {             if(tu[x+1][y]==-1||(x+1==a&&y==b))             {                 if(n!=3)                 panduan(tu,m-1,3,x+1,y);                 else                 panduan(tu,m,3,x+1,y);             }         } } void zhuanhua(int a) {     switch(a)     {     case 0:cout<<"*";break;     case 1:cout<<"@";break;     case 2:cout<<"#";break;     case 3:cout<<"$";break;     case 4:cout<<"%";break;     case 5:cout<<"&";break;     case -1:cout<<" ";break;     default:     gotoxy(15,15);     cout<<"false";     } } void tu::jieshu() {     int i,j;     for(i=0;i<jie;i++)         for(j=0;j<jie;j++)         if(gg[i][j]!=-1)         return;        gotoxy(15,15);     cout<<"you win"; } tu::tu() {     int m=(jie-2)*(jie-2)/6;///m为最多出现的图形数量     int n[6],t;///为已经出现的图形数量     srand((unsigned) time(NULL));     int i,j;     for(i=0;i<6;i++)         n[i]=0;     for(i=0;i<jie;i++)         gg[0][i]=-1;     for(i=1;i<jie;i++)         gg[i][0]=-1;     for(i=0;i<jie;i++)         gg[jie-1][i]=-1;///jie减一     for(i=0;i<jie;i++)         gg[i][jie-1]=-1;     for(i=1;i<jie-1;i++)     {         for(j=1;j<jie-1;j++)         {             t=rand()%6;             n[t]++;             if(n[t]<=m)///限制出现次数,为<=             gg[i][j]=t;             else             --j;         }     }     gotoxy(10,15);     cout<<"use w a s d to move,use y to pick"; } void tu::dayin() {     int i,j;     for(i=0;i<jie;i++)     {             for(j=0;j<jie;j++)             {                 gotoxy(i,j);                 zhuanhua(gg[i][j]);             }             cout<<"\n";     } } void tu::shubiaoyidong() {     gotoxy(X,Y);     char ch;        ch=getch();     switch(ch)         {         case 'w':             Y-=1;             gotoxy(X,Y);             break;         case 'a':             X-=1;             gotoxy(X,Y);             break;         case 's':             Y+=1;             gotoxy(X,Y);             break;         case 'd':             X+=1;             gotoxy(X,Y);             break;         case 'y':             i++;         if(i%2)             {                 type=gg[X][Y];                 a=X;                 b=Y;                 gotoxy(15,10);                 cout<<"the figure you has picked:";                 zhuanhua(type);                 gotoxy(X,Y);             }         if((i+1)%2)             {                 gotoxy(15,10);                 cout<<"                           ";                 if(a!=X||b!=Y)///注意此处是逻辑或                 {                     if(type==gg[X][Y])                     {                         for(int i=0;i<4;i++)                         panduan(gg,3,i,X,Y);                     }                 }             }             break;         default:             gotoxy(15,15);             cout<<"false";         } } int main(void) {     hout=GetStdHandle(STD_OUTPUT_HANDLE);     tu dota;     dota.dayin();     while(1)     {     dota.shubiaoyidong();     dota.dayin();     dota.jieshu();     } }
转载请注明原文地址: https://www.6miu.com/read-65364.html

最新回复(0)