📄 lian.c
字号:
#include <stdio.h>#include <string.h>#include <minigui/common.h>#include <minigui/minigui.h>#include <minigui/gdi.h>#include <minigui/window.h>#include <minigui/mywindows.h>#include <minigui/mgext.h>#include <minigui/filedlg.h>#include <minigui/newfiledlg.h>#define SQUARE 56#define STATE_Y 20typedef struct _BASE{ int Value; int Row; int Line; int Length; int Width; BITMAP Picture[27];}BASE;static BITMAP Bk_Ground;static BITMAP Bk_State;static BITMAP Bk_Score;static BITMAP Bk_Record;static BITMAP Bk_Stage;static BITMAP Bt_Clew;static BITMAP Bt_Ruffle;static BITMAP Bt_End;static BITMAP Bt_Restart;static BITMAP Time_Gril;static BITMAP Time_Dog;static BITMAP Number[10];static BASE Base;static BASE Choose_A;static BASE Choose_B;static BASE Clew_A;static BASE Clew_B;static int Mode;static int Take;static int Pass;static int SCORE;static int RECORD;static int ClewNum=9;static int RuffleNum=9;static int Flag[10][12];static int V_Line[10][12];static int DogPost;static int GrilPost;static RECT Rect={0,504,740,560};static void LoadPicture(){ LoadBitmap (HDC_SCREEN, &Bk_Ground,"./bk/bk_snow.png"); LoadBitmap (HDC_SCREEN, &Bk_State,"./bk/state.png"); LoadBitmap (HDC_SCREEN, &Bk_Score,"./bk/score.png"); LoadBitmap (HDC_SCREEN, &Bk_Record,"./bk/record.png"); LoadBitmap (HDC_SCREEN, &Bk_Stage,"./bk/stage.png"); LoadBitmap (HDC_SCREEN, &Number[0],"./number/0.png"); LoadBitmap (HDC_SCREEN, &Number[1],"./number/1.png"); LoadBitmap (HDC_SCREEN, &Number[2],"./number/2.png"); LoadBitmap (HDC_SCREEN, &Number[3],"./number/3.png"); LoadBitmap (HDC_SCREEN, &Number[4],"./number/4.png"); LoadBitmap (HDC_SCREEN, &Number[5],"./number/5.png"); LoadBitmap (HDC_SCREEN, &Number[6],"./number/6.png"); LoadBitmap (HDC_SCREEN, &Number[7],"./number/7.png"); LoadBitmap (HDC_SCREEN, &Number[8],"./number/8.png"); LoadBitmap (HDC_SCREEN, &Number[9],"./number/9.png"); LoadBitmap (HDC_SCREEN, &Bt_Clew,"./button/b2.png"); LoadBitmap (HDC_SCREEN, &Bt_Ruffle,"./button/b1.png"); LoadBitmap (HDC_SCREEN, &Bt_Restart,"./button/b4.png"); LoadBitmap (HDC_SCREEN, &Bt_End,"./button/b3.png"); LoadBitmap (HDC_SCREEN, &Time_Dog,"./time/dog.png"); LoadBitmap (HDC_SCREEN, &Time_Gril,"./time/gril.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[0],"./xiaotu/1.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[1],"./xiaotu/2.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[2],"./xiaotu/3.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[3],"./xiaotu/4.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[4],"./xiaotu/5.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[5],"./xiaotu/6.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[6],"./xiaotu/7.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[7],"./xiaotu/8.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[8],"./xiaotu/9.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[9],"./xiaotu/10.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[10],"./xiaotu/11.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[11],"./xiaotu/12.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[12],"./xiaotu/13.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[13],"./xiaotu/14.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[14],"./xiaotu/15.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[15],"./xiaotu/16.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[16],"./xiaotu/17.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[17],"./xiaotu/18.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[18],"./xiaotu/19.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[19],"./xiaotu/20.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[20],"./line/choose.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[23],"./newline/b_r.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[24],"./newline/b_l.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[25],"./newline/t_r.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[26],"./newline/t_l.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[21],"./newline/h_line.png"); LoadBitmap (HDC_SCREEN, &Base.Picture[22],"./newline/v_line.png");}static void InitLian(){ int i=0; int j=0; int count=0; for( i=0; i<8; i++) { for( j=0; j<10; j++) { Flag[i+1][j+1]=count/4; V_Line[i+1][j+1]=0; count++; } } for( i=0; i<10 ; i++) { Flag[i][0]=-2; Flag[i][11]=-2; V_Line[i+1][j+1]=0; } for( j=0; j<12; j++) { Flag[0][j]=-2; Flag[9][j]=-2; V_Line[i+1][j+1]=0; } Base.Length=55; Base.Width=55; Choose_A.Length=55; Choose_A.Width=55; Choose_B.Length=55; Choose_B.Width=55; Mode=0; Take=0; DogPost=640; GrilPost=320; Pass=1;// SCORE=0;// ClewNum=9;// RuffleNum=9;}static int OneLine(int a_row, int b_row, int ab_line){ int minrow=(a_row < b_row) ? a_row : b_row; int maxrow=(a_row > b_row) ? a_row : b_row; minrow++; while( Flag[ab_line][minrow]<0 && minrow<maxrow ) { minrow++; } if( minrow == maxrow ) { return 1; } else { return 0; }}static int OneRow(int a_line, int b_line, int ab_row){ int minline=(a_line < b_line) ? a_line : b_line; int maxline=(a_line > b_line) ? a_line : b_line; minline++; while( Flag[minline][ab_row]<0 && minline<maxline) { minline++; } if( minline == maxline) { return 1; } else { return 0; }}static void RowPaint(int a_line, int b_line, int ab_row){ int minline=(a_line < b_line) ? a_line : b_line; int maxline=(a_line > b_line) ? a_line : b_line; minline++; while( minline< maxline) { V_Line[minline][ab_row]=1; minline++; }}static void LinePaint(int a_row, int b_row, int ab_line){ int minrow=(a_row < b_row) ? a_row : b_row; int maxrow=(a_row > b_row) ? a_row : b_row; minrow++; while( minrow<maxrow) { V_Line[ab_line][minrow]=2; minrow++; }}static int JudgeChoose(){ int minline=0; int minrow=0; int maxline=0; int maxrow=0; int count=0; if( Flag[Choose_A.Line][Choose_A.Row] == Flag[Choose_B.Line][Choose_B.Row] && Flag[Choose_A.Line][Choose_A.Row]>=0 ) {//同一直线 if( Choose_A.Line == Choose_B.Line ) { if( OneLine(Choose_A.Row, Choose_B.Row, Choose_A.Line) == 1) { LinePaint(Choose_A.Row, Choose_B.Row, Choose_A.Line); return 1; } } if( Choose_A.Row == Choose_B.Row ) { if( OneRow(Choose_A.Line, Choose_B.Line, Choose_A.Row) == 1 ) { RowPaint(Choose_A.Line, Choose_B.Line, Choose_A.Row); return 1; } } //经过一次转折 if( Choose_A.Line != Choose_B.Line && Choose_A.Row != Choose_B.Row) { minline = ( Choose_A.Line < Choose_B.Line ) ? Choose_A.Line : Choose_B.Line; minrow = ( Choose_A.Row < Choose_B.Row) ? Choose_A.Row : Choose_B.Row; maxrow = ( Choose_A.Row > Choose_B.Row) ? Choose_A.Row : Choose_B.Row; maxline =( Choose_A.Line > Choose_B.Line ) ? Choose_A.Line : Choose_B.Line; if( OneLine(minrow, maxrow, minline)==1 && OneRow(minline, maxline, maxrow)==1 && Flag[minline][maxrow]<0 ) { LinePaint(minrow, maxrow, minline); RowPaint(minline, maxline, maxrow); V_Line[minline][maxrow]=4; return 1; } if( OneLine(minrow, maxrow, maxline)==1 && OneRow(minline, maxline, maxrow)==1 && Flag[maxline][maxrow]<0 ) { LinePaint(minrow, maxrow, maxline); RowPaint(minline, maxline, maxrow); V_Line[maxline][maxrow]=6; return 1; } if( OneLine(minrow, maxrow, minline)==1 && OneRow(minline, maxline, minrow)==1 && Flag[minline][minrow]<0 ) { LinePaint(minrow, maxrow, minline); RowPaint(minline, maxline, minrow); V_Line[minline][minrow]=3; return 1; } if( OneLine(minrow, maxrow, maxline)==1 && OneRow(minline, maxline, minrow)==1 && Flag[maxline][minrow]<0 ) { LinePaint(minrow, maxrow, maxline); RowPaint(minline, maxline, minrow); V_Line[maxline][minrow]=5; return 1; } }//经过两次转折 //外部按行 { minrow = ( Choose_A.Row < Choose_B.Row) ? Choose_A.Row : Choose_B.Row; maxrow = ( Choose_A.Row > Choose_B.Row) ? Choose_A.Row : Choose_B.Row; minline= (Choose_A.Line < Choose_B.Line) ? Choose_A.Line : Choose_B.Line; maxline= (Choose_A.Line > Choose_B.Line) ? Choose_A.Line : Choose_B.Line; while( minline>= 0 ) { minline--; if( Flag[minline][maxrow]>=0 || Flag[minline][minrow]>=0 ) { break; } if( OneLine( (minrow), (maxrow) , minline) == 1 ) { if( Choose_A.Line == Choose_B.Line) { LinePaint((minrow), (maxrow) , minline); RowPaint(Choose_A.Line, minline, Choose_A.Row); RowPaint(Choose_B.Line, minline, Choose_B.Row); V_Line[minline][minrow]=3; V_Line[minline][maxrow]=4; return 1; } else if( OneRow(Choose_A.Line, minline, Choose_A.Row)==1 && OneRow(minline, Choose_B.Line, Choose_B.Row)==1 && Flag[minline][Choose_A.Row]<0 ) { LinePaint((minrow), (maxrow) , minline); RowPaint(Choose_A.Line, minline, Choose_A.Row); RowPaint(Choose_B.Line, minline, Choose_B.Row); V_Line[minline][minrow]=3; V_Line[minline][maxrow]=4; return 1; } } } while( maxline<= 9 ) { maxline++; if( Flag[maxline][maxrow]>=0 || Flag[maxline][minrow]>=0 ) { break; } if( OneLine( (minrow), (maxrow) , maxline) == 1 ) { if( Choose_A.Line == Choose_B.Line) { LinePaint((minrow), (maxrow) , maxline); RowPaint(Choose_A.Line, maxline, Choose_A.Row); RowPaint(Choose_B.Line, maxline, Choose_B.Row); V_Line[maxline][minrow]=5; V_Line[maxline][maxrow]=6; return 1; } else if( OneRow(Choose_A.Line, maxline , Choose_A.Row)==1 && Flag[maxline][Choose_A.Row]<0 && OneRow(maxline, Choose_B.Line, Choose_B.Row)==1 ) { LinePaint((minrow), (maxrow) , maxline); RowPaint(Choose_A.Line, maxline, Choose_A.Row); RowPaint(Choose_B.Line, maxline, Choose_B.Row); V_Line[maxline][minrow]=5; V_Line[maxline][maxrow]=6; return 1; } } } } //按列外部 { minline= ( Choose_A.Line< Choose_B.Line) ? Choose_A.Line : Choose_B.Line; maxline= ( Choose_A.Line> Choose_B.Line) ? Choose_A.Line : Choose_B.Line; minrow= (Choose_A.Row < Choose_B.Row) ? Choose_A.Row : Choose_B.Row; maxrow= (Choose_A.Row > Choose_B.Row) ? Choose_A.Row : Choose_B.Row; while( minrow>= 0 ) { minrow--; if( Flag[minline][minrow]>=0 || Flag[maxline][minrow]>=0 ) { break; } if( OneRow( (minline), (maxline) , minrow) == 1 ) { if( Choose_A.Row == Choose_B.Row ) { RowPaint((minline), (maxline) , minrow); LinePaint(Choose_A.Row,minrow, Choose_A.Line); LinePaint(Choose_B.Row,minrow, Choose_B.Line); V_Line[minline][minrow]=3; V_Line[maxline][minrow]=5; Flag[Choose_A.Line][Choose_A.Row]=-1; Flag[Choose_B.Line][Choose_B.Row]=-1; return 1; } else if( OneLine(Choose_A.Row, minrow, Choose_A.Line)==1 && Flag[Choose_B.Line][minrow]<0 && OneLine(minrow, Choose_B.Row, Choose_B.Line)==1) { RowPaint((minline), (maxline) , minrow); LinePaint(Choose_A.Row,minrow, Choose_A.Line); LinePaint(Choose_B.Row,minrow, Choose_B.Line); V_Line[minline][minrow]=3; V_Line[maxline][minrow]=5; return 1; } } } while( maxrow <= 11 ) { maxrow++; if( Flag[minline][maxrow]>=0 || Flag[maxline][maxrow]>=0 ) { break; } if( OneRow( (minline), (maxline) , maxrow) == 1 ) { if( Choose_A.Row == Choose_B.Row ) { RowPaint( (minline), (maxline) , maxrow); LinePaint(Choose_A.Row,maxrow, Choose_A.Line); LinePaint(Choose_B.Row,maxrow, Choose_B.Line); V_Line[minline][maxrow]=4; V_Line[maxline][maxrow]=6; return 1; } else if( OneLine(Choose_A.Row, maxrow, Choose_A.Line)==1 && Flag[Choose_B.Line][maxrow]<0 && OneLine(maxrow, Choose_B.Row, Choose_B.Line)==1) { RowPaint( (minline), (maxline) , maxrow); LinePaint(Choose_A.Row,maxrow, Choose_A.Line); LinePaint(Choose_B.Row,maxrow, Choose_B.Line); V_Line[minline][maxrow]=4; V_Line[maxline][maxrow]=6; return 1; } } } } //按行内部 { minline= ( Choose_A.Line< Choose_B.Line) ? Choose_A.Line : Choose_B.Line; maxline= ( Choose_A.Line> Choose_B.Line) ? Choose_A.Line : Choose_B.Line; minrow= (Choose_A.Row < Choose_B.Row) ? Choose_A.Row : Choose_B.Row; maxrow= (Choose_A.Row > Choose_B.Row) ? Choose_A.Row : Choose_B.Row; minline++; while( minline< maxline) { if( OneLine( (minrow), (maxrow) , minline) == 1 ) { if( Flag[minline][Choose_A.Row]<0 && Flag[minline][Choose_B.Row]<0) { if( OneRow(Choose_A.Line, minline, Choose_A.Row) == 1 && OneRow(Choose_B.Line, minline, Choose_B.Row) == 1 ) { LinePaint((minrow), (maxrow) , minline); RowPaint(Choose_A.Line, minline, Choose_A.Row); RowPaint(Choose_B.Line, minline, Choose_B.Row); if( (Choose_A.Line<minline && Choose_A.Row==minrow) || (Choose_B.Line<minline && Choose_B.Row==minrow)) { V_Line[minline][minrow]=5; V_Line[minline][maxrow]=4; } else { V_Line[minline][minrow]=3; V_Line[minline][maxrow]=6; } return 1; } } } minline++; } } //按列内部 { minline= ( Choose_A.Line< Choose_B.Line) ? Choose_A.Line : Choose_B.Line; maxline= ( Choose_A.Line> Choose_B.Line) ? Choose_A.Line : Choose_B.Line; minrow= (Choose_A.Row < Choose_B.Row) ? Choose_A.Row : Choose_B.Row; maxrow= (Choose_A.Row > Choose_B.Row) ? Choose_A.Row : Choose_B.Row; minrow++; while( minrow<maxrow ) { if( OneRow( (minline), (maxline) , minrow) == 1 ) { if( Flag[Choose_A.Line][minrow]<0 && Flag[Choose_B.Line][minrow]<0 ) { if( OneLine(Choose_A.Row, minrow, Choose_A.Line)==1 && OneLine(Choose_B.Row, minrow, Choose_B.Line)==1 ) { RowPaint((minline), (maxline) , minrow); LinePaint(Choose_A.Row, minrow, Choose_A.Line); LinePaint(Choose_B.Row, minrow, Choose_B.Line); if( (Choose_A.Line==minline && Choose_A.Row<minrow) || (Choose_B.Line==minline && Choose_B.Row<minrow)) { V_Line[minline][minrow]=4; V_Line[maxline][minrow]=5; } else { V_Line[minline][minrow]=3; V_Line[maxline][minrow]=6; } return 1; } } } minrow++; } } } return 0;}static int Clew(){ int i=1; int j=1; int k=1; int n=1; while(1) { Choose_A.Line=i; Choose_A.Row=j; Choose_B.Line=n; Choose_B.Row=k; if( JudgeChoose()==1 ) { Clew_A.Line=Choose_A.Line; Clew_A.Row=Choose_A.Row; Clew_B.Line=Choose_B.Line; Clew_B.Row=Choose_B.Row; return 1; } k++; if( k>10 ) { k=1; n++; } if( n>8 ) { n=1; j++; } if( j>10 ) { j=1; i++; } if( i>8 ) { i=1; break; } } return 0;}static void Ruffle(){ int i=0; int j=0; int line=0; int row=0; int temp=0; srand( (unsigned)time( NULL ) ); for( i=1; i<9; i++) { for( j=1; j<11; j++) { row=rand()%10+1; line=rand()%8+1; if( Flag[i][j]>=0 && Flag[row][line]>=0 ) { temp=Flag[i][j]; Flag[i][j]=Flag[line][row]; Flag[line][row]=temp; } } }}static void BottomMove(){ int i=0; int j=0; int k=0; int arm[10]; for( k=1; k<11; k++) { j=0; for( i=0; i<10; i++) { arm[i]=-1; } for( i=8; i>0; i--) { if( Flag[i][k]>=0 ) { arm[j]=Flag[i][k]; j++; } } for( i=0; i<8; i++) { Flag[8-i][k]=arm[i]; } }}static void TopMove(){ int i=0; int j=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -