C++2048Consose程序

来源:互联网 发布:淘宝 零食 知乎 编辑:程序博客网 时间:2024/05/22 12:10

<span style="white-space: pre;"></span><span style="background-color: rgb(255, 255, 0);">首次发文决定还是把今年寒假写的程序拿出来晒一晒,不然一直放着是会发霉的。</span>
#include<iostream>#include<ctime>#include<vector>#include<conio.h>using namespace std;#define Left 0#define Right 1//初始化数组void InitArry(int T[][4]){time_t Time=time(0);for(int i=0;i<4;i++)for(int j=0;j<4;j++){if((Time%4)==j){Time=Time/10;T[i][j]=2;}}}//输出数组void DisPlay(int T[][4]){for(int i=0;i<4;i++){for(int j=0;j<4;j++){if(T[i][j]){ cout<<T[i][j]<<"";}else{cout<<" "<<"";}}cout<<endl<<endl;}cout<<endl;}//数组转置void TranArry(int T[][4]){int Temp=0;for(int i=0;i<3;i++){for(int j=i+1;j<4;j++){Temp=T[i][j];T[i][j]=T[j][i];T[j][i]=Temp;}}}//数组向左或右对齐int DuiQi(int *T,bool Direction,bool &bFlag){bool Temp=false;bFlag=false;int Count=0;if(Left==Direction){for(int i=0;i<3;i++){if(T[i]==0){for(int j=i+1;j<4;j++){if(T[j]!=0){bFlag=true;//有变化Temp=true;T[i]=T[j];T[j]=0;break;}}if(!Temp)break;}}for(i=0;i<4;i++){if(T[i])Count++;}}else if(Right==Direction){for(int i=3;i>0;i--){if(T[i]==0){for(int j=i-1;j>-1;j--){if(T[j]!=0){bFlag=true;//有变化Temp=true;T[i]=T[j];T[j]=0;break;}}if(!Temp)break;}}for(i=3;i>-1;i--){if(T[i])Count++;}}return Count;}//bool AllArryDuiQi(int T[][4],bool Direction,int Num[]){bool bReturn=false;bool bTemp=true;for(int i=0;i<4;i++){Num[i]=DuiQi(T[i],Direction,bTemp);if(bTemp){bReturn=true;}}return bReturn;}//改变bool Equal(int T1[][4],int T2[][4]){for(int i=0;i<4;i++)for(int j=0;j<4;j++){if(T1[i][j]!=T2[i][j])return false;}return true;}//ADD数组的一行bool AddArry(int *T,bool Direction,int MaxOrMin)//MaxOrMin为数组某一行中的数字个数{bool TempFlag=false;int Temp[4]={0};int j=0;if(Left==Direction){for(int i=MaxOrMin-1;i>-1;){if(i!=0&&T[i]==T[i-1]){TempFlag=true;Temp[j]=T[i]*2;i-=2;}else{Temp[j]=T[i];i--;}j++;}for(i=0;i<4;i++){T[i]=0;}for(i=0;i<j;i++){T[i]=Temp[j-i-1];}}else if(Right==Direction){for(int i=4-MaxOrMin;i<4;){if(i!=3&&T[i]==T[i+1]){Temp[j]=T[i]*2;TempFlag=true;i+=2;}else{Temp[j]=T[i];i++;}j++;}for(i=0;i<4;i++){T[i]=0;}for(i=0;i<j;i++){T[i-j+4]=Temp[i];}}return TempFlag;}bool CheckWin(int T[][4]){for(int i=0;i<4;i++){for(int j=0;j<4;j++)if(T[i][j]==2048)return true;}return false;}bool AddAllArry(int T[][4],bool Direction,int Num[]){bool B=false;for(int i=0;i<4;i++)if(true==AddArry(T[i],Direction,Num[i])){B=true;}return B;}bool CheckFailed(int T[][4]){bool Flag=true;int Count=0;for(int i=0;i<4;i++){for(int j=0;j<4;j++){ if(0==T[i][j])return false;}}for(i=0;i<4;i++){for(int j=0;j<3;j++){if(T[i][j]==T[i][j+1])return false;}}TranArry(T);for(i=0;i<4;i++){for(int j=0;j<3;j++){if(T[i][j]==T[i][j+1])Flag=false;}}TranArry(T);return Flag;}///四个方向的矩阵变化bool ChangeArryAllDirection(int T[][4],int Flag){int Num[4]={0};bool IsChange=false;bool IsChangeData=false;switch(Flag){case 1://上TranArry(T);IsChange=AllArryDuiQi(T,Left,Num);IsChangeData=AddAllArry(T,Left,Num);TranArry(T);break;case 2://下TranArry(T);IsChange=AllArryDuiQi(T,Right,Num);IsChangeData=AddAllArry(T,Right,Num);TranArry(T);break;case 3://左IsChange=AllArryDuiQi(T,Left,Num);IsChangeData=AddAllArry(T,Left,Num);break;case 4://右IsChange=AllArryDuiQi(T,Right,Num);IsChangeData=AddAllArry(T,Right,Num);break;default:break;}return IsChange|IsChangeData;}//juzhengengxin//矩阵更新void FlahAllArry(int T[][4]){vector<int> Vec;int T1;for(int i=0;i<4;i++)for(int j=0;j<4;j++)if(T[i][j]==0){Vec.push_back(i*4+j);}time_t Time=time(0);T1=(Time+rand())%(Vec.size());T1=Vec[T1];T[T1/4][T1%4]=2;}int main(){int T[4][4]={0};InitArry(T);DisPlay(T);char ch;while(ch=getch()){int i=0;int TempArry[4][4];if(ch=='p')break;switch(ch){case 'w':case 'H':i=1;break;case 's':case 'P':i=2;break;case 'a':case 'K':i=3;break;case 'd':case 'M':i=4;break;default:break;}system("cls");if(i!=0){bool BT=ChangeArryAllDirection(T,i);if(BT)FlahAllArry(T);if(CheckWin(T)){cout<<"You Are Win!!!"<<endl;break;}if(CheckFailed(T)){cout<<"you are failed!!!!"<<endl;break;}}DisPlay(T);cout<<endl;}return 0;}



1 0
原创粉丝点击