📄 mouse5.c
字号:
/* WIN-TC BGI 图形编程模板 */
/*
BLACK 0 黑色 DARKGRAY 8 深灰
BLUE 1 兰色 LIGHTBLUE 9 深兰
GREEN 2 绿色 LIGHTGREEN 10 淡绿
CYAN 3 青色 LIGHTCYAN 11 淡青
RED 4 红色 LIGHTRED 12 淡红
MAGENTA 5 洋红 LIGHTMAGENTA 13 淡洋红
BROWN 6 棕色 YELLOW 14 黄色
LIGHTGRAY 7 淡灰 WHITE 15 白色
setlinestyle(int linestyle,unsigned upattern,int thickness);设置线格式(线形状 0 线宽)
upattern参数只有在USERBIT_LINE模式下有用
linestyle 类型
SOLID_LINE 0 实线
DOTTED_LINE 1 点线
CENTER_LINE 2 中心线
DASHED_LINE 3 点画线
USERBIT_LINE 4 用户定义线
thickness 类型
NORM_WIDTH 1 一点宽
THIC_WIDTH 3 三点宽
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
setfillstyle(int pattern, int color); /设置填充方式/
填充式样pattern
EMPTY_FILL 0 以背景颜色填充
SOLID_FILL 1 以实填充
LINE_FILL 2 以直线填充
LTSLASH_FILL 3 以斜线填充(阴影线)
SLASH_FILL 4 以粗斜线填充(粗阴影线)
BKSLASH_FILL 5 以粗反斜线填充(粗阴影线)
LTBKSLASH_FILL 6 以反斜线填充(阴影线)
HATCH_FILL 7 以直方网格填充
XHATCH_FILL 8 以斜网格填充
INTTERLEAVE_FILL 9 以间隔点填充
WIDE_DOT_FILL 10 以稀疏点填充
CLOSE_DOS_FILL 11 以密集点填充
USER_FILL 12 以用户定义式样填充
line(int x,int y,int x+dx,int y+dy); /直线/
circle(int x,int y,int radius); /圆/
arc(int x,int y,int stangle,int endangle,int radius); /圆弧/
ellipse(int x,int y,int stangle,int endangle,int xradius,int yradius); /椭圆弧线/
rectangle(int x1, int y1, int x2, inty2); /矩形/
drawpoly(int numpoints, int far *polypoints); /顶点数 坐标数组/
*/
#include "Conio.h"
#include "graphics.h"m
#include "dos.h"
#define MX 16
#define MY 16
#define BACKCOLOR BLACK
#define LINECOLOR BLUE
#define MOUSECOLOR RED
int num[MY][MX]={0};
int mousenum[MY][MX]={0};
int x=0,y=0,x1=0,y1=0;
long mouse[MY]={
0x8000,0x43e0,0x242c,0x7802,
0x2001,0x1001,0x0802,0x1002,
0x2001,0x4001,0x2002,0x1004,
0x0804,0x0408,0x03e0,0x0080,
};
void initgr()
{ /* BGI初始化 */
int gd,gm; /* 和gd = VGA,gm = VGAHI是同样效果 */
detectgraph(&gd,&gm); /*返回系统图形驱动模式*/
registerbgidriver(EGAVGA_driver); /*注册BGI驱动 可以不用BGI文件*/
initgraph(&gd,&gm,"");
}
void get_num()
{
int i,j,n;
for(i=0;i<MY;i++)
for(j=0;j<MX;j++)
if(mousenum[i][j]==1)num[i][j]=getpixel(x+j,y+i);
}
void put_num()
{
int i,j,n;
for( i=0;i<MY;i++)
for(j=0;j<MX;j++)
if(mousenum[i][j]==1)putpixel(x1+j,y1+i,num[i][j]);
}
void make_num()
{
int i,j;
for(i=0;i<MY;i++)
for(j=MX-1;j>=0;j--)
{
mousenum[i][j]=mouse[i]%2;
mouse[i]/=2;
}
}
void put_mouse()
{
int i,j;
for(i=0;i<MY;i++)
for(j=0;j<MX;j++)
if(mousenum[i][j]==1) putpixel(x+j,y+i,MOUSECOLOR);
}
void off_mouse()
{
int i,j;
for(i=0;i<MY;i++)
for(j=0;j<MX;j++)
if(mousenum[i][j]==1) putpixel(x1+j,y1+i,BACKCOLOR);
}
/*0x33是DOS中断,是在DOS下通过调用中断来对鼠标进行操作.*/
void mousereset()
{
_AX=0x00;
geninterrupt(0x33);
}
/*获取鼠标当前位置*/
void mousegetxy()
{
_AX=0x03;
geninterrupt(0x33);
x=_CX;
y=_DX;
}
int ifmove()
{
if(x==x1&&y==y1) return 0;
else return 1;
}
void mousesetx(int lx,int rx)
{
_CX=lx;
_DX=rx;
_AX=0x07;
geninterrupt(0x33);
}
/*设置鼠标上下边界
uy:上边界
dy:下边界 */
void mousesety(int uy,int dy)
{
_CX=uy;
_DX=dy;
_AX=0x08;
geninterrupt(0x33);
}
void make_line()
{
line(x1,y1,x,y);
}
/*返回值: 1=按下 0=释放*/
int leftpress()
{
_AX=0x03;
geninterrupt(0x33);
return(_BX&1);
}
main()
{
int i,j;
initgr(); /*BGI初始化*/
/*加入代码*/
setbkcolor(BACKCOLOR);
setcolor(LINECOLOR);
mousereset();
mousesetx(0,getmaxx());
mousesety(0,getmaxy());
mousegetxy();
x1=x;y1=y;
get_num();
make_num();
put_mouse();
while(!kbhit())
{
mousegetxy();
if(ifmove())
{
off_mouse();
put_num();
if(leftpress()) make_line();
get_num();
put_mouse();
x1=x;
y1=y;
}
}
closegraph();
/*恢复TEXT屏幕模式*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -