Добавил:
Fragga
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <conio.h>
#include <stdio.h>
#include <dos.h>
#include <io.h>
#include <fcntl.h>
#include <sys\stat.h>
char myname[]="test.map";
void loadscan(unsigned int x,unsigned int y)
{
int h;
int px,py;
char line[80];
h=open(myname,O_RDONLY|O_BINARY);
lseek(h,(long)y*1000+x,SEEK_SET);
for (py=0;py<25;py++)
{
read(h,line,80);
for (px=0;px<80;px++) if (line[px]) pokeb(0xb800,2*(py*80+px),'Ы');
else pokeb(0xb800,2*(py*80+px),' ');
lseek(h,1000-80,SEEK_CUR);
}
close(h);
}
void savescan(int x,int y)
{
int h;
int px,py;
char line[80];
char c;
h=open(myname,O_RDWR|O_BINARY);
lseek(h,(long)y*1000+x,SEEK_SET);
for (py=0;py<24;py++)
{
for (px=0;px<80;px++) {c=peekb(0xb800,2*(80*py+px));
if (c!=32) c=1;else c=0;
line[px]=c;}
write(h,line,80);
lseek(h,tell(h)+1000-80,SEEK_SET);
}
close(h);
}
void run()
{
int x=0,y=0;
int tx=40,ty=10;
int xp=1,yp;
char key;
char buf=32;
loadscan(x,y);
while (1) {
if (xp!=x||yp!=y) {
loadscan(x,y);
xp=x;
yp=y;
}
gotoxy(1,25);
printf("Coords (%4d;%4d)<%4d;%4d>[%4d;%4d]\r",x,y,x+tx,y+ty,x+79,y+24);
pokeb(0xb800,2*(ty*80+tx),'*');
key=getch();
pokeb(0xb800,2*(ty*80+tx),buf);
if (key==27) break;
if (key=='l') tx++;
if (key=='j') tx--;
if (key=='i') ty--;
if (key=='k') ty++;
if (key=='d') x++;
if (key=='a') x--;
if (key=='p') pokeb(0xb800,2*(ty*80+tx),'Ы');
if (key=='o') pokeb(0xb800,2*(ty*80+tx),' ');
if (key=='w') y--;
if (key=='s') y++;
if (key=='t') y-=10;
if (key=='g') y+=10;
if (key=='h') x+=10;
if (key=='f') x-=10;
if (key=='m') savescan(x,y);
if (x<0) x=0;
if (y<0) y=0;
buf=peekb(0xb800,2*(ty*80+tx));
}
}
void main()
{
clrscr();
run();
}