Скачиваний:
43
Добавлен:
15.09.2014
Размер:
14.53 Кб
Скачать
#include<iostream.h>
#include<fstream.h>
#include<conio.h>
#include<graphics.h>
#include<bios.h>
#include<stdlib.h>
#include<dir.h>
#include<string.h>


struct coord
{
 int x;
 int y;
 int xx;
 int yy;
};

struct star
{
 int x;
 int y;
 int size;
};

struct pacman
{
 int x;
 int y;
 int size;
 int eye;
};

struct enemy
{
 int x;
 int y;
 int size;
 int eye;
};

struct ExiT
{
 int x;
 int y;
 int r;
};

struct mas
{
 double x;
 double y;
 int val;
};

struct lock
{
 double x;
 double y;
 int size;
 int r;
};

struct all
{
 double coor;
 double stars;
 double enemies;
 int pacman;
 int exit;
 double mas;
 int lock;
}al;

void fnc();
char pacFile[15]="tmp.pac";
char starFile[15]="tmp.str";
char enemyFile[15]="tmp.ene";
char exitFile[15]="tmp.exi";
char masFile[15]="tmp.mas";
char lockFile[15]="tmp.loc";

int  mass[20][28];
void gameField(char*);
void crtFile(char*);
void clearFile(char*);

int main()
{
 int gdriver=DETECT,gmode;
 initgraph(&gdriver,&gmode,"");

 al.pacman=1;
 al.exit=1;
 al.lock=1;


 mkdir("MAP_EDITOR");
 system("cd MAP_EDITOR");

 char file[15]="tmp.map";

 crtFile(file);
 gameField(file);


int true=1,key;
//GLOBAL KEYS
int xGlob=55,yGlob=80,xxGlob=75,yyGlob=100;
	setcolor(14);
	rectangle(xGlob,yGlob,xxGlob,yyGlob);

 coord cr;
 star str;
 enemy ene;
 pacman pac;
 ExiT extt;
 mas ms;
 lock lo;



 while(true){
  key=bioskey(0);
	switch(key){
	 case 20992://Insert
				ofstream doc(file,ios::app);

				cr.x=xGlob;cr.xx=cr.x+20;
				cr.y=yGlob;cr.yy=cr.y+20;

				doc.write((char*)&cr,sizeof(coord));
				doc.close();

				int xIns,yIns;
				xIns=cr.x/20-1;
				yIns=cr.y/20-3;
				mass[yIns][xIns]=1;

				gameField(file);
				setcolor(14);rectangle(xGlob,yGlob,xxGlob,yyGlob);

				break;

	 case 18176://Home
				ofstream stars(starFile,ios::app);

				str.x=xGlob;
				str.y=yGlob;str.y+=20;
				str.size=9;

				stars.write((char*)&str,sizeof(star));
				stars.close();
				gameField(file);

				int xHome,yHome;
				xHome=str.x/20-1;
				yHome=str.y/20-4;
				mass[yHome][xHome]=2;
				setcolor(14);rectangle(xGlob,yGlob,xxGlob,yyGlob);

				break;

	 case 18688://PgUp
				int xPgUp,yPgUp;

				ifstream pman(pacFile);
				pman.read((char*)&pac,sizeof(pacman));
				xPgUp=pac.x;yPgUp=pac.y;
				mass[yPgUp/20-3][xPgUp/20-2]=0;
				pman.close();

				ofstream pcman(pacFile);

				pac.x=xGlob;pac.x+=10;
				pac.y=yGlob;pac.y+=10;
				pac.size=9;
				pac.eye=2;

				pcman.write((char*)&pac,sizeof(pacman));
				pcman.close();
				gameField(file);
				setcolor(14);rectangle(xGlob,yGlob,xxGlob,yyGlob);

				xPgUp=pac.x/20-2;
				yPgUp=pac.y/20-3;
				mass[yPgUp][xPgUp]=3;


				break;

	 case 20736://PgDown
				ofstream enefile(enemyFile,ios::app);

				ene.x=xGlob;ene.x+=10;
				ene.y=yGlob;ene.y+=10;
				ene.size=9;
				ene.eye=2;

				enefile.write((char*)&ene,sizeof(enemy));
				enefile.close();
				gameField(file);

				int xEne,yEne;
				xEne=ene.x/20-2;
				yEne=ene.y/20-3;
				mass[yEne][xEne]=4;
				setcolor(14);rectangle(xGlob,yGlob,xxGlob,yyGlob);

				break;

	 case 20224://End
				int xEnd,yEnd;

				ifstream exii(exitFile);
				exii.read((char*)&extt,sizeof(ExiT));
				xEnd=extt.x;yEnd=extt.y;
				mass[yEnd/20-3][xEnd/20-2]=0;
				exii.close();

				ofstream exi(exitFile);

				extt.x=xGlob;extt.x+=10;
				extt.y=yGlob;extt.y+=10;
				extt.r=9;

				exi.write((char*)&extt,sizeof(ExiT));
				exi.close();
				gameField(file);
				setcolor(14);rectangle(xGlob,yGlob,xxGlob,yyGlob);


				xEnd=extt.x/20-2;
				yEnd=extt.y/20-3;
				mass[yEne][xEne]=5;

				break;

	 case 21248://Del
				int xDel,yDel;

				ifstream zamok(lockFile);
				zamok.read((char*)&lo,sizeof(lock));
				xDel=lo.x;yDel=lo.y;
				mass[yDel/20-3][xDel/20-2]=0;
				zamok.close();

				ofstream zamok2(lockFile);

				lo.x=xGlob;lo.x+=10;
				lo.y=yGlob;lo.y+=10;

				zamok2.write((char*)&lo,sizeof(lock));
				zamok2.close();

				gameField(file);
				setcolor(14);rectangle(xGlob,yGlob,xxGlob,yyGlob);

				xDel=lo.x/20-2;
				yDel=lo.y/20-3;
				mass[yDel][xDel]=6;

				break;

	 case 19200://LEFTARROW
				xGlob-=20;xxGlob-=20;
				xGlob=xGlob>=55?xGlob:55;
				xxGlob=xxGlob>=75?xxGlob:75;
				gameField(file);
				setcolor(14);
				rectangle(xGlob,yGlob,xxGlob,yyGlob);
				break;

	 case 19712://RIGHTARROW
				xGlob+=20;xxGlob+=20;
				xGlob=xGlob<=555?xGlob:555;
				xxGlob=xxGlob<=575?xxGlob:575;
				gameField(file);
				setcolor(14);
				rectangle(xGlob,yGlob,xxGlob,yyGlob);
				break;

	 case 18432://UPARROW
				yGlob-=20;yyGlob-=20;
				yGlob=yGlob>=80?yGlob:80;
				yyGlob=yyGlob>=100?yyGlob:100;
				gameField(file);
				setcolor(14);
				rectangle(xGlob,yGlob,xxGlob,yyGlob);
				break;

	 case 20480://DOWNARROW
				yGlob+=20;yyGlob+=20;
				yGlob=yGlob<=420?yGlob:420;
				yyGlob=yyGlob<=440?yyGlob:440;
				gameField(file);
				setcolor(14);
				rectangle(xGlob,yGlob,xxGlob,yyGlob);
				break;


	 case 4209:case 4177://q,Q
				clearFile(file);
				gameField(file);
				setcolor(14);rectangle(xGlob,yGlob,xxGlob,yyGlob);
				break;

	 case 283://Esc
				int i=0,j=0;
				 ofstream prosto("tmp_mtrx.txt");
				  for(;i<20;i++){
					for(j=0;j<28;j++){
					 prosto<<mass[i][j]<<" ";
					}
					prosto<<"\n";
					j=0;
				  }
				 prosto.close();

				 al.mas=0;
				 ofstream toMasFile(masFile);
				  for(i=0;i<20;i++){
					for(j=0;j<28;j++){
					 ms.y=i;ms.x=j;ms.val=mass[i][j];
					 toMasFile.write((char*)&ms,sizeof(mas));
					 al.mas++;
					}
					j=0;
				  }
				 toMasFile.close();

//CREATING MAINFILE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

				 ofstream levelFile("outFile.lvl");
				 //
				   levelFile.write((char*)&al,sizeof(all));
				 //
				   ifstream zam(lockFile);
				   zam.read((char*)&lo,sizeof(lock));
					while(!zam.eof()){
					 levelFile.write((char*)&lo,sizeof(lock));
					 zam.read((char*)&lo,sizeof(lock));
					}
				   zam.close();
				 //
				   ifstream coo(file);
				   coo.read((char*)&cr,sizeof(coord));
					while(!coo.eof()){
					 levelFile.write((char*)&cr,sizeof(coord));
					 coo.read((char*)&cr,sizeof(coord));
					}
					coo.read((char*)&cr,sizeof(coord));
				   coo.close();
				 //
				   ifstream st(starFile);
				   st.read((char*)&str,sizeof(star));
					while(!st.eof()){
					 levelFile.write((char*)&str,sizeof(star));
					 st.read((char*)&str,sizeof(star));
					}
				   st.close();
				 //
				   ifstream e(enemyFile);
				   e.read((char*)&ene,sizeof(enemy));
					while(!e.eof()){
					 levelFile.write((char*)&ene,sizeof(enemy));
					 e.read((char*)&ene,sizeof(enemy));
					}
				   e.close();
				 //
				   ifstream pc(pacFile);
				   pc.read((char*)&pac,sizeof(pacman));
					while(!pc.eof()){
					 levelFile.write((char*)&pac,sizeof(pacman));
					 pc.read((char*)&pac,sizeof(pacman));
					}
				   pc.close();
				 //
				   ifstream ex(exitFile);
				   ex.read((char*)&extt,sizeof(ExiT));
					while(!ex.eof()){
					 levelFile.write((char*)&extt,sizeof(ExiT));
					 ex.read((char*)&extt,sizeof(ExiT));
					}
				   ex.close();
				 //
				   ifstream matr(masFile);
				   matr.read((char*)&ms,sizeof(mas));
					while(!matr.eof()){
					 levelFile.write((char*)&ms,sizeof(mas));
					 matr.read((char*)&ms,sizeof(mas));
					}
				   matr.close();


				 levelFile.close();

				true=0;
				break;
	}
 }

 cleardevice();
 closegraph();
 return 0;
}

void gameField(char *file)
{

  cleardevice();
   char cX[5],cY[5];

	setcolor(3);
	settextstyle(1,VERT_DIR,3);
	outtextxy(0,150,"MAP EDITOR V 1.0");

	setcolor(8);
	rectangle(25,50,606,470);
	rectangle(30,55,601,465);
	setfillstyle(SOLID_FILL,7);
	floodfill(26,52,8);

	setcolor(14);
	settextstyle(2,HORIZ_DIR,4);

	int x=55,y=80;
	for(;x<=575;x+=20){
	  itoa(x,cX,10);
	  outtextxy(x-7,y-20,cX);
	}

	for(;y<=440;y+=20){
	  itoa(y,cY,10);
	  outtextxy(x-15,y-7,cY);
	}


	setcolor(RED);
	x=55;y=80;

	for(;y<=420;y+=20){
		for(;x<=555;x+=20){
		  rectangle(x,y,x+20,y+20);
		}
		x=55;
	}


	gotoxy(20,1);cout<<"	  INS-brick<>HOME-star";
	gotoxy(20,2);cout<<"     PGUP-place Pac<>PGDWN-enemy";
	gotoxy(20,3);cout<<" Q-clear<>END-place EXIT<>DEL-zamok";

//======================  READING BRICS =======================//
  coord cr;
  setcolor(8);
  setfillstyle(1,7);
  rectangle(1,1,3,3);

	ifstream f(file);
	 f.read((char*)&cr,sizeof(coord));
	 al.coor=0;
	  while(!f.eof()){
		rectangle(cr.x,cr.y,cr.xx,cr.yy);
		floodfill(cr.x+1,cr.y+1,8);
		f.read((char*)&cr,sizeof(coord));
		al.coor++;
	  }

	 f.close();
//====================== READING STARS ========================//
 star str;
 int xS,yS,starSize;

 ifstream zvezda(starFile);
 zvezda.read((char*)&str,sizeof(star));
 al.stars=0;
  while(!zvezda.eof()){
	 xS=str.x; yS=str.y; starSize=str.size;
	 starSize-=1;
	 xS+=1;
	 yS-=1;
	 setcolor(WHITE);
	 ellipse(xS,yS,0,90,starSize,starSize);
	 ellipse(xS,yS-starSize*2,270,0,starSize,starSize);
	 ellipse(xS+starSize*2,yS,90,180,starSize,starSize);
	 ellipse(xS+starSize*2,yS-starSize*2,180,270,starSize,starSize);
	 setfillstyle(SOLID_FILL,MAGENTA);
	 floodfill(xS+starSize,yS-starSize,WHITE);
   zvezda.read((char*)&str,sizeof(star));
   al.stars++;
  }
 zvezda.close();

//====================== READING PACMAN =======================//
 int xP,yP,pacmanSize,eye;

 pacman pac;
 ifstream pcman(pacFile);
 pcman.read((char*)&pac,sizeof(pacman));

  xP=pac.x;yP=pac.y;pacmanSize=pac.size;eye=pac.eye;
  mass[yP/20-3][xP/20-2]=3;

	 setcolor(14);
	 circle(xP,yP,pacmanSize);
	 circle(xP-1,yP-5,eye);
	 setfillstyle(SOLID_FILL,14);
	 floodfill(xP+1,yP,14);
	 setcolor(BLACK);
	 line(xP-pacmanSize,yP,xP,yP);

//====================== READING ENEMY =======================//
 enemy ene;
 int xE,yE,enemySize,Eeye;

  ifstream enefile(enemyFile);
  enefile.read((char*)&ene,sizeof(enemy));
  al.enemies=0;
   while(!enefile.eof()){
	 xE=ene.x;yE=ene.y;enemySize=ene.size;Eeye=ene.eye;

	 enemySize-=1;

	 setcolor(9);
	 ellipse(xE,yE,0,180,enemySize,enemySize);
	 circle(xE-2,yE-4,Eeye);
	 circle(xE+2,yE-4,Eeye);
	 line(xE-9,yE,xE,yE+9);
	 line(xE+9,yE,xE,yE+9);
	 line(xE-3,yE+3,xE+3,yE+3);
	 setfillstyle(1,1);
	 floodfill(xE,yE,9);
	enefile.read((char*)&ene,sizeof(enemy));
	al.enemies++;
   }


//====================== READING LOCK =======================//
 lock lo;
 int xLoc,yLoc,lockSize,rLoc;

	ifstream zamok(lockFile);
	zamok.read((char*)&lo,sizeof(lock));
	xLoc=lo.x;yLoc=lo.y;lockSize=lo.size;rLoc=lo.r;
	mass[yLoc/20-3][xLoc/20-2]=6;

	setcolor(6);
	 setfillstyle(1,1);
	 ellipse(xLoc,yLoc,180,0,lockSize,lockSize);
	 line(xLoc-lockSize,yLoc,xLoc+lockSize,yLoc);
	 circle(xLoc,yLoc+4,rLoc);
	 floodfill(xLoc,yLoc+1,6);
	 ellipse(xLoc,yLoc,0,180,lockSize-4,lockSize-4);
	 ellipse(xLoc,yLoc,0,180,lockSize-1,lockSize-1);

//====================== READING EXIT =======================//
 ExiT ex;
 int xX,yX,rX;

   ifstream ext(exitFile);
   ext.read((char*)&ex,sizeof(ExiT));
   xX=ex.x;yX=ex.y; rX=ex.r;
   mass[yX/20-3][xX/20-2]=5;
	 setcolor(2);
	 circle(xX,yX,rX);
	 settextstyle(1,HORIZ_DIR,1);
	 outtextxy(xX-5,yX-12,"E");

//====================== DELETE TRACKS =======================//
 int xD=0,yD=3,rD=20;
 setcolor(BLACK);
 circle(xD,yD,rD);
 setfillstyle(1,BLACK);
 floodfill(xD,yD,BLACK);
}

//=======================================================//

void crtFile(char *file)
{

//
 coord blank={1,1,3,3};
	ofstream newf(file,ios::noreplace);
	newf.write((char*)&blank,sizeof(coord));
	newf.close();
//
 star str={0,0,9};
	ofstream zvezda(starFile,ios::noreplace);
	zvezda.write((char*)&str,sizeof(star));
	zvezda.close();
//
 enemy ene={0,0,9,2};
	ofstream vrag(enemyFile,ios::noreplace);
	vrag.write((char*)&ene,sizeof(enemy));
	vrag.close();
//
 pacman pac={285,270,9,2};
	ofstream pcman(pacFile,ios::noreplace);
	pcman.write((char*)&pac,sizeof(pacman));
	pcman.close();
//
 ExiT exi={65,430,9};
	ofstream ext(exitFile,ios::noreplace);
	ext.write((char*)&exi,sizeof(ExiT));
	ext.close();
//
 lock lo={65,410,9,2};
	ofstream loc(lockFile,ios::noreplace);
	loc.write((char*)&lo,sizeof(lock));
	loc.close();

//OK creating file
 mas ms;
 int i1,i2;
	ofstream massiv(masFile,ios::noreplace);

	 for(i1=0;i1<20;i1++){
	   for(i2=0;i2<28;i2++){
		 ms.y=i1;
		 ms.x=i2;
		 if(i1==0||i1==19) ms.val=1;
		  else if(i2==0||i2==27) ms.val=1;
		   else ms.val=0;
		 massiv.write((char*)&ms,sizeof(mas));

	   }
	   i2=0;
	 }
	massiv.close();

//reading to massiv
 mas ms2;
  ifstream read(masFile);
   read.read((char*)&ms2,sizeof(mas));
   al.mas=0;
   while(!read.eof()){
	 mass[ms2.y][ms2.x]=ms2.val;
	 read.read((char*)&ms2,sizeof(mas));
	 al.mas++;
   }
  read.close();

}

//=======================================================//

void clearFile(char *file)
{

//
 coord blank={1,1,3,3};
 ofstream newf(file);
 newf.write((char*)&blank,sizeof(coord));
 newf.close();

//
 star str={1,1,9};
	ofstream zvezda(starFile);
	zvezda.write((char*)&str,sizeof(star));
	zvezda.close();
//
 enemy ene={1,1,9};
	ofstream vrag(enemyFile);
	vrag.write((char*)&ene,sizeof(enemy));
	vrag.close();
//
 pacman pac={285,270,9,2};
	ofstream pcman(pacFile);
	pcman.write((char*)&pac,sizeof(pacman));
	pcman.close();
//
 ExiT exi={65,430,9};
	ofstream ext(exitFile);
	ext.write((char*)&exi,sizeof(ExiT));
	ext.close();
//
 lock lo={65,410,9,2};
	ofstream loc(lockFile);
	loc.write((char*)&lo,sizeof(lock));
	loc.close();

//
 mas ms;
 int i1,i2;
	ofstream massiv(masFile,ios::out);

	 for(i1=0;i1<20;i1++){
	   for(i2=0;i2<28;i2++){
		 ms.y=i1;
		 ms.x=i2;
		 if(i1==0||i1==19) ms.val=1;
		  else if(i2==0||i2==27) ms.val=1;
		   else ms.val=0;
		 massiv.write((char*)&ms,sizeof(mas));

	   }
	   i2=0;
	 }
	massiv.close();
//reading to massiv
 mas ms2;
  ifstream read(masFile);
   read.read((char*)&ms2,sizeof(mas));
   while(!read.eof()){
	 mass[ms2.y][ms2.x]=ms2.val;
	 read.read((char*)&ms2,sizeof(mas));
   }
  read.close();

}
//=======================================================//
Соседние файлы в папке pacman