#include <bits/stdc++.h>
#include <windows.h>
#include <conio.h>
using namespace std;
int num[10005]={0};
int n,p[105][105],x,y,sum;
bool iswin(){
int f=1;
for(int i=1;i<=n-1;i++){
for(int j=1;j<=n;j++){
if(p[i][j]!=f)return false;
f++;
}
}
for(int j=1;j<=n-1;j++){
if(p[n][j]!=f)return false;
f++;
}
return true;
}
int main(){
srand(time(NULL));
cout<<"Welcome to play n-puzzle!Make sure that you're using Windows System..."<<endl;
cout<<"Please input the length:";
cin>>n;
x=rand()%n+1;
y=rand()%n+1;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==x && j==y)continue;
int k=rand()%(n*n-1)+1;
while(num[k])k=rand()%(n*n-1)+1;
p[i][j]=k;
num[k]=1;
}
}
for(int i=1;i<=n*n;i++)num[i]=0;
while(!iswin()){
char a;
system("cls");
cout<<"---------------------------------"<<endl;
cout<<" You have been moved "<<sum<<" steps."<<endl;
cout<<" Move: W A S D Restart: R "<<endl;
cout<<"---------------------------------"<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==x && j==y)printf("%-5c",'*');
else printf("%-5d",p[i][j]);
}
cout<<endl;
}
a=getch();
if(a=='w' || a=='W'){
if(x!=n){
p[x][y]=p[x+1][y];
x++;
}
}
if(a=='s' || a=='S'){
if(x!=1){
p[x][y]=p[x-1][y];
x--;
}
}
if(a=='a' || a=='A'){
if(y!=n){
p[x][y]=p[x][y+1];
y++;
}
}
if(a=='d' || a=='D'){
if(y!=1){
p[x][y]=p[x][y-1];
y--;
}
}
if(a=='r' || a=='R'){
x=rand()%n+1;
y=rand()%n+1;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==x && j==y)continue;
int k=rand()%(n*n-1)+1;
while(num[k])k=rand()%(n*n-1)+1;
p[i][j]=k;
num[k]=1;
}
}
for(int i=1;i<=n*n;i++)num[i]=0;
sum=0;
}
sum++;
}
system("cls");
cout<<"*-----------------*"<<endl;
printf("| Total:%-5d |\n",sum);
cout<<"| You Win! |"<<endl;
cout<<"*-----------------*"<<endl;
return 0;
}
c++数字华容道
最新推荐文章于 2023-08-12 09:42:53 发布