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

📄 clean_line.c

📁 经典的俄罗斯方块程序
💻 C
字号:
#include<gtk/gtk.h>#include"main.h"#include"drawboard.h"#include"clean_line.h"#include"time_tick.h"extern gint* board1[COLUMN1];extern gboolean* mark_board1[COLUMN1];extern gboolean  ispause;extern gint      score;extern gint      row;extern gint      level;extern gint      timespace;extern gint      timerid;extern GtkWidget* lscore;extern GtkWidget* lrow;extern GtkWidget* llevel;static CleanAbleLineaccount_board(gint max,gint min){    gint i,j,k;    CleanAbleLine tem;    for(i=0;i<4;i++){        tem.ycoord[i]=-1;    }    k=0;    for(i=max;i>=min;i--){        tem.ycoord[k]=i;        for(j=0;j<COLUMN1;j++){            if(0==board1[j][i]){                tem.ycoord[k]=-1;                break;            }            }        k++;    }    return tem;}static gbooleanclean_line(GtkWidget* window,           pcleanline cleanline){    gint i,j;    gint k,h;        return TRUE;}static gbooleanlevel_up(GtkWidget* window){    gchar str[20];        level++;    sprintf(str,_("level: %d"),level);    gtk_label_set_text(llevel,                       str);        /* timespace if declared in main.c */    timespace=timespace/2+50;    g_source_remove(timerid);    timerid=g_timeout_add(timespace,                          time_tick,                          window);        return TRUE;}gbooleanrenew_the_app(GtkWidget* window){    gint i,j;    gchar str[20];        ispause=TRUE;    if(timerid==0)        return TRUE;    g_source_remove(timerid);    timerid=0;    score=0;    row=0;    level=1;    sprintf(str,_("level: %d"),level);    gtk_label_set_text(llevel,                       str);    sprintf(str,_("row  : %d"),row);    gtk_label_set_text(lrow,                       str);    sprintf(str,_("score: %d"),score);    gtk_label_set_text(lscore,                       str);    for(j=0;j<ROW1;j++){        for(i=0;i<COLUMN1;i++){            board1[i][j]=0;        }        drawboard_draw(window,                       board1,                       COLUMN1,                       ROW1,                       1);             }    for(j=0;j<ROW2;j++){        for(i=0;i<COLUMN2;i++){            board2[i][j]=0;        }        drawboard_draw(window,                       board2,                       COLUMN2,                       ROW2,                       2);    }            return TRUE;}gbooleanclean_board(GtkWidget* window,            gint max,gint min){    CleanAbleLine tem;    gint i,j,k;    gint temval=0;    gboolean hasfullline=FALSE;    gchar    str[20];    if(min<=2){   /* Prove that the modules is on the top, so fail in game. */        g_source_remove(timerid);        timespace=TIME_SPACE;    }        if(min>max){        g_print(_("In clean_board() min>max \n"));        return FALSE;    }        tem=account_board(max,min);    for(i=0;i<4;i++){        if(tem.ycoord[i]>=0){            hasfullline=TRUE;        }    }    if(!hasfullline)        return TRUE;    for(i=0,k=0;i<4;i++){        if(tem.ycoord[i]<0){            continue;        }        k++;    }    switch(k){        case 1:            score+=SCORE_ONE_ROW;            break;        case 2:            score+=SCORE_TWO_ROW;            break;        case 3:            score+=SCORE_THR_ROW;            break;        case 4:            score+=SCORE_FOR_ROW;            break;        default:            break;    }    if((row/LEVEL_STEP)!=(row+k)/LEVEL_STEP){        level_up(window);    }        row+=k;    sprintf(str,_("score: %d"),score);    gtk_label_set_text(lscore,                       str);    sprintf(str,_("row  : %d"),row);    gtk_label_set_text(lrow,                       str);       for(i=0;i<4;i++){        if(tem.ycoord[i]<0){            continue;        }        for(j=0;j<COLUMN1;j++){            board1[j][tem.ycoord[i]]=0;        }    }    drawboard_draw(window,                   board1,                   COLUMN1,                   ROW1,                   1);        for(i=0;i<4;i++){        if(tem.ycoord[i]<0){            continue;        }        for(k=tem.ycoord[i];k>0;k--){            for(j=0;j<COLUMN1;j++){                board1[j][k]=board1[j][k-1];            }        }        for(k=i;k<4;k++){            if(tem.ycoord[k]<0){                continue;            }            tem.ycoord[k]++;        }    }    drawboard_draw(window,                   board1,                   COLUMN1,                   ROW1,                   1);        return TRUE;}

⌨️ 快捷键说明

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