📄 arrow.c
字号:
#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#define IMAGE_SIZE 10
void draw_image(int,int);
void load_picture(char*);
void help_message(void);
void putpoint(int x,int y,int color,int how);
int main(int argc,char *argv[])
{
int gdriver = DETECT,gmode,errorcode;
char *image;
int x,y,maxx,size;
if(argc == 1) help_message();
/*图形初始化*/
registerbgidriver(EGAVGA_driver);
initgraph(&gdriver,&gmode,"..\\bgi");
/*读取图形初始化的结果*/
errorcode = graphresult();
if(errorcode != grOk)/*如果发声错误*/
{
printf("graphics error:%s\n",grapherrormsg(errorcode));
printf("press any key to halt:");
getch();
exit(1); /*以错误代码返回*/
}
y = getmaxy()/2;
x = 0;
maxx = getmaxx();
load_picture(argv[1]);/*装入背景画面*/
draw_image(x,y);/*装入游戏子画面*/
/*计算游戏子画面所占内存空间大小*/
size = imagesize(x,y-IMAGE_SIZE,x+(4*IMAGE_SIZE),y+IMAGE_SIZE);
/*分配内存*/
if((image = (char*)malloc(size*sizeof(unsigned int))) == NULL)
{
printf("not enough memory\n");
exit(1);
}
/*保存游戏子画面*/
getimage(x,y-IMAGE_SIZE,x+(4*IMAGE_SIZE),y+IMAGE_SIZE,image);
while(!kbhit())/*检查当前可用的击键*/
{
putimage(x,y-IMAGE_SIZE,image,XOR_PUT);/*重放游戏子画面*/
x += IMAGE_SIZE;
if(x > maxx) x = 0;
putimage(x,y-IMAGE_SIZE,image,XOR_PUT);
}
free(image);/*释放游戏子画面内存空间*/
closegraph();
return 0;
}
void help_message(void)
{
printf("The correct way of running programm is:\n");
printf("image<filename>\n");
printf("filename is data filename of background_picture\n");
getch();
exit(1);
}
void load_picture(char *filename)
{
FILE *fp;
register int i,j;
char ch;
if((fp = fopen(filename,"rb")) == NULL)
{
printf("cannot open file\n");
exit(1);
}
/*从文件恢复屏幕图形*/
for(j = 0;j < 640;j++)
{
for(i = 0;i < 480;i++)
{
ch = getc(fp);
putpixel(j,i,ch);
}
}
fclose(fp);
}
void draw_image(int x,int y)
/*在屏幕上画一个弓箭*/
{
moveto(x,y);
linerel(4*IMAGE_SIZE,0);
linerel(-2*IMAGE_SIZE,-1*IMAGE_SIZE);
linerel(0,2*IMAGE_SIZE);
linerel(2*IMAGE_SIZE,-1*IMAGE_SIZE);
}
void putpoint(int x,int y,int color,int how)
{
union REGS r;
if(how == 0x18) color = color|128;
r.h.bh = 0;
r.h.ah = 12;
r.h.al = color;
r.x.dx = y;
r.x.cx = x;
int86(0x10,&r,&r);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -