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

📄 drawboard.c

📁 linux C语言写的俄罗斯方块 GTK
💻 C
字号:
#include<gtk/gtk.h>#include"main.h"#include"drawboard.h"extern GdkPixbuf* image;static GdkColor bgcolor;static GdkColor fgcolor;static gboolean color_initialed=FALSE;static voidinitial_drawboards(){    int i,j;        if(color_initialed)        return;    fgcolor.red=0;    fgcolor.green=0;    fgcolor.blue =13056;    bgcolor.red=0;    bgcolor.blue=0;    bgcolor.green=0;    color_initialed=TRUE;    for(i=0;i<COLUMN1;i++){        board1_old[i]=&_board1_old[i*ROW1];        mark_board1[i]=&_mark_board1[i*ROW1];    }    for(i=0;i<COLUMN2;i++){        board2_old[i]=&_board2_old[i*ROW2];    }        for(i=0;i<COLUMN1;i++){        for(j=0;j<ROW1;j++){            board1_old[i][j]=0;            mark_board1[i][j]=FALSE;        }    }    for(i=0;i<COLUMN2;i++){        for(j=0;j<ROW2;j++){            board2_old[i][j]=0;        }    }    }gbooleandrawboard_init(GtkWidget* widget,               gint column,               gint row,               gint block_width,               gint drawboardID){    p2dbi temp;    gint  i,j;    initial_drawboards();        temp=dbi+drawboardID-1;    temp->gc=gdk_gc_new(widget->window);    temp->column=column;    temp->row=row;    temp->width=block_width*column;    temp->height=block_width*row;    temp->block_width=block_width;        temp->pixmap=gdk_pixmap_new(widget->window,                                block_width*column,                                block_width*row,                                -1);     if(1==drawboardID){        temp->resource=gdk_pixmap_new(widget->window,                                      block_width*3,                                      block_width*6,                                      -1);        gdk_pixbuf_render_to_drawable(image,                                      temp->resource,                                      temp->gc,                                      0,0,0,0,                                      block_width*3,                                      block_width*6,                                      GDK_RGB_DITHER_NORMAL,                                      0,0);    }else if(2==drawboardID){        temp->resource=gdk_pixmap_new(widget->window,                                      block_width*3,                                      block_width*3,                                      -1);        gdk_pixbuf_render_to_drawable(image,                                      temp->resource,                                      temp->gc,                                      block_width/2*3,                                      block_width*3,                                      0,0,                                      block_width*3,                                      block_width*3,                                      GDK_RGB_DITHER_NORMAL,                                      0,0);    }    gdk_gc_set_rgb_fg_color(temp->gc,&fgcolor);    gdk_gc_set_rgb_bg_color(temp->gc,&bgcolor);    gdk_draw_rectangle(temp->pixmap,                       temp->gc,                       TRUE,0,0,                       block_width*column,                       block_width*row);    for(i=0;i<column;i++){        gdk_draw_line(temp->pixmap,                      widget->style->black_gc,                      i*block_width,0,                      i*block_width,                      row*block_width);    }    for(i=0;i<row;i++){        gdk_draw_line(temp->pixmap,                      widget->style->black_gc,                      0,i*block_width,                      column*block_width,                      i*block_width);    }        return TRUE;}gbooleandrawboard_expose(GtkWidget* widget,                 gint drawboardID,                 gpointer data){    p2dbi temp;    temp=dbi+drawboardID-1;    gdk_draw_drawable(widget->window,                      temp->gc,                      temp->pixmap,                      0,0,0,0,                      widget->allocation.width,                      widget->allocation.height);        return TRUE;}gbooleandrawboard_draw(GtkWidget* widget,               gint** array,               gint column,               gint row,               gint id){    GdkGC*     gc;    GdkPixmap* pixmap;    GdkPixmap* resource;    gint       width;    p2dbi      this_dbi;    gint**     board_old;    gint       i,j;    const gint MENU_WIDTH=28;        this_dbi=&dbi[id-1];    gc=this_dbi->gc;    pixmap=this_dbi->pixmap;    resource=this_dbi->resource;    width=this_dbi->block_width;        if(1==id){        board_old=board1_old;    }else if(2==id){        board_old=board2_old;    }        for(i=0;i<column;i++){        for(j=0;j<row;j++){            if(board_old[i][j]==array[i][j]){                continue;            }            board_old[i][j]=array[i][j];            if(0==array[i][j]){                gdk_draw_rectangle(pixmap,                                   gc,                                   TRUE,                                   i*width,                                   j*width,                                   width,width);                gdk_draw_line(pixmap,                              widget->style->black_gc,                              i*width,j*width,                              i*width,j*width+width);                gdk_draw_line(pixmap,                              widget->style->black_gc,                              i*width,j*width,                              i*width+width,j*width);                                gtk_widget_queue_draw_area(widget,                                           i*width,j*width+MENU_WIDTH,//************                                           width,width);                                continue;            }            else{                gint xtem;                gint ytem;                                if(array[i][j]>0){                    xtem=array[i][j]-1;                    ytem=0;                    ytem=xtem/3;                    xtem%=3;                }else{                    g_print("0000000000\n");                    xtem=array[i][j]+1;                    xtem=ABS(xtem);                    ytem=5;                    ytem-=xtem/3;                    xtem%=3;                }                                gdk_draw_drawable(pixmap,                                  gc,                                  resource,                                  xtem*width,                                  ytem*width,                                  i*width,                                  j*width,                                  width,                                  width);                if(1==id){//                    gtk_widget_queue_draw(widget);                      gtk_widget_queue_draw_area(widget,                                               i*width,j*width+MENU_WIDTH,//****************                                               width,width);                  }                                continue;            }        }    }    if(2==id){        gtk_widget_queue_draw(widget);    }        return TRUE;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -