zoukankan      html  css  js  c++  java
  • 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;
    }
    

      

  • 相关阅读:
    win10 安装cmake报错: "Installation directory must be on a local drive"
    python量化笔记16之夏普比率计算公式
    python机器量化之十七:混淆矩阵(confusion_matrix)含义
    使用Aspose.word (Java) 填充word文档数据
    python笔记(十八)机器量化分析—数据采集、预处理与建模
    js 使FORM表单的所有元素不可编辑的示例代码 表
    Web前端面试题:写一个mul函数
    vue + electron 快速入门
    Java新特性stream流
    mycat中间件进行MySQL数据表的水平拆分
  • 原文地址:https://www.cnblogs.com/AthosD/p/15711513.html
Copyright © 2011-2022 走看看