2048
#include<bits/stdc++.h> #define int long long using namespace std; int a[5][5]; int read() { int sum,k=1;char s; while(s=getchar(),s<'0'||s>'9') if(s=='-') k=-1;sum=s-'0'; while(s=getchar(),s>='0'&&s<='9') sum=sum*10+s-'0'; return k*sum; } void add() { int val=rand()%2?2:4; vector<int>v[2]; for(int i=1;i<=4;i++) { for(int j=1;j<=4;j++) { if(a[i][j]==0) { v[0].push_back(i); v[1].push_back(j); } } } int pos=rand()%(int)v[0].size(); a[v[0][pos]][v[1][pos]]=val; } void out() { system("cls"); int S=0; for(int i=1;i<=4;i++) { for(int j=1;j<=20;j++) cout<<"-";cout<<endl; for(int j=1;j<=4;j++) { if(!a[i][j]) { cout<<"| "; continue; } cout<<'|'<<a[i][j]; if(a[i][j]<1000) cout<<' '; if(a[i][j]<100) cout<<' '; if(a[i][j]<10) cout<<' '; S=max(S,a[i][j]); } cout<<"|"<<endl; } cout<<"_______________________"<<endl; if(S==2048) { cout<<"Good Job !!!"<<endl; cout<<"按任意键结束"<<endl; char s=getchar(); exit(0); } } bool check1() { for(int i=1;i<=4;i++) { for(int j=2;j<=4;j++) { if(a[i][j]&&a[i][j-1]==0) return true; if(a[i][j]&&a[i][j-1]==a[i][j]) return true; } } return false; } bool check2() { for(int i=1;i<=4;i++) { for(int j=3;j>=1;j--) { if(a[j][i]&&a[j+1][i]==0) return true; if(a[j][i]&&a[j+1][i]==a[j][i]) return true; } } return false; } bool check3() { for(int i=1;i<=4;i++) { for(int j=2;j<=4;j++) { if(a[j][i]&&a[j-1][i]==0) return true; if(a[j][i]&&a[j-1][i]==a[j][i]) return true; } } return false; } bool check4() { for(int i=1;i<=4;i++) { for(int j=3;j>=1;j--) { if(a[i][j]&&a[i][j+1]==0) return true; if(a[i][j]&&a[i][j+1]==a[i][j]) return true; } } return false; } void work1() { for(int i=1;i<=4;i++) { vector<int>v; for(int j=1;j<=4;j++) { if(a[i][j]) v.push_back(a[i][j]),a[i][j]=0; } int pos=0; for(int j=0;j<v.size();j++) { if(j!=v.size()-1&&v[j+1]==v[j]) { a[i][++pos]=v[j]<<1; j++; } else a[i][++pos]=v[j]; } } } void work2() { for(int i=1;i<=4;i++) { vector<int>v; for(int j=4;j>=1;j--) { if(a[j][i]) v.push_back(a[j][i]),a[j][i]=0; } int pos=5; for(int j=0;j<v.size();j++) { if(j!=v.size()-1&&v[j]==v[j+1]) { a[--pos][i]=v[j]<<1; j++; } else a[--pos][i]=v[j]; } } } void work3() { for(int i=1;i<=4;i++) { vector<int>v; for(int j=1;j<=4;j++) { if(a[j][i]) v.push_back(a[j][i]),a[j][i]=0; } int pos=0; for(int j=0;j<v.size();j++) { if(j!=v.size()-1&&v[j]==v[j+1]) { a[++pos][i]=v[j]<<1; j++; } else a[++pos][i]=v[j]; } } } void work4() { for(int i=1;i<=4;i++) { vector<int>v; for(int j=4;j>=1;j--) { if(a[i][j]) v.push_back(a[i][j]),a[i][j]=0; } int pos=5; for(int j=0;j<v.size();j++) { if(j!=v.size()-1&&v[j+1]==v[j]) { a[i][--pos]=v[j]<<1; j++; } else a[i][--pos]=v[j]; } } } signed main() { //freopen("1.out","w",stdout); srand(time(0)); cout<<"按任意键开始游戏"<<endl; cout<<"a代表向左 s向下 d向右 w向上"<<endl; cout<<"每次输入完请按Enter"<<endl; char s=getchar(); add(); out(); while(check1()||check2()||check3()||check4()) { char s=getchar(); if(s=='a') { if(check1()) work1(),add(); } if(s=='s') { if(check2()) work2(),add(); } if(s=='w') { if(check3()) work3(),add(); } if(s=='d') { if(check4()) work4(),add(); } out(); } cout<<"Game Over !!!"<<endl; return 0; }