作品发布:所罗门之匙

###简介:

这是一个在红白机上的游戏,游戏规则虽很简单,但玩起来却不简单。总的来说,这是一款有时难的让人怀疑人生的益智类游戏。

游戏截图:
1-1

###使用说明:

按键作用
向左移动一格
向右移动一格
向上爬一格
Z,X使用魔法
esc返回,暂停

详细说明: 贴吧

###代码&下载:

由于有大量图片,因此不能只用代码。
下载:网盘github

代码需要添加gdi32库,才能编译通过,Win10需要下载开发包。
code:

#include<windows.h>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
#define GAKS GetAsyncKeyState
const int width=30;
char ma[101][101],tmp[101],tm[101];
int fx[101][101],n,m,mx,my,to,bl,re,fire,win,bst,up,dn,S,F,M,CL,wdwd,wdhe;
bool mv[101][101],emp,ob;
HDC hDC;
void rr(){
	CONSOLE_SCREEN_BUFFER_INFO wd;
	GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE),&wd);
	wdwd=wd.srWindow.Right+1;
	wdhe=wd.srWindow.Bottom+1;
}
char leftlink(char ch){
	if(ch=='>')return 'O';
	else if(ch=='=')return '<';
	else if(ch=='L')return 'M';
	else if(ch=='D')return 'R';
	else return ch;
}
char rightlink(char ch){
	if(ch=='<')return 'O';
	else if(ch=='=')return '>';
	else if(ch=='R')return 'M';
	else if(ch=='D')return 'L';
	else return ch;
}
char oleftlink(char ch){
	if(ch=='O')return '>';
	else if(ch=='<')return '=';
	else if(ch=='M')return 'L';
	else if(ch=='R')return 'D';
	else return ch;
}
char orightlink(char ch){
	if(ch=='O')return '<';
	else if(ch=='>')return '=';
	else if(ch=='M')return 'R';
	else if(ch=='L')return 'D';
	else return ch;
}
void printco(char ch,int co,bool re){
	for(int i=1;i<=co;i++)printf("%c",ch);
	if(re)printf("\n");
}
void printmid(const char *s){
	rr();
	int len=strlen(s);
	int ko=wdwd-len,ech=ko/2,yu=ko%2;
	printco(' ',ech+yu,false);
	printf("%s",s);
	printco(' ',ech,false);
}
void printsmid(int co,const char *s[]){
	rr();
	int len=0;
	for(int i=0;i<co;i++)len+=strlen(s[i]);
	int ko=wdwd-len,ech=ko/(co+1),yu=ko%(co+1);
	for(int i=0;i<co;i++){
		if(i<yu)printf(" ");
		printco(' ',ech,false);
		printf("%s",s[i]);
	}
	printco(' ',ech,false);
}
void warning(const char *s){
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY);
	printf("Error:%s\n",s);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY);
}
int choslvl(){
	system("cls");
	int lev,pl,tot;
	FILE *tmp=fopen("data\\level.txt","rb"),*save=fopen("data\\save.txt","rb");
	fread(&tot,sizeof(int),1,tmp);
	fread(&pl,sizeof(int),1,save);
	fclose(save);
	if(!tot){
		printf("无关卡!\n\n");
		system("pause");
		return -1;
	}
	lev=min(tot,pl);
	tot=min((lev%10?lev/10+1:lev/10)*10,tot);
	for(int i=1;i<lev;i++){
		int me;
		fread(&me,sizeof(int),1,tmp);
		fseek(tmp,ftell(tmp)+me,SEEK_SET);
	}
	while(true){
		system("cls");
		printmid("选择关卡");
		printf("\n\n");
		rr();
		printco('=',wdwd,true);
		printf("按esc退出\n\n");
		FILE *rd=fopen("data\\level.txt","rb");
		fseek(rd,ftell(tmp)+sizeof(int),SEEK_SET);
		fread(&n,sizeof(int),1,rd);
		fread(&m,sizeof(int),1,rd);
		for(int i=1;i<=n;i++){
			fread(&ma[i][1],sizeof(char),m,rd);
			ma[i][m+1]='\0';
		}
		fclose(rd);
		rr();
		int h=wdhe-4-n-tot/10,l,r;
		if(h>=tot){
			l=1;
			r=tot;
		}else{
			l=max(lev-h/2,1);
			r=min(lev+h/2-1,tot);
		}
		for(int i=l;i<=r;i++){
			if(lev==i)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY);
			if(i>pl)SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
			printf("关卡%d-%d",(i-1)/10+1,(!(i%10)?10:i%10));
			if(lev==i){
				printf(" █\n");
				printf("	%d×%d\n",n,m);
				for(int i=1;i<=n;i++)printf("	%s\n",&ma[i][1]);
			}else printf("\n");
			if(!(i%10))printf("\n");
			SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY);
		}
		bool esc,up,down,enter;
		while((esc=GAKS(VK_ESCAPE))||(up=GAKS(VK_UP))||(down=GAKS(VK_DOWN))||(enter=GAKS(VK_RETURN)));
		while(!((esc=GAKS(VK_ESCAPE))||(up=GAKS(VK_UP))||(down=GAKS(VK_DOWN))||(enter=GAKS(VK_RETURN))));
		if(esc){
			fclose(tmp);
			return -1;
		}else if(up&&lev!=1){
			fseek(tmp,ftell(tmp)-sizeof(int),SEEK_SET);
			int me;
			fread(&me,sizeof(int),1,tmp);
			fseek(tmp,ftell(tmp)-sizeof(int)-me,SEEK_SET);
			lev--;
		}else if(down&&lev!=tot){
			int me;
			fread(&me,sizeof(int),1,tmp);
			fseek(tmp,ftell(tmp)+me,SEEK_SET);
			lev++;
		}else if(enter&&lev<=pl){
			fclose(tmp);
			bl=(lev%10?lev/10+1:lev/10);
			return lev;
		}
	}
}
void rdlvlmap(int lvl){
	int tm;
	FILE *tmp=fopen("data\\level.txt","rb");
	fread(&tm,sizeof(int),1,tmp);
	for(int i=1;i<lvl;i++){
		int me;
		fread(&me,sizeof(int),1,tmp);
		fseek(tmp,ftell(tmp)+me,SEEK_SET);
	}
	fread(&tm,sizeof(int),1,tmp);
	fread(&n,sizeof(int),1,tmp);
	fread(&m,sizeof(int),1,tmp);
	for(int i=1;i<=n;i++){
		fread(&ma[i][1],sizeof(char),m,tmp);
		ma[i][m+1]='\0';
	}
	fclose(tmp);
}
void showbmp(const char *li,int x,int y,int w=width,int h=width){
	HBITMAP hBitmap=(HBITMAP)LoadImage(NULL,li,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
	HBRUSH hBrush=CreatePatternBrush(hBitmap);
	HBRUSH hOldBrush=(HBRUSH)SelectObject(hDC,hBrush);
	HPEN hPen=CreatePen(PS_NULL,0,RGB(0,0,0));
	HPEN hOldPen=(HPEN)SelectObject(hDC,hPen);
	POINT P=(POINT){0,0};
	SetViewportOrgEx(hDC,x,y-(up-1)*w,&P);
	Rectangle(hDC,0,0,w+1,h+1);
	SelectObject(hDC,hOldBrush);
	SelectObject(hDC,hOldPen);
	DeleteObject(hOldBrush);
	DeleteObject(hBrush);
	DeleteObject(hOldPen);
	DeleteObject(hPen);
	DeleteObject(hBitmap);
} 
const char* addbylvl(const char *s,int lv){
	if(lv%10!=1)sprintf(tmp,"%s%d.bmp",s,(lv<=10?lv:lv%10));
	else sprintf(tmp,"%s.bmp",s);
	return tmp;
}
const char* addbylvlnm(const char *s,int lv){
	sprintf(tmp,"%s%d.bmp",s,lv);
	return tmp;
}
const char* getlib(char c){
	if(c=='F')return addbylvl("data\\fire",bl);
	else if(c=='a')return addbylvlnm("data\\airfireud",bl);
	else if(c=='_'){
		if(emp)return "data\\empty.bmp";
		else return addbylvl("data\\back",bl);
	}else if(c=='M')return "data\\iron.bmp";
	else if(c=='L')return "data\\liceiron.bmp";
	else if(c=='R')return "data\\riceiron.bmp";
	else if(c=='D')return "data\\licericeiron.bmp";
	else if(c=='e')return "data\\empty.bmp";
	else if(c=='=')return "data\\licerice.bmp";
	else if(c=='>')return "data\\licer_.bmp";
	else if(c=='<')return "data\\l_rice.bmp";
	else if(c=='x')return "data\\firebucket_close.bmp";
	else if(c=='V')return "data\\firebucket_open.bmp";
	else if(c=='|')return "data\\UD.bmp";
	else if(c=='-')return "data\\LR.bmp";
	else if(c=='/')return "data\\UL.bmp";
	else if(c=='\\')return "data\\LD.bmp";
	else if(c=='\'')return "data\\UR.bmp";
	else if(c=='\"')return "data\\RD.bmp";
	else return "data\\l_r_.bmp";
}
void boom(int x,int y){
	showbmp(addbylvl("data\\ac_1",bl),(y-1)*width,(x+1)*width);
	Sleep(10);
	showbmp(addbylvl("data\\ac_2",bl),(y-1)*width,(x+1)*width);
	Sleep(10);
	showbmp(getlib(ma[x][y]),(y-1)*width,(x+1)*width);
}
void printmap(){
	int cl=(CL==n+1?n:CL);
	up=max(1,cl-24);
	dn=cl;
	for(int i=up;i<=min(dn+1,n);i++){
		for(int j=1;j<=m;j++){
			if(ma[i][j]=='S'){
				sprintf(tmp,"data\\boss_%d.bmp",bst);
				showbmp(tmp,(j-1)*width,(i+1)*width,180,240);
			}else if(ma[i][j]=='n'||ma[i][j]=='H')continue;
			else if(ma[i][j]=='B'){
				mx=i;
				my=j;
				if(emp){
					if(!to)showbmp("data\\player_leftempty.bmp",(j-1)*width,(i+1)*width);
					else showbmp("data\\player_rightempty.bmp",(j-1)*width,(i+1)*width);
				}else{
					if(!to)showbmp(addbylvl("data\\player_left",bl),(j-1)*width,(i+1)*width);
					else showbmp(addbylvl("data\\player_right",bl),(j-1)*width,(i+1)*width);
				}
			}else if(ma[i][j]=='f'){
				if(!fx[i][j])showbmp(addbylvlnm("data\\airfirelrl",bl),(j-1)*width,(i+1)*width);
				else showbmp(addbylvlnm("data\\airfirelrr",bl),(j-1)*width,(i+1)*width);
			}else if(ma[i][j]=='@'||ma[i][j]=='|'||ma[i][j]=='-'||ma[i][j]=='\\'||ma[i][j]=='/'||ma[i][j]=='\''||ma[i][j]=='\"'||ma[i][j]=='x'||ma[i][j]=='V'){
				if(ma[i][j]=='V'&&i==CL)showbmp("data\\superfire.bmp",(j-1)*width,(i+1)*width);
				else{
					string tm;
					if(ma[i][j]!='@'){
						tm=getlib(ma[i][j]);
						tm=tm.substr(0,tm.size()-4);
					}
					if(ma[i][j-1]=='<'||ma[i][j-1]=='='){
						if(ma[i][j+1]=='='||ma[i][j+1]=='>'){
							if(ma[i][j]!='@')sprintf(tmp,"%sLRI.bmp",tm.c_str());
							else sprintf(tmp,"%s",addbylvl("data\\wallLRI",bl));
							showbmp(tmp,(j-1)*width,(i+1)*width);
						}else{
							if(ma[i][j]!='@')sprintf(tmp,"%sLI.bmp",tm.c_str());
							else sprintf(tmp,"%s",addbylvl("data\\wallLI",bl));
							showbmp(tmp,(j-1)*width,(i+1)*width);
						}
					}else{
						if(ma[i][j+1]=='='||ma[i][j+1]=='>'){
							if(ma[i][j]!='@')sprintf(tmp,"%sRI.bmp",tm.c_str());
							else sprintf(tmp,"%s",addbylvl("data\\wallRI",bl));
							showbmp(tmp,(j-1)*width,(i+1)*width);
						}else{
							if(ma[i][j]!='@')sprintf(tmp,"%s.bmp",tm.c_str());
							else sprintf(tmp,"%s",addbylvl("data\\wall",bl));
							showbmp(tmp,(j-1)*width,(i+1)*width);
						}
					}
				}
			}else showbmp(getlib(ma[i][j]),(j-1)*width,(i+1)*width);
		}
	}
}
int cntfr(){
	int cl=(CL==n+1?n:CL),fir=0;
	up=max(1,cl-24);
	dn=cl;
	for(int i=up;i<=dn;i++)for(int j=1;j<=m;j++)if(ma[i][j]=='F'||ma[i][j]=='f'||ma[i][j]=='a')fir++;
	return fir;
}
bool onsky(int x,int y,int &r){
	if(ma[x][y]=='O'||ma[x][y]=='M'){r=y+1;return true;}
	for(int j=y;j<m;j++){
		if((ma[x][j]=='<'||ma[x][j]=='='||ma[x][j]=='R'||ma[x][j]=='D')&&(ma[x][j+1]=='@'||ma[x][j+1]=='|'||ma[x][j+1]=='-'||ma[x][j+1]=='\\'||
		ma[x][j+1]=='/'||ma[x][j+1]=='\''||ma[x][j+1]=='\"'||ma[x][j+1]=='x'||ma[x][j+1]=='V'))return false;
		if(ma[x][j]=='>'||ma[x][j]=='L'){r=j+1;break;}
	}
	return true;
}
void fallfire(){
	for(int i=n-1;i>=2;i--){
		bool move=false;
		for(int j=2;j<m;j++){
			if(ma[i][j]=='F'&&(ma[i+1][j]=='_'||ma[i+1][j]=='x')){
				if(ma[i+1][j]=='_'){
					move=true;
					ma[i+1][j]='F';
					ma[i][j]='_';
				}else ma[i+1][j]='V';
			}
		}
		if(move){
			printmap();
			Sleep(10);
			i+=2;
		}
	}
}
void fallice(){
	for(int i=n-1;i>=2;i--){
		bool move=false;
		for(int j=2;j<m;j++){
			if(ma[i][j]=='<'||ma[i][j]=='O'||ma[i][j]=='R'||ma[i][j]=='M'){
				int f=j,r;
				bool on=onsky(i,j,r);
				if(on){
					bool check=true;
					for(int k=f;k<r;k++){
						if(ma[i+1][k]!='_'&&ma[i+1][k]!='F'&&ma[i+1][k]!='f'&&ma[i+1][k]!='a'){
							check=false;
							break;
						}
					}
					if(check){
						move=true;
						for(int k=f;k<r;k++){
							tm[k]=ma[i+1][k];
							ma[i+1][k]=ma[i][k];
							ma[i][k]='_';
						}
						printmap();
						Sleep(10);
						for(int k=f;k<r;k++){
							if(tm[k]=='F'||tm[k]=='f'||tm[k]=='a'){
								fire--;
								if(ma[i+1][k]=='<'||ma[i+1][k]=='='||ma[i+1][k]=='>'||ma[i+1][k]=='O')ma[i+1][k]='_';
								boom(i+1,k);
							}else if((ma[i+1][k]=='<'||ma[i+1][k]=='='||ma[i+1][k]=='>'||ma[i+1][k]=='O')&&ma[i+2][k]=='V'){
								ma[i+1][k]='_';
								boom(i+1,k);
							}
						}
						for(int k=f;k<r;k++){
							if(k-1>=f&&ma[i+1][k-1]=='_'&&ma[i+1][k]!='_')ma[i+1][k]=leftlink(ma[i+1][k]);
							if(k+1<r&&ma[i+1][k+1]=='_'&&ma[i+1][k]!='_')ma[i+1][k]=rightlink(ma[i+1][k]);
						}
						printmap();
						Sleep(10);
						fallfire();
					}
				}
			}
		}
		if(move)i+=2;
	}
}
void goice(int x,int y,int pl){
	bool kf=false;
	while((ma[x][y+pl]=='_'||ma[x][y+pl]=='F'||ma[x][y+pl]=='f'||ma[x][y+pl]=='a'||ma[x][y+pl]=='H')&&ma[x+1][y]!='_'&&ma[x+1][y]!='F'&&ma[x+1][y]!='f'&&ma[x+1][y]!='a'){
		if(ma[x+1][y]=='V'){
			ma[x][y]='_';
			boom(x,y);
			kf=true;
		}else if(ma[x][y+pl]=='_'){
			ma[x][y+pl]='O';
			ma[x][y]='_';
			y+=pl;
		}else if(ma[x][y+pl]=='H'){
			kf=true;
			ma[x][y]='_';
			boom(x,y);
			fire--;
			showbmp("data\\boss_hit.bmp",30,180,180,240);
			Sleep(100);
			sprintf(tmp,"data\\boss_%d.bmp",bst);
			showbmp(tmp,30,180,180,240);
		}else{
			char tmp=ma[x][y];
			ma[x][y]=ma[x][y+pl]='_';
			kf=true;
			showbmp(getlib('_'),(y-1)*width,(x+1)*width);
			showbmp(getlib(tmp),(y+pl-1)*width,(x+1)*width);
			Sleep(10);
			boom(x,y+pl);
			fire--;
		}
		printmap();
		Sleep(30);
		if(kf)break;
	}
	if(ma[x+1][y]=='V'){
		ma[x][y]='_';
		boom(x,y);
		kf=true;
	}
	if(kf)fallfire();
	fallice();
}
void gom(int x,int y,int pl){
	if(ma[x+1][y+pl]!='<'&&ma[x+1][y+pl]!='='&&ma[x+1][y+pl]!='>'&&ma[x+1][y+pl]!='O'&&(ma[x][y+pl]=='_'||ma[x][y+pl]=='F'||ma[x][y+pl]=='f'||ma[x][y+pl]=='a')){
		if(ma[x][y+pl]=='_'){
			ma[x][y+pl]='M';
			ma[x][y]='_';
			y+=pl;
			printmap();
			Sleep(20);
		}else{
			ma[x][y+pl]='M';
			ma[x][y]='_';
			showbmp(getlib('_'),(y-1)*width,(x+1)*width);
			showbmp(getlib(ma[x][y+pl]),(y+pl-1)*width,(x+1)*width);
			Sleep(10);
			boom(x,y+pl);
			fire--;
		}
	}else if(ma[x+1][y+pl]=='<'||ma[x+1][y+pl]=='='||ma[x+1][y+pl]=='>'||ma[x+1][y+pl]=='O'){
		while((ma[x][y+pl]=='_'||ma[x][y+pl]=='F'||ma[x][y+pl]=='f'||ma[x][y+pl]=='a')&&ma[x+1][y]!='_'&&ma[x+1][y]!='F'
		&&ma[x+1][y]!='f'&&ma[x+1][y]!='a'){
			char tmp=ma[x][y+pl];
			ma[x][y+pl]='M';
			ma[x][y]='_';
			if(tmp!='_'){
				printmap();
				Sleep(10);
				boom(x,y+pl);
				fallfire();
				fallice();
				fire--;
			}
			y+=pl;
			printmap();
			Sleep(20);
			if(ma[x+1][y]!='<'&&ma[x+1][y]!='='&&ma[x+1][y]!='>'&&ma[x+1][y]!='O')break;
		}
	}
	fallfire();
	fallice();
}
void clear(){for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)showbmp("data\\empty.bmp",(j-1)*30,(i+1)*30);}
bool fall(int mx,int my){
	while(ma[mx+1][my]=='_'||ma[mx+1][my]=='F'||ma[mx+1][my]=='f'||ma[mx+1][my]=='a'||ma[mx+1][my]=='V'){
		printmap();
		Sleep(20);
		if(ma[mx+1][my]=='_'){
			ma[mx+1][my]='B';
			ma[mx++][my]='_';
		}else{
			if(!to)showbmp(addbylvl("data\\player_leftdie",bl),(my-1)*width,(mx+1)*width);
			else showbmp(addbylvl("data\\player_rightdie",bl),(my-1)*width,(mx+1)*width);
			win=0;
			return false;
		}
	}
	fallice();
	fallfire();
	return true;
}
bool crosspipe(int x,int y,int fx,int fy){
	int lx=-1,ly=-1;
	while(ma[x][y]=='|'||ma[x][y]=='-'||ma[x][y]=='\\'||ma[x][y]=='/'||ma[x][y]=='\''||ma[x][y]=='\"'){
		string tm=getlib(ma[x][y]);
		sprintf(tmp,"%s.bmp",string(tm.substr(0,tm.size()-4)+"B").c_str());
		showbmp(tmp,(y-1)*width,(x+1)*width);
		if(lx!=-1&&ly!=-1)showbmp(getlib(ma[lx][ly]),(ly-1)*width,(lx+1)*width);
		int chx[3],chy[3],cnt=0;
		if(ma[x][y]=='|'||ma[x][y]=='/'||ma[x][y]=='\''){chx[++cnt]=x-1,chy[cnt]=y;}
		if(ma[x][y]=='-'||ma[x][y]=='/'||ma[x][y]=='\\'){chx[++cnt]=x;chy[cnt]=y-1;}
		if(ma[x][y]=='|'||ma[x][y]=='\\'||ma[x][y]=='\"'){chx[++cnt]=x+1;chy[cnt]=y;}
		if(ma[x][y]=='-'||ma[x][y]=='\''||ma[x][y]=='\"'){chx[++cnt]=x;chy[cnt]=y+1;}
		for(int i=1;i<=2;i++){
			if(((lx!=-1&&ly!=-1)||(chx[i]!=fx||chy[i]!=fy))&&(chx[i]!=lx||chy[i]!=ly)){
				lx=x;
				ly=y;
				if(chy[i]==y-1)to=0;
				else if(chy[i]==y+1)to=1;
				x=chx[i];
				y=chy[i];
				break;
			}
		}
		Sleep(30);
	}
	showbmp(getlib(ma[lx][ly]),(ly-1)*width,(lx+1)*width);
	if(ma[x][y]=='_'){
		ma[x][y]='B';
		return fall(x,y);
	}else return crosspipe(lx,ly,x,y);
}
void movef(){
	memset(mv,false,sizeof(mv));
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if((ma[i][j]=='f'||ma[i][j]=='a')&&!mv[i][j]){
				if(ma[i][j]=='f'){
					if(fx[i][j]&&ma[i][j+1]!='_'&&ma[i][j+1]!='B')fx[i][j]=0;
					if(!fx[i][j]&&(ma[i][j-1]=='_'||ma[i][j-1]=='B')){
						if(ma[i][j-1]=='_'){
							ma[i][j-1]='f';
							ma[i][j]='_';
							swap(fx[i][j],fx[i][j-1]);
							mv[i][j-1]=true;
						}else{
							if(!to)showbmp(addbylvl("data\\player_leftdie",bl),(j-2)*width,(i+1)*width);
							else showbmp(addbylvl("data\\player_rightdie",bl),(j-2)*width,(i+1)*width);
							win=0;
							return;
						}
					}else if(ma[i][j+1]=='_'||ma[i][j+1]=='B'){
						if(ma[i][j+1]=='_'){
							ma[i][j+1]='f';
							ma[i][j]='_';
							swap(fx[i][j],fx[i][j+1]);
							mv[i][j+1]=true;
						}else{
							if(!to)showbmp(addbylvl("data\\player_leftdie",bl),j*width,(i+1)*width);
							else showbmp(addbylvl("data\\player_rightdie",bl),j*width,(i+1)*width);
							win=0;
							return;
						}
					}
				}else if(ma[i][j]=='a'){
					if(!fx[i][j]&&ma[i-1][j]!='_'&&ma[i-1][j]!='B')fx[i][j]=1;
					if(fx[i][j]&&ma[i+1][j]!='_'&&ma[i+1][j]!='B')fx[i][j]=0;
					if(!fx[i][j]&&(ma[i-1][j]=='_'||ma[i-1][j]=='B')){
						if(ma[i-1][j]=='_'){
							ma[i-1][j]='a';
							ma[i][j]='_';
							swap(fx[i][j],fx[i-1][j]);
							mv[i-1][j]=true;
						}else{
							if(!to)showbmp(addbylvl("data\\player_leftdie",bl),(j-1)*width,i*width);
							else showbmp(addbylvl("data\\player_rightdie",bl),(j-1)*width,i*width);
							win=0;
							return;
						}
					}else if(ma[i+1][j]=='_'||ma[i+1][j]=='B'){
						if(ma[i+1][j]=='_'){
							ma[i+1][j]='a';
							ma[i][j]='_';
							swap(fx[i][j],fx[i+1][j]);
							mv[i+1][j]=true;
						}else{
							if(!to)showbmp(addbylvl("data\\player_leftdie",bl),(j-1)*width,(i+2)*width);
							else showbmp(addbylvl("data\\player_rightdie",bl),(j-1)*width,(i+2)*width);
							win=0;
							return;
						}
					}
				}
			}
		}
	}
	printmap();
}
DWORD WINAPI counttime(LPVOID d){
	printf("按esc暂停\n时间:%02d:%02d:%02d",S,F,M);
	while(true){
		for(int i=1;i<=13;i++)printf("\b");
		printf("时间:%02d:%02d:%02d",S,F,M);
		movef();
		if((re%20==10||(re>=115&&re%10==5))&&re!=130&&re!=150&&!((S*3600+F*60+M)%(re%20==10?10:5))){
			CL--;
			if(CL-24<up)for(int j=1;j<=m;j++)if(ma[CL-24][j]=='F'||ma[CL-24][j]=='f'||ma[CL-24][j]=='a')fire++;
			for(int j=1;j<=m;j++){
				if(CL!=n)ma[CL+1][j]='e';
				if(ma[CL][j]=='B'||ma[CL-1][j]=='B'){
					int xx=(ma[CL][j]=='B'?CL:CL-1);
					if(!to)showbmp(addbylvl("data\\player_leftdie",bl),(j-1)*width,(xx+1)*width);
					else showbmp(addbylvl("data\\player_rightdie",bl),(j-1)*width,(xx+1)*width);
					win=0;
					return 0;
				}
				if(ma[CL][j]=='F'||ma[CL][j]=='f'||ma[CL][j]=='a')fire--;
				ma[CL][j]='V';
			}
			printmap();
		}
		if(re==100&&ob){
			int tot=(S*3600+F*60+M)%9;
			if(tot<=2)bst=0;
			else if(tot<=5)bst=tot-2;
			else if(tot==6){
				bst=4;
				queue<int>qx,qy;
				FILE *li=fopen("data\\flist.txt","r");
				int now=1,tot;
				fscanf(li,"%d",&tot);
				for(int i=1;i<=tot+9;i++){
					if(now<=tot){
						char s[10];
						int xx,yy;
						fscanf(li,"%d%d%s",&xx,&yy,s);
						sprintf(tmp,"data\\destroy_%s.bmp",s);
						if(ma[xx][yy]=='B'){
							if(!to)showbmp(addbylvl("data\\player_leftdie",bl),(yy-1)*width,(xx+1)*width);
							else showbmp(addbylvl("data\\player_rightdie",bl),(yy-1)*width,(xx+1)*width);
							win=0;
							return 0;
						}else{
							ma[xx][yy]='_';
							showbmp(tmp,(yy-1)*width,(xx+1)*width);
							if(ma[xx][yy-1]=='<'||ma[xx][yy-1]=='='){
								ma[xx][yy-1]=rightlink(ma[xx][yy-1]);
								showbmp(getlib(ma[xx][yy-1]),(yy-2)*width,(xx+1)*width);
							}
							if(ma[xx][yy+1]=='>'||ma[xx][yy+1]=='='){
								ma[xx][yy+1]=leftlink(ma[xx][yy+1]);
								showbmp(getlib(ma[xx][yy+1]),yy*width,(xx+1)*width);
							}
						}
						qx.push(xx);
						qy.push(yy);
						now++;
					}
					if(now>=11){
						int xx=qx.front(),yy=qy.front();
						qx.pop();
						qy.pop();
						showbmp("data\\empty.bmp",(yy-1)*width,(xx+1)*width);
					}
					Sleep(30);
				}
				fallice();
				fallfire();
				printmap();
				fall(mx,my);
			}
		}
		Sleep(1000);
		M++;
		if(M==60){F++;M=0;}
		if(F==60){S++;F=0;}
	}
	return 0;
}
void CONGRATULATION(){
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
	printf("C");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
	printf("O");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
	printf("N");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
	printf("G");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
	printf("R");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN);
	printf("A");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);
	printf("T");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED);
	printf("U");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE);
	printf("L");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN);
	printf("A");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_BLUE);
	printf("T");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);
	printf("I");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN);
	printf("O");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);
	printf("N");
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|FOREGROUND_RED);
	printf("S!\n\n");
}
int main(){
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY);
	HWND hwnd=GetConsoleWindow();
	hDC=GetDC(hwnd);
	while(true){
		int ans=0;
		while(ans>4||ans<1){
			system("cls");
			printmid("所罗门之匙2");
			printf("\n\n");
			rr();
			printco('=',wdwd,false);
			printmid("请选择:");
			printf("\n\n"); 
			const char *tmp[4]={"1:选关","2:编辑关卡","3:初始化","4:退出"};
			printsmid(4,tmp);
			printco('=',wdwd,true);
			printf("\n请选择:");
			bool o,t,h,f;
			while(GAKS('1')||GAKS('2')||GAKS('3')||GAKS('4'));
			while(!(GetForegroundWindow()==hwnd&&((o=GAKS('1'))||(t=GAKS('2'))||(h=GAKS('3'))||(f=GAKS('4')))));
			if(o)ans=1;
			else if(t)ans=2;
			else if(h)ans=3;
			else if(f)ans=4;
		}
		if(ans==1){
			re=choslvl();
			system("cls");
			bool res=true;
			if(re!=-1){
				while(res){
					S=F=M=bst=0;
					CL=n+1;
					rdlvlmap(re);
					res=emp=ob=false;
					HANDLE h=CreateThread(NULL,0,counttime,NULL,0,NULL);
					win=-1;
					to=0;
					fire=cntfr();
					while(true){
						printmap();
						if(!fire){
							if(re==100&&!ob){
								Sleep(20);
								S=F=M=0;
								fire=5;
								FILE *bs=fopen("data\\finalboss.txt","r");
								fscanf(bs,"%d%d",&n,&m);
								for(int i=1;i<=n;i++){
									fscanf(bs,"%s",&ma[i][1]);
									ma[i][m+1]='\0';
								}
								ob=emp=true;
								printmap();
							}else{
								win=1;
								break;
							}
						}
						bool esc,l,r,u,d,z,x;
						while(GAKS(VK_ESCAPE)||GAKS(VK_LEFT)||GAKS(VK_RIGHT)||GAKS(VK_UP)||GAKS(VK_DOWN)||GAKS('Z')||GAKS('X'));
						while(!(GetForegroundWindow()==hwnd&&((esc=GAKS(VK_ESCAPE))||(l=GAKS(VK_LEFT))||(r=GAKS(VK_RIGHT))||(u=GAKS(VK_UP))||(d=GAKS(VK_DOWN))||(z=GAKS('Z'))||(x=GAKS('X'))||win==0||fire==0)));
						if(!win)break;
						if(!fire)continue;
						if(esc){
							clear();
							TerminateThread(h,0);
							int ans=0;
							while(ans>3||ans<1){
								system("cls");
								rr();
								printco('=',wdwd,false);
								printmid("已暂停。");
								printf("\n");
								printmid("请选择:");
								printf("\n\n");
								const char *tmp[3]={"1:返回","2:重新开始","3:退出"};
								printsmid(3,tmp);
								printco('=',wdwd,true);
								printf("\n请选择:");
								bool o,t,h;
								while(GAKS('1')||GAKS('2')||GAKS('3'));
								while(!(GetForegroundWindow()==hwnd&&((o=GAKS('1'))||(t=GAKS('2'))||(h=GAKS('3')))));
								if(o)ans=1;
								else if(t)ans=2;
								else if(h)ans=3;
							}
							if(ans==1)h=CreateThread(NULL,0,counttime,NULL,0,NULL);
							else if(ans==2){system("cls");res=true;break;}
							else if(ans==3){win=-2;break;}
						}else if(u&&(ma[mx-1][my]=='_'||ma[mx-1][my]=='|'||ma[mx-1][my]=='\\'||ma[mx-1][my]=='\"')){
							if(ma[mx-1][my]=='_'){
								if(!to&&(ma[mx-1][my-1]=='_'||ma[mx-1][my-1]=='-'||ma[mx-1][my-1]=='\''||ma[mx-1][my-1]=='\"')&&ma[mx][my-1]!='F'
								&&ma[mx][my-1]!='f'&&ma[mx][my-1]!='a'&&ma[mx][my-1]!='V'&&ma[mx][my-1]!='_'&&ma[mx][my-1]!='-'&&ma[mx][my-1]!='\"'
								&&ma[mx][my-1]!='\''&&((ma[mx][my-1]!='O'&&ma[mx][my-1]!='M')||(ma[mx][my-2]!='_'&&ma[mx][my-2]!='F'&&ma[mx][my-2]!='f'))){
									if(ma[mx-1][my-1]=='_'){
										ma[mx-1][my]='B';
										ma[mx--][my]='_';
										Sleep(20);
										printmap();
										ma[mx][my-1]='B';
										ma[mx][my--]='_';
										Sleep(20);
									}else{
										ma[mx-1][my]='B';
										ma[mx--][my]='_';
										Sleep(20);
										printmap();
										ma[mx][my]='_';
										printmap();
										if(!crosspipe(mx,my-1,mx,my))break;
									}
								}else if(to&&(ma[mx-1][my+1]=='_'||ma[mx-1][my+1]=='-'||ma[mx-1][my+1]=='/'||ma[mx-1][my+1]=='\\')&&ma[mx][my+1]!='F'&&ma[mx][my+1]!='f'
								&&ma[mx][my+1]!='a'&&ma[mx][my+1]!='V'&&ma[mx][my+1]!='_'&&ma[mx][my+1]!='-'&&ma[mx][my+1]!='/'
								&&ma[mx][my+1]!='\\'&&((ma[mx][my+1]!='O'&&ma[mx][my+1]!='M')||(ma[mx][my+2]!='_'&&ma[mx][my+2]!='F'&&ma[mx][my+2]!='f'))){
									if(ma[mx-1][my+1]=='_'){
										ma[mx-1][my]='B';
										ma[mx--][my]='_';
										Sleep(20);
										printmap();
										ma[mx][my+1]='B';
										ma[mx][my++]='_';
										Sleep(20);
									}else{
										ma[mx-1][my]='B';
										ma[mx--][my]='_';
										Sleep(20);
										printmap();
										ma[mx][my]='_';
										printmap();
										if(!crosspipe(mx,my+1,mx,my))break;
									}
								}
							}else{
								ma[mx][my]='_';
								printmap();
								if(!crosspipe(mx-1,my,mx,my))break;
							}
						}else if(l){
							if(to!=0)to=0;
							else if(ma[mx][my-1]=='_'||ma[mx][my-1]=='O'||ma[mx][my-1]=='M'||ma[mx][my-1]=='-'||ma[mx][my-1]=='\''||ma[mx][my-1]=='\"'){
								if(ma[mx][my-1]=='_'){
									ma[mx][my-1]='B';
									ma[mx][my]='_';
									if(!fall(mx,my-1))break;
								}else if(ma[mx][my-1]=='O')goice(mx,my-1,-1);
								else if(ma[mx][my-1]=='M')gom(mx,my-1,-1);	
								else{
									ma[mx][my]='_';
									printmap();
									if(!crosspipe(mx,my-1,mx,my))break;
								}
								fallice();
								fallfire();
								printmap();
								if(!fall(mx,my))break;
							}
						}else if(r){
							if(to!=1)to=1;
							else if(ma[mx][my+1]=='_'||ma[mx][my+1]=='O'||ma[mx][my+1]=='M'||ma[mx][my+1]=='-'||ma[mx][my+1]=='\\'||ma[mx][my+1]=='/'){
								if(ma[mx][my+1]=='_'){
									ma[mx][my+1]='B';
									ma[mx][my]='_';
									if(!fall(mx,my+1))break;
								}else if(ma[mx][my+1]=='O')goice(mx,my+1,1);
								else if(ma[mx][my+1]=='M')gom(mx,my+1,1);
								else{
									ma[mx][my]='_';
									printmap();
									if(!crosspipe(mx,my+1,mx,my))break;
								}
								fallice();
								fallfire();
								printmap();
								if(!fall(mx,my))break;
							}
						}else if(d&&(ma[mx+1][my]=='|'||ma[mx+1][my]=='/'||ma[mx+1][my]=='\'')){
							ma[mx][my]='_';
							printmap();
							if(!crosspipe(mx+1,my,mx,my))break;
						}else if(z||x){
							int pl=(!to?-1:+1);
							if(ma[mx+1][my+pl]=='_'||ma[mx+1][my+pl]=='O'||ma[mx+1][my+pl]=='<'||ma[mx+1][my+pl]=='='||ma[mx+1][my+pl]=='>'){
								if(ma[mx+1][my+pl]=='_'){
									if(emp)showbmp("data\\makeice_empty1.bmp",(my+pl-1)*width,(mx+2)*width);
									else showbmp(addbylvl("data\\makeice_1",bl),(my+pl-1)*width,(mx+2)*width);
									Sleep(10);
									if(emp)showbmp("data\\makeice_empty2.bmp",(my+pl-1)*width,(mx+2)*width);
									else showbmp(addbylvl("data\\makeice_2",bl),(my+pl-1)*width,(mx+2)*width);
									Sleep(10);
									if(emp)showbmp("data\\makeice_empty3.bmp",(my+pl-1)*width,(mx+2)*width);
									else showbmp(addbylvl("data\\makeice_3",bl),(my+pl-1)*width,(mx+2)*width);
									Sleep(10);
									ma[mx+1][my+pl]='O';
									if(ma[mx+1][my+pl-1]!='F'&&ma[mx+1][my+pl-1]!='f'&&ma[mx+1][my+pl-1]!='a'&&ma[mx+1][my+pl-1]!='_'){
										ma[mx+1][my+pl]=oleftlink(ma[mx+1][my+pl]);
										if(ma[mx+1][my+pl-1]!='@')ma[mx+1][my+pl-1]=orightlink(ma[mx+1][my+pl-1]);
									}
									if(ma[mx+1][my+pl+1]!='F'&&ma[mx+1][my+pl+1]!='f'&&ma[mx+1][my+pl+1]!='a'&&ma[mx+1][my+pl+1]!='_'){
										ma[mx+1][my+pl]=orightlink(ma[mx+1][my+pl]);
										if(ma[mx+1][my+pl+1]!='@')ma[mx+1][my+pl+1]=oleftlink(ma[mx+1][my+pl+1]);
									}
									if(ma[mx+2][my+pl]=='V'){
										ma[mx+1][my+pl]='_';
										boom(mx+1,my+pl);
										if(ma[mx+1][my+pl-1]!='@'&&ma[mx+1][my+pl-1]!='_'&&ma[mx+1][my+pl-1]!='F'&&ma[mx+1][my+pl-1]!='f'&&ma[mx+1][my+pl-1]!='a')
											ma[mx+1][my+pl-1]=rightlink(ma[mx+1][my+pl-1]);
										if(ma[mx+1][my+pl+1]!='@'&&ma[mx+1][my+pl+1]!='_'&&ma[mx+1][my+pl+1]!='F'&&ma[mx+1][my+pl+1]!='f'&&ma[mx+1][my+pl+1]!='a')
											ma[mx+1][my+pl+1]=leftlink(ma[mx+1][my+pl+1]);
									}
								}else{
									if(emp)showbmp("data\\makeice_empty3.bmp",(my+pl-1)*width,(mx+2)*width);
									else showbmp(addbylvl("data\\makeice_3",bl),(my+pl-1)*width,(mx+2)*width);
									Sleep(10);
									if(emp)showbmp("data\\makeice_empty2.bmp",(my+pl-1)*width,(mx+2)*width);
									else showbmp(addbylvl("data\\makeice_2",bl),(my+pl-1)*width,(mx+2)*width);
									Sleep(10);
									if(emp)showbmp("data\\makeice_empty1.bmp",(my+pl-1)*width,(mx+2)*width);
									else showbmp(addbylvl("data\\makeice_1",bl),(my+pl-1)*width,(mx+2)*width);
									Sleep(10);
									ma[mx+1][my+pl]='_';
									if(ma[mx+1][my+pl-1]!='@'&&ma[mx+1][my+pl-1]!='_'&&ma[mx+1][my+pl-1]!='F'&&ma[mx+1][my+pl-1]!='f'&&ma[mx+1][my+pl-1]!='a')
										ma[mx+1][my+pl-1]=rightlink(ma[mx+1][my+pl-1]);
									if(ma[mx+1][my+pl+1]!='@'&&ma[mx+1][my+pl+1]!='_'&&ma[mx+1][my+pl+1]!='F'&&ma[mx+1][my+pl+1]!='f'&&ma[mx+1][my+pl+1]!='a')
										ma[mx+1][my+pl+1]=leftlink(ma[mx+1][my+pl+1]);
									fallice();
									fallfire();
								}
							}
							if(!fall(mx,my))break;
							Sleep(30);
						}
					}
					TerminateThread(h,0);
					if(res)continue;
					Sleep(100);
					clear();
					system("cls");
					if(win==1){
						FILE *save=fopen("data\\save.txt","rb"),*lvl=fopen("data\\level.txt","rb");
						int pl,tot;
						fread(&pl,sizeof(int),1,save);
						printf("你赢了!\n\n");
						if(!(re%10)&&re!=150&&pl==re)printf("解锁第%d大关!\n\n",bl+1);
						else if(re==150){
							printf("通关!\n\n");
							CONGRATULATION();
						}
						fread(&tot,sizeof(int),1,lvl);
						fclose(save);
						fclose(lvl);
						if(re==pl){
							save=fopen("data\\save.txt","wb");
							pl++;
							fwrite(&pl,sizeof(int),1,save);
							fclose(save);
						}
						system("pause");
					}else if(!win){
						int ans=0;
						while(ans>2||ans<1){
							system("cls");
							rr();
							printmid("你输了!");
							printf("\n\n");
							printco('=',wdwd,false);
							printmid("重新开始吗?");
							printf("\n\n");
							const char *tmp[2]={"1:是","2:否"};
							printsmid(2,tmp);
							printco('=',wdwd,true);
							printf("\n请选择:");
							bool o,t;
							while(GAKS('1')||GAKS('2'));
							while(!(GetForegroundWindow()==hwnd&&((o=GAKS('1'))||(t=GAKS('2')))));
							if(o)ans=1;
							else if(t)ans=2;
						}
						if(ans==1)res=true;
						continue;
					}
				}
			}
		}else if(ans==2){
			int re=0;
			while(re<1||re>3){
				system("cls");
				rr();
				printco('=',wdwd,false);
				printmid("请选择:");
				printf("\n\n");
				const char *tmp[3]={"1:添加关卡","2:删除关卡","3:退出"};
				printsmid(3,tmp);
				printco('=',wdwd,false);
				printf("\n请选择:");
				bool o,t,h;
				while(GAKS('1')||GAKS('2')||GAKS('3'));
				while(!(GetForegroundWindow()==hwnd&&((o=GAKS('1'))||(t=GAKS('2'))||(h=GAKS('3')))));
				if(o)re=1;
				else if(t)re=2;
				else if(h)re=3;
			}
			if(re==1){
				keybd_event(VK_RETURN,0,0,0);
				keybd_event(VK_RETURN,0,KEYEVENTF_KEYUP,0);
				fflush(stdin);
				FILE *fin=NULL;
				bool die=false;
				int wr=0;
				while(!fin){
					system("cls");
					if(wr==2)warning("文件不存在\n");
					printf("输入back退出\n\n文件路径:");
					char c[101];
					scanf("%s",c);
					if(!strcmp(c,"back")){die=true;break;}
					fin=fopen(c,"rb");
					if(!fin)wr=min(wr+1,2);
					else wr=0;
				}
				if(!die){
					system("cls");
					printf("检查文件……");
					bool flag=true,be=false;
					char tmp[101];
					for(int k=1;k<=1;k++){
						int a,b;
						if(!~fscanf(fin,"%d%d",&a,&b)){flag=false;break;}
						if(a>100||b>100||a<1||b<1){flag=false;break;}
						for(int i=1;i<=a;i++){
							if(!~fscanf(fin,"%s",tmp+1)){flag=false;break;}
							if((signed)strlen(tmp+1)!=b){flag=false;break;}
							for(int j=1;j<=b;j++){
								if((i==1||i==a||j==1||j==b)&&tmp[j]!='@'){flag=false;break;}
								if(tmp[j]!='@'&&tmp[j]!='='&&tmp[j]!='>'&&tmp[j]!='<'&&tmp[j]!='O'&&tmp[j]!='B'&&tmp[j]!='F'&&tmp[j]!='_'&&tmp[j]!='f'&&tmp[j]!='|'&&tmp[j]!='L'&&tmp[j]!='D'
								&&tmp[j]!='-'&&tmp[j]!='\\'&&tmp[j]!='/'&&tmp[j]!='\''&&tmp[j]!='\"'&&tmp[j]!='x'&&tmp[j]!='V'&&tmp[j]!='a'&&tmp[j]!='M'&&tmp[j]!='R'){flag=false;break;}
								if(tmp[j]=='B')be=true;
							}
						}
					}
					if(!be)flag=false;
					if(!flag){
						printf("失败\n");
						system("pause");
					}else{
						printf("成功\n添加……");
						FILE *lvl=fopen("data\\level.txt","rb+");
						int co;
						fread(&co,sizeof(int),1,lvl);
						co++;
						fseek(lvl,0,SEEK_SET);
						fwrite(&co,sizeof(int),1,lvl);
						fseek(lvl,0,SEEK_END);
						fseek(fin,0,SEEK_SET);
						int a,b;
						fscanf(fin,"%d%d",&a,&b);
						int mem=12+a*b;
						fwrite(&mem,sizeof(int),1,lvl);
						fwrite(&a,sizeof(int),1,lvl);
						fwrite(&b,sizeof(int),1,lvl);
						for(int i=1;i<=a;i++){
							fscanf(fin,"%s",tmp);
							fwrite(&tmp,sizeof(char),b,lvl);
						}
						fwrite(&mem,sizeof(int),1,lvl);
						fclose(fin);
						fclose(lvl);
						printf("完成\n新关卡为:第%d关\n",co);
						system("pause");
					}
				}
			}else if(re==2){
				char buf[10016];
				re=choslvl();
				if(re!=-1){
					FILE *tmp=fopen("__tmp__tmp__tmp__.txt","wb"),*lvl=fopen("data\\level.txt","rb"),*save=fopen("data\\save.txt","rb");
					printf("删除……");
					int tot,pl;
					fread(&tot,sizeof(int),1,lvl);
					fread(&pl,sizeof(int),1,save);
					fclose(save);
					if(re<pl){
						pl--;
						save=fopen("data\\save.txt","wb");
						fwrite(&pl,sizeof(int),1,save);
						fclose(save);
					}
					tot--;
					fwrite(&tot,sizeof(int),1,tmp);
					for(int i=1;i<re;i++){
						int mem;
						fread(&mem,sizeof(int),1,lvl);
						fwrite(&mem,sizeof(int),1,tmp);
						fread(buf,sizeof(char),mem,lvl);
						fwrite(buf,sizeof(char),mem,tmp);
					}
					int mem;
					fread(&mem,sizeof(int),1,lvl);
					fseek(lvl,ftell(lvl)+mem,SEEK_SET);
					for(int i=re+1;i<=tot+1;i++){
						int mem;
						fread(&mem,sizeof(int),1,lvl);
						fwrite(&mem,sizeof(int),1,tmp);
						fread(buf,sizeof(char),mem,lvl);
						fwrite(buf,sizeof(char),mem,tmp);
					}
					fclose(lvl);
					fclose(tmp);
					system("DEL /a /f data\\level.txt");
					system("RENAME __tmp__tmp__tmp__.txt level.txt");
					system("MOVE level.txt data\\level.txt");
					printf("完成\n\n");
					system("pause");
				}
			}
		}else if(ans==3){
			int ans=3;
			while(ans<1||ans>2){
				system("cls");
				rr();
				printco('=',wdwd,false);
				printmid("你确定吗?(这将会删除你所有的关卡和存档)");
				printf("\n\n");
				const char *tmp[2]={"1:是","2:否"};
				printsmid(2,tmp);
				printco('=',wdwd,true);
				printf("\n请选择:");
				bool o,t;
				while(GAKS('1')||GAKS('2'));
				while(!(GetForegroundWindow()==hwnd&&((o=GAKS('1'))||(t=GAKS('2')))));
				if(o)ans=1;
				else if(t)ans=2;
			}
			if(ans==1){
				system("cls\nDEL /a /f data\\level.txt");
				FILE *lvl=fopen("data\\level.txt","wb");
				int o=0;
				fwrite(&o,sizeof(int),1,lvl);
				fclose(lvl);
				system("DEL /a /f data\\save.txt");
				FILE *save=fopen("data\\save.txt","wb");
				o=1;
				fwrite(&o,sizeof(int),1,save);
				fclose(save);
				printf("完成\n");
				system("pause"); 
			}
		}else if(ans==4){
			DeleteDC(hDC);
			return 0;
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值