问题标题: 2048小游戏(纯手打改进版)

0
1
凌夏
凌夏
初级守护
初级守护

增加了

1.自选行数

2.游戏结束

凌夏在2025-12-02 19:17:11追加了内容
#include<bits/stdc++.h>
#include<cstdio>
#include<time.h>
#include<windows.h> 
using namespace std;
int a[100][100],n;
string s;
void leftmove(){
	int cnt=20;
	while(cnt--){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(a[i][j]==0 && a[i][j+1]!=0){
					swap(a[i][j],a[i][j+1]);
				}
			}
		}
	}
	cnt=20;
	while(cnt--){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(a[i][j]==a[i][j+1] && a[i][j]!=0){
					a[i][j]=a[i][j]*2;
					a[i][j+1]=0;
				}
			}
		}
	}
	cnt=20;
	while(cnt--){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(a[i][j]==0 && a[i][j+1]!=0){
					swap(a[i][j],a[i][j+1]);
				}
			}
		}
	}  
	while(1){
		int t1=rand()%n+1;
		Sleep(1);
		int t2=rand()%n+1;
		Sleep(1);
		if(!a[t1][t2]){
			a[t1][t2]=rand()%2+1;
			Sleep(1);
			break;
		}
	}
}
void rightmove(){
	int cnt=20;
	while(cnt--){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(a[i][j]==0 && a[i][j-1]!=0){
					swap(a[i][j],a[i][j-1]);
				}
			}
		}
	}
	cnt=20;
	while(cnt--){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(a[i][j]==a[i][j-1] && a[i][j]!=0){
					a[i][j]=a[i][j]*2;
					a[i][j-1]=0;
				}
			}
		}
	}
	cnt=20;
	while(cnt--){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(a[i][j]==0 && a[i][j-1]!=0){
					swap(a[i][j],a[i][j-1]);
				}
			}
		}
	}
	while(1){
		int t1=rand()%n+1;
		Sleep(1);
		int t2=rand()%n+1;
		Sleep(1);
		if(!a[t1][t2]){
			a[t1][t2]=rand()%2+1;
			Sleep(1);
			break;
		}
	}
}
void upmove(){
	int cnt=20;
	while(cnt--){
		for(int j=1;j<=n;j++){
			for(int i=1;i<=n;i++){
				if(a[i][j]==0 && a[i+1][j]!=0){
					swap(a[i][j],a[i+1][j]);
				}
			}
		}
	}
	cnt=20;
	while(cnt--){
		for(int j=1;j<=n;j++){
			for(int i=1;i<=n;i++){
				if(a[i][j]==a[i+1][j] && a[i][j]!=0){
					a[i][j]=a[i][j]*2;
					a[i+1][j]=0;
				}
			}
		}
	}
	cnt=20;
	while(cnt--){
		for(int j=1;j<=n;j++){
			for(int i=1;i<=n;i++){
				if(a[i][j]==0 && a[i+1][j]!=0){
					swap(a[i][j],a[i+1][j]);
				}
			}
		}
	}
	while(1){
		int t1=rand()%n+1;
		Sleep(1);
		int t2=rand()%n+1;
		Sleep(1);
		if(!a[t1][t2]){
			a[t1][t2]=rand()%2+1;
			Sleep(1);
			break;
		}
	}
}
void downmove(){
	int cnt=20;
	while(cnt--){
		for(int j=1;j<=n;j++){
			for(int i=1;i<=n;i++){
				if(a[i][j]==0 && a[i-1][j]!=0){
					swap(a[i][j],a[i-1][j]);
				}
			}
		}
	}
	cnt=20;
	while(cnt--){
		for(int j=1;j<=n;j++){
			for(int i=1;i<=n;i++){
				if(a[i][j]==a[i-1][j] && a[i][j]!=0){
					a[i][j]=a[i][j]*2;
					a[i-1][j]=0;
				}
			}
		}
	}
	cnt=20;
	while(cnt--){
		for(int j=1;j<=n;j++){
			for(int i=1;i<=n;i++){
				if(a[i][j]==0 && a[i-1][j]!=0){
					swap(a[i][j],a[i-1][j]);
				}
			}
		}
	}
	while(1){
		int t1=rand()%n+1;
		Sleep(1);
		int t2=rand()%n+1;
		Sleep(1);
		if(!a[t1][t2]){
			a[t1][t2]=rand()%2+1;
			Sleep(1);
			break;
		}
	}
}
int main(){
	//for(int i=1;i<=5;i++){
	//	for(int j=1;j<=5;j++){
	//		cin>>a[i][j];	
	//	}
	//}
	cout<<"2048小游戏\n输入地图大小(n*n):";
	cin>>n;
	cout<<"\n请用w,a,s,d控制\nw:上移\na:左移\ns:下移\nd:右移\n输入start开始";
	string start;
	cin>>start;
	while(1){
		for(int i=1;i<=60;i++) cout<<endl;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				cout<<setw(5)<<a[i][j];
			}
			cout<<endl;
		}
		int flag=0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if(a[i][j]==0) flag=1;
			}
		}
		if(flag==0){
			int maxn=0;
			for(int i=1;i<=n;i++){
				for(int j=1;j<=n;j++){
					maxn=max(maxn,a[i][j]);
				}
			}
			cout<<"游戏结束\n最高纪录:"<<maxn;
			return 0; 
		}
		cin>>s;
		if(s=="a") leftmove();
		else if(s=="d") rightmove();
		else if(s=="w") upmove(); 
		else if(s=="s") downmove(); 
		else{
			cout<<"操作不合法,重新输入";
			Sleep(1500); 
		} 
	}
    return 0;
}

 


1
0
马泓毅
马泓毅
中级守护
中级守护

上一个根本玩不了,这个ok

0
0
石峻帆
石峻帆
新手光能
新手光能

我的建议下一版加一下吧求求了

0
范聿舟
范聿舟
初级光能
初级光能

好玩,不过不要Sleep,太卡了

我要回答