Добавил:
Mymnan
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:КПиЯП. Курсовые / kurs / pacman / MapCreat
.CPP#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();
}
//=======================================================//