turbo c下的一点小破图...
时间:2010-08-07 来源:gracefulphoenix
闲着无聊,看了一下graphics.h,找了点资料,然后用C语言画了几个小图形,觉得很新奇。发过来玩玩。
画点简单的图形还是挺简单的。比如说来个直线,只要找到graphics.h中的函数line就行了。查一下line()的用法。
line() 画线函数
功能: 函数line()使用当前绘图色、线型及线宽,在给定的两点间画一直线。
用法: 该函数调用方式为void line(int startx,int starty,int endx,int endy);
说明: 参数startx,starty为起点坐标,endx,endy为终点坐标,函数调用前后,图形状态下屏幕光标(一般不可见)当前位置不改变。
house.c//一个小屋子,可惜就是无法截图,感兴趣的自己去编译一下吧。
#include <graphics.h> #include <conio.h> void initgr(void) { int gd=DETECT,gm=0; registerbgidriver(EGAVGA_driver); initgraph(&gd,&gm,""); } void drawmat(char *mat,int matsize,int x,int y,int color) /*依次:字模指针、点阵大小、起始坐标(x,y)、颜色*/ { int i, j, k, n; n = (matsize - 1) / 8 + 1; for(j = 0; j < matsize; j++) for(i = 0; i < n; i++) for(k = 0;k < 8; k++) if(mat[j * n + i] & (0x80 >> k)) /*测试为1的位则显示*/ putpixel(x + i * 8 + k, y + j, color); } char yang16S[]={ /* 以下是 '阳' 的 16点阵宋体 字模,32 byte */ 0x00,0x00,0x7D,0xFC,0x45,0x04,0x49,0x04, 0x49,0x04,0x51,0x04,0x49,0xFC,0x45,0x04, 0x45,0x04,0x45,0x04,0x69,0x04,0x51,0x04, 0x41,0xFC,0x41,0x04,0x40,0x00,0x40,0x00, }; char guang16S[]={ /* 以下是 '光' 的 16点阵宋体 字模,32 byte */ 0x01,0x00,0x21,0x10,0x19,0x18,0x0D,0x10, 0x09,0x20,0x01,0x04,0x7F,0xFE,0x04,0x40, 0x04,0x40,0x04,0x40,0x04,0x40,0x08,0x42, 0x08,0x42,0x10,0x42,0x20,0x3E,0x40,0x00, }; char de16S[]={ /* 以下是 '的' 的 16点阵宋体 字模,32 byte */ 0x10,0x80,0x10,0x80,0x20,0x80,0x7C,0xFC, 0x45,0x04,0x45,0x04,0x46,0x04,0x7C,0x84, 0x44,0x44,0x44,0x64,0x44,0x24,0x44,0x04, 0x7C,0x04,0x44,0x28,0x40,0x10,0x00,0x00, }; char xiao16S[]={ /* 以下是 '小' 的 16点阵宋体 字模,32 byte */ 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00, 0x09,0x40,0x0D,0x20,0x19,0x10,0x11,0x18, 0x21,0x0C,0x41,0x06,0x81,0x04,0x01,0x00, 0x01,0x00,0x01,0x00,0x05,0x00,0x02,0x00, }; char wu16L[]={ /* 以下是 '屋' 的 16点阵隶书 字模,32 byte */ 0x00,0x00,0x3F,0xFC,0x20,0x04,0x3F,0xFC, 0x20,0x00,0x3F,0xFC,0x22,0x20,0x24,0x10, 0x2F,0xF8,0x20,0x90,0x20,0x80,0x3F,0xFC, 0x40,0x80,0x40,0x80,0xBF,0xFE,0x00,0x00, }; void main(void) { initgr(); setcolor(2); drawmat(yang16S, 16, 100, 125, YELLOW); drawmat(guang16S, 16, 115, 125, YELLOW); drawmat(de16S, 16, 130, 125, WHITE); drawmat(xiao16S, 16, 145, 125, WHITE); drawmat(wu16L, 16, 160, 123, RED); line(300,100,200,150); line(300,100,400,150); line(200,150,200,300); line(400,150,400,300); line(200,300,400,300); rectangle(230,200,280,250); rectangle(320,200,380,300); getch(); closegraph(); }
moresixleaf.c//起个名叫万花齐放吧。在晚上找到一个六叶草的代码,然后改了一下。添加了随机函数。
#include <graphics.h> #include <math.h> #include <conio.h> #define PI 3.1415926535 /* 图形驱动函数 */ void initgr(void) { int gd = DETECT, gm = 0; registerbgidriver(EGAVGA_driver); initgraph(&gd, &gm, ""); } void main(void) { double a = 0,b,j; int x0 ,y0,radius,i,x,y; initgr(); /* 驱动图形模式 */ for(j=0;j<10;j++) { x0=rand()%700; y0=rand()%400; radius=rand()%200; setcolor(rand()%7); /* 设置前景色为绿色 */ setlinestyle(0,0,0); /* 设置股线的类型与宽度 */ for(i=0;i<6;i++,a+=60) { b=a*PI/180; /* 把度数转化为弧度 */ x=x0+radius*cos(b); y=y0+radius*sin(b); arc(x,y,120-i*60,240-i*60,radius); /* 绘制弧线 */ } } getch(); /* 暂停屏幕查看结果 */ closegraph(); /* 关闭图形模式 */ }
有啥不足的,多多指教。