📄 engine.cpp
字号:
#include <dos.h>
#include <alloc.h>
#include <conio.h>
#include <mem.h>
#include "engine.h"
BITMAP *screen;
int set_video_mode(int w,int h)
{
char mode;
if(w==320&&h==200)
mode=0x13;
else return 0;
union REGS inregs,outregs;
inregs.h.ah=0;
inregs.h.al=mode;
int86(0x10,&inregs,&outregs);
screen=(BITMAP *)malloc(sizeof(screen));
screen->type=VIDEO_MEM;
screen->w=w;
screen->h=h;
screen->buffer=(char far *)0xa0000000L;
return 1;
}
BITMAP *creat_bitmap(int w,int h)
{
BITMAP *temp;
temp=(BITMAP *)malloc(sizeof(temp));
if((temp->buffer=(char far *)farmalloc((long)w*(long)h+1))==NULL)
return(0);
temp->w=w;
temp->h=h;
temp->type=MEM;
return temp;
}
int blit(BITMAP *dest,BITMAP *source,int x1,int y1,int x2,int y2,int w,int h)
{
unsigned offset_d,offset_s;
int i;
if(x1>dest->w)return 0;
if(x1<0){w+=x1;x1=0;}
if(w<0)return 0;
if(x1+w>dest->w)w=dest->w-x1;
if(w<0)return 0;
if(y1<0){h+=y1;y1=0;}
if(h<0)return 0;
if(y1+h>dest->h)h=dest->h-y1;
if(h<0)return 0;
offset_d=x1+y1*dest->w;
offset_s=x2+y2*source->w;
for(i=0;i<h;i++)
{
_fmemcpy(dest->buffer+offset_d,source->buffer+offset_s,w);
offset_d+=dest->w;
offset_s+=source->w;
}
return 1;
}
int blit_mask(BITMAP *dest,BITMAP *source,int x1,int y1,int x2,int y2,int w,int h)
{
unsigned offset_d,offset_s;
int i,j;
char data;
if(x1>dest->w)return 0;
if(x1<0){w+=x1;x1=0;}
if(w<0)return 0;
if(x1+w>dest->w)w=dest->w-x1;
if(w<0)return 0;
if(y1<0){h+=y1;y1=0;}
if(h<0)return 0;
if(y1+h>dest->h)h=dest->h-y1;
if(h<0)return 0;
offset_d=x1+y1*dest->w;
offset_s=x2+y2*source->w;
for(i=0;i<h;i++)
{
for(j=0;j<w;j++)
if((data=source->buffer[offset_s+j]))
dest->buffer[offset_d+j]=data;
offset_d+=dest->w;
offset_s+=source->w;
}
return 1;
}
void del_bitmap(BITMAP *temp)
{
if(temp->buffer)farfree(temp->buffer);
if(temp)free(temp);
}
void wait_vsync(void)
{
while(inp(0x3da)&0x08);
while(!(inp(0x3da)&0x08));
}
void set_text_mode()
{
asm{
XOR AH,AH
MOV AL,3
MOV BL,8
INT 10H
}
}
void clean_bitmap(BITMAP *temp,int col)
{
_fmemset(temp->buffer,col,temp->w*temp->h);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -