⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arrow.c

📁 推荐刚刚开始学C语言的同志们看下
💻 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 + -