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

📄 lian.c

📁 minigui编写的连连看! 请多指教!
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -