c语言怎么获得界面坐标,学会了C语言还是不知道图形界面是怎么做出来的,有没有人懂的,教一下,我自己做点小游戏也好做...

C语言具有汇编语言的功能,便于直接控制计算机显示器等系统硬件,又能完成复杂的处理和运算,因而适合于开发图形软件。目前使用的C语言提供了丰富的图形函数,利用这些库函数可以开发出各种实用的图形系统。

在字符界面下的图形软件必须运行在图形模式下,该模式下,屏幕是由像素阵列组成,每个像素在屏幕上显示一个点,左上角的位置为(0,0),X轴坐标值从左到右递增,Y轴坐标值从上到下增加。C语言的图形处理函数包含在库文件graphics.lib中,有关的函数说明和符号常量在头文件graphics.h中定义。C语言的图形函数可以分为七类,分别是图形系统控制函数,绘图及填充函数,屏幕管理函数,图形方式下的文本输出函数,颜色控制函数,错误处理函数,状态查询函数。C语言下实现的基本图形功能包含光标显示函数,图形复制函数,图形移动函数,图形清除函数。

1 初始化图形系统

在C语言下要进入图形系统,就要设置图形工作模式,将图形系统初始化,即将当前位置,调色板,颜色等复位为系统规定的缺省值。为此必须调用库函数initgraph(),它可以根据用户的要求或自动检测与之相关联的视频适配器,选择相应的驱动程序和设置图形工作模式。该函数的原型为:void far initgraph(int far*graphdriver,int far*graphmode,char far *pathtodriver),其中graphdriver是一个整形指针,用于指定要调入的图形驱动程序,参数graphmode也是一个整形指针,用来说明用户指定的图形显示方式,参数pathtodriver说明驱动程序的路径,下面就是一个图形初始化函数。

void initg(){

int driver,mode;

int back=1;

struct linesettingstype, saveline;

driver=DETECT;

initgraph(&driver, &mode, “\\bgi”);

getlinesettings(&saveline);

setlinestyle(0,1,1);

box(0,0,639,479,15);

setlinestyle(saveline.linestyle,saveline.upattern,saveline.thickness);

setviewport(1,1,6638,478,1);

setbkcolor(back);}

2 光标显示函数

void xhairs(int x, int y)

{ int i;

for(i=x-8;i<=x+8;i++)

putpixel(i, y ,getpixel(i,y) 12)

for(i=y+8;i>=y-8;i--)

putpixel(x, i ,getpixel(x,i) 12)

return;}

getpixel()函数从指定坐标位置取得原屏幕显示像素的颜色与整数12(淡红色)异或,以保证像素的可见性,成为putpixel()函数在同一位置显示像素的指定颜色。

3 图形复制函数

void copy(int startx, int starty, int endx, int endy, int x, int y)
  {int i,j;

int start1,start2 ,end1 ,end2;

char c;

start1=startx  endx1=startx>endx?startx:endx;

start2=starty  endy2=starty>endy?starty:endy;

for(;start1<=end1 ;start1++ ,x++)

for(i=start2 ,j=y ;i<=end2;i++ ,j++)

{c=getpixel(start1,i,0);

putpixel(x,j,c);

}}

该函数用于将屏幕上指定部分的图形复制到屏幕上的任意指定位置,由函数getpixel点取得指定区域的像素颜色C,作为putpixel的指定颜色在要复制的位置上逐点显示。

4 图形移动函数

void move(int startx, int starty, int endx, int endy, int x, int y)

{int i,j;

int start1,start2,end1 ,end2;

char c;

start1=startx  endx1=startx>endx?startx:endx;

start2=starty  endy2=starty>endy?starty:endy;

for(;start1<=end1;start1++ ,x++)

for(i=start2 ,j=y;i<=end2;i++,j++)

{c=getpixel(start1, i);

putpixel(start1,i,0);

putpixel(x,j,c);

}}

在copy函数中增加清除原图形区域语句,即增加putpixel(start1,i,0)语句,由于指定颜色为背景色(0-黑色),故消去原区域中的图形,完成了移动图形功能。

5 清除图形功能函数

void erase(int startx, int starty,int endx, int endy)

{int i,j;

int start1,start2,end1,end2;

start1=startx  endx1=startx>endx?startx:endx;

start2=starty  endy2=starty>endy?starty:endy;

for(;start1<=end1;start1++,x++)

for(i=start2,j=endy ;i<=end2;i++,j++)

{getpixel(start1, i,0);

putpixel(start1, i,0);

}}

将move函数中的putpixel(x,j,c)语句去掉,即可实现指定区域图形的清除功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值