int print_board(void) { int i=0; int j=0; memset((u32_t *)fb_v.memo,0,fb_v.w*fb_v.h*fb_v.bpp/8); memset(chess_board,0,B_X*B_Y); //清屏 current_player=1; current_color=BLACK; for (j=10; j<ST_Y+(SPACE*B_Y); j++) //打印棋盘并着色 { for (i=20; i<ST_X+(SPACE*B_X); i++) { fb_one_pixel(i,j,YELLOW); } } for (i=0; i<B_Y; i++) //给格上色 { fb_line(ST_X,ST_Y+i*SPACE,ST_X+(B_X-1)*SPACE,ST_Y+i*SPACE,BLACK); } for (i=0; i<B_X; i++) { fb_line(ST_X+i*SPACE,ST_Y,ST_X+i*SPACE,ST_Y+(B_Y-1)*SPACE,BLACK); } fb_circle(60,100,18,BLACK); fb_circle(60,200,18,WHITE); return 0; }
int fb_circle(int x0, int y0, int r, u32_t color) // hua yuan { int x = 0; int y = r; int p = 3-2*r; while(x <= y) { #if 0 fb_one_pixel(x0+x, y0+y, color); //hua kong xin huan fb_one_pixel(x0+y, y0+x, color); fb_one_pixel(x0+x, y0-y, color); fb_one_pixel(x0+y, y0-x, color); fb_one_pixel(x0-x, y0+y, color); fb_one_pixel(x0-y, y0+x, color); fb_one_pixel(x0-x, y0-y, color); fb_one_pixel(x0-y, y0-x, color); fb_line(x0, y0,x0+x,y0+y, color); //bu wan zheng de shi xin huan fb_line(x0, y0,x0+y,y0+x, color); fb_line(x0, y0,x0+x,y0-y, color); fb_line(x0, y0,x0+y,y0-x, color); fb_line(x0, y0,x0-x,y0+y, color); fb_line(x0, y0,x0-y,y0+x, color); fb_line(x0, y0,x0-x,y0-y, color); fb_line(x0, y0,x0-y,y0-x, color); #endif fb_line(x0+x, y0+y, x0-x, y0+y, color); // shi xin yuan fb_line(x0+y, y0+x, x0-y, y0+x, color); fb_line(x0+y, y0-x, x0-y, y0-x, color); fb_line(x0+x, y0-y, x0-x, y0-y, color); if(p < 0) { p += 4*x+6; } else { p += 4*(x-y) + 10; y--; } x++; } return 0; }
int restore_shape(int x,int y) { int i = 0; int j = 0; for(i=0;i<C_HEIGHT;i++) { for(j=0; j<C_WIDTH;j++) fb_one_pixel(x+j,y+i,shape_save[j+i*C_WIDTH]); } return 0; }
int restore_bg(int x, int y) { int i = 0; int j = 0; for(j=0; j<C_H; j++) { for(i=0; i<C_W; i++) { fb_one_pixel(x+i,y+j,bg[i+j*C_W]); } } return 0; }
int draw_cursor(int x, int y) { int i = 0; int j = 0; save_bg(x, y); for(j=0; j<C_H; j++) { for(i=0; i<C_W; i++) { fb_one_pixel(x+i, y+j, cursor_pixel[i+j*C_W]); } } return 0; }
int draw_cursor(int x,int y) { int i = 0; int j = 0; save_shape(x,y); for(i=0;i<C_HEIGHT;i++) { for(j=0; j<C_WIDTH;j++) { if(cursor_pixel[j+i*C_WIDTH] != 0XFFFFFFFF ) fb_one_pixel(x+j,y+i,cursor_pixel[j+i*C_WIDTH]); } } return 0; }
void barriar(void) { int i = 0; int j = 0; for(j = 0; j<U_WALL; j++) { for(i=0; i<fb_v.w; i++) { fb_one_pixel(i, j, BLUE|GREEN); } } for(j = 0; j<D_WALL; j++) { for(i=0; i<fb_v.w; i++) { fb_one_pixel(i, fb_v.h-1-j, BLUE|GREEN); } } for(i = 0; i<L_WALL; i++) { for(j=0; j<fb_v.h; j++) { fb_one_pixel(i, j, BLUE|GREEN); } } for(i = 0; i<R_WALL; i++) { for(j=0; j<fb_v.h; j++) { fb_one_pixel(fb_v.w-1-i,j, BLUE|GREEN); } } }
void print_circle(int x1, int y1, int r, u32_t color) { int i = 0, j = 0; for(i = x1-r; i <= x1+r; i++) { for(j = y1-r; j <= y1+r; j++) { if((x1-i)*(x1-i) + (y1-j)*(y1-j) <= r*r) { fb_one_pixel(i,j,color); } } } }
int fb_circle(int x0, int y0, int r, u32_t color) { int x = 0; int y = r; int p = 3-2*r; while (x <= y) { // #if 0 fb_one_pixel(x0 + x, y0 + y, color); fb_one_pixel(x0 + y, y0 + x, color); fb_one_pixel(x0 + x, y0 - y, color); fb_one_pixel(x0 + y, y0 - x, color); fb_one_pixel(x0 - x, y0 + y, color); fb_one_pixel(x0 - y, y0 + x, color); fb_one_pixel(x0 - x, y0 - y, color); fb_one_pixel(x0 - y, y0 - x, color); // #endif fb_line(x0+x, y0+y, x0-x ,y0+y, color); fb_line(x0+y, y0+x, x0-y ,y0+x, color); fb_line(x0+y, y0-x, x0-y ,y0-x, color); fb_line(x0+x, y0-y, x0-x ,y0-y, color); if (p < 0) { p += 4*x+6; } else { p += 4*(x-y)+10; y--; } x++; } return 0; }
int main(int argc, const char *argv[]) { init_data(); print_board(); mouse_doing(); // save_bg(500, 300); // draw_cursor(500, 300); // sleep(1); // restore_bg(500, 300); // draw_cursor(600, 500); #if 0 int i, j; for (i = 0; i < 100; i++) /*纵坐标*/ { for (j = 0; j < 100; j++) /*横坐标*/ { fb_one_pixel(500 + j, 300 + i, 0x0000ff00); } } #endif // fb_line(0, 0, fb_v.w-1, fb_v.h-1, 0x00ff0000); // fb_line(fb_v.w-1, 0, 0, fb_v.h-1, 0x00ff0000); // fb_line(300, fb_v.h-1, 500, 0, 0x0000ff00); // fb_line(0, 0, fb_v.w-1, 0, 0x00ffffff); // fb_line(0, 0, 0, fb_v.h-1, 0x00ffffff); // fb_line(fb_v.w-1, fb_v.h-1, fb_v.w-1, 0, 0x00ffffff); // fb_line(fb_v.w-1, fb_v.h-1, 0, fb_v.h-1, 0x00ffffff); // fb_circle(500, 300, 300, 0x00ff0000); #if 1 int i; for (i = 0; i < fb_v.w; i++) { fb_line(0, 0+i*30, fb_v.w-1, 0+i*30, 0x00ffffff); } printf("location:\n"); scanf("%d",&i); fb_circle(st_x+i*space, st_y+i*space, 10, 0x0000ff00); #endif return 0; }
void print_board(void) { int i = 0; int j = 0; for(j=ST_Y-20; j<Y_NUM*SPACE+30; j++) { for(i=ST_X-80; i<X_NUM*SPACE+SPACE*2+50; i++) { fb_one_pixel(i, j, YELLOW); } } for(i=0; i<Y_NUM; i++) { fb_line(ST_X, ST_Y+i*SPACE, ST_X+(X_NUM-1)*SPACE, ST_Y+i*SPACE, 0x00ffff00); } for(i=0; i<X_NUM; i++) { fb_line(ST_X+i*SPACE, ST_Y, ST_X+i*SPACE, ST_Y+(Y_NUM-1)*SPACE, 0x00ffff00); } }
int fb_line (int x1, int y1,int x2, int y2, u32_t color) //hua xian { int dx = x2-x1; int dy = y2-y1; int inc = ((dx*dy>0) ? 1 : -1); int p=0; if(abs(dx) > abs(dy)) { if(dx < 0) { swap(&x1 ,&x2); swap(&y1,&y2); dx = -dx; dy = -dy; } dy = abs(dy); p = 2*dy-dx; while(x1 <= x2) { fb_one_pixel(x1, y1, color); x1++; if(p<0) { p += 2*dy; } else { p += 2*(dy-dx); y1+=inc; } } } else { if(dy < 0) { swap(&x1 ,&x2); swap(&y1,&y2); dx = -dx; dy = -dy; } dx = abs(dx); p = 2*dx-dy; while(y1 <= y2) { fb_one_pixel(x1, y1, color); y1++; if(p<0) { p += 2*dx; } else { p += 2*(dx-dy); x1+=inc; } } } }
int fb_line(int x1,int y1,int x2,int y2,u32_t color)//画线函数 { int dx = x2-x1;//线的横坐标宽度 int dy = y2-y1;//线的纵坐标宽度 int inc = ((dx*dy) > 0 ? 1 : -1); int p = 0; if(abs(dx)>abs(dy))//从上往下画线 { if(dx<0)//此时x2<x1 可以交换x1与x2的位置和y1与y2的位置eg:从右上角往左下角画线 可以看成时从左下角往右上角画线 { swap(&x1,&x2);//调用swap函数 用来交换x1与x2 swap(&y1,&y2); dx = -dx; dy = -dy; } dy = abs(dy); p = 2*dy-dx;//固定算法公式 while(x1 <= x2)//起点坐标小于等于终点坐标时 { fb_one_pixel(x1,y1,color);//起始点 x1++;//横坐标自加 if(p<0)//p<0时y1的値不用加 { p += 2*dy; } else//p>=0时y1的値用加 { y1 += inc; p += 2*(dy-dx); } } } else//从下往上画线 { if(dy < 0)//斜率较大时 将衡纵坐标互换 { swap(&x1,&x2); swap(&y1,&y2); dx = -dx; dy = -dy; } dx = abs(dx); p = 2*dx-dy; while(y1 <= y2)// { fb_one_pixel(x1,y1,color);//起始点 y1++;//横坐标自加 if(p<0)//p<0时y1的値不用加 { p += 2*dx; } else//p>=0时y1的値用加 { x1 += inc; p += 2*(dx-dy); } } } return 0; }
void fb_drawhline(PFBDEV pFbdev,int x,int y,u32_t color) { int i; for (i = 0; i < pFbdev->fb_var.xres; i++) { fb_drawpixel(pFbdev,i,y,color); } return; int fb_line(int x1,int y1,int x2,int y2,u32_t color) { int dx=x2-x1; int dy=y2-y1; int p=0; int inc=((dx*dy<0)?-1:1); if(abs(dx)>abs(dy)) { if(dx<0) { swap(&x1,&x2); swap(&y1,&y2); dx=-dx; dy=-dy; } dy=abs(dy); p=2*dy-dx; while(x1<=x2) { fb_one_pixel(x1,y1,color); x1++; if(p<0) { p+=2*dy; } else { y1+=inc; p+=2*(dy-dx); } } } else { if(dy<0) { swap(&x1,&x2); swap(&y1,&y2); dx=-dx; dy=-dy; } dx=abs(dx); p=2*dx-dy; while(y1<=y2) { fb_one_pixel(x1,y1,color); y1++; if(p<0) { p+=2*dx; } else { x1+=inc; p+=2*(dx-dy); } } } return 0; int main(void) { FBDEV fbdev; memset(&fbdev,0,sizeof(FBDEV)); strcpy(fbdev.dev,"/dev/fb0"); if (fb_open(&fbdev)==FALSE) { printf("open frame buffer error\n"); return; } fb_memset((void *)(fbdev.fb_mem + fbdev.fb_mem_offset),0,fbdev.fb_fix.smem_len); //画点 fb_drawpixel(&fbdev,512,384,0x00FF0000); fb_drawpixel(&fbdev,513,384,0x00FF0000); fb_drawpixel(&fbdev,512,385,0x00FF0000); fb_drawpixel(&fbdev,513,385,0x00FF0000); //画垂直线 fb_drawvline(&fbdev,511,380,0x0000ff00); fb_drawhline(&fbdev,380,200,0x000000ff); fb_close(&fbdev); getchar(); }
int fb_line(int x1, int y1, int x2, int y2, u32_t color) //Bresenham画线函数 { int dx = x2-x1; int dy = y2-y1; int inc = ((dx*dy) > 0 ? 1 : -1); int p = 0; if (abs(dx) > abs(dy)) { if (dx < 0) { swap(&x1, &x2); swap(&y1, &y2); dx = -dx; dy = -dy; } dy = abs(dy); //绝对值 p = 2*dy-dx; //画线公式 while (x1 <= x2) { fb_one_pixel(x1, y1, color); x1++; if (p<0) { p += 2*dy; } else { y1 += inc; p += 2*(dy - dx); } } } else { if (dy < 0) { swap(&x1, &x2); swap(&y1, &y2); dx = -dx; dy = -dy; } dx = abs(dx); p = 2*dx-dy; //画线公式 while (y1 <= y2) { fb_one_pixel(x1, y1, color); y1++; if (p<0) { p += 2*dx; } else { x1 += inc; p += 2*(dx - dy); } } } return 0; }