📄 color.c
字号:
#include <stdio.h>
#include <string.h>
#include <time.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 ID_TIME 100
#define IDM_RESTART 104
#define IDM_EXIT 105
typedef struct _BASE
{
int Kind;
int PostX;//左上
int PostY;
int flag;
}BASE;
static BITMAP Back_gameover;
static BITMAP Back_restart;
static BITMAP Back_refresh;
static BITMAP Back_ground;
static BITMAP Back_score;
static BITMAP Back_highest;
static BITMAP MyPic[6];
static BITMAP MyPic2[6];
static BITMAP SPic[10];
static BASE Base[9][9];
static int path[50][2];
static int score=0;
static int start=1;
static int m=0,n=0;
static int fiandway=0;
static int count=0;
static int highest=0;
static RECT rect[81];
static LoadPicture()//装载位图
{
LoadBitmap (HDC_SCREEN, &Back_ground,"./pic/bk.png");
LoadBitmap (HDC_SCREEN, &Back_gameover,"./pic/gameover.png");
//LoadBitmap (HDC_SCREEN, &Back_refresh,"./pic/fresh.png");
LoadBitmap (HDC_SCREEN, &Back_restart,"./pic/restart.png");
LoadBitmap (HDC_SCREEN, &Back_score,"./pic/score.png");
LoadBitmap (HDC_SCREEN, &Back_highest,"./pic/highest.png");
LoadBitmap (HDC_SCREEN, &MyPic[0],"./pic/black.png");
LoadBitmap (HDC_SCREEN, &MyPic[1],"./pic/coffee.png");
LoadBitmap (HDC_SCREEN, &MyPic[2],"./pic/green.png");
LoadBitmap (HDC_SCREEN, &MyPic[3],"./pic/purple.png");
LoadBitmap (HDC_SCREEN, &MyPic[4],"./pic/red.png");
LoadBitmap (HDC_SCREEN, &MyPic[5],"./pic/yellow.png");
LoadBitmap (HDC_SCREEN, &MyPic2[0],"./pic/black1.png");
LoadBitmap (HDC_SCREEN, &MyPic2[1],"./pic/coffee1.png");
LoadBitmap (HDC_SCREEN, &MyPic2[2],"./pic/green1.png");
LoadBitmap (HDC_SCREEN, &MyPic2[3],"./pic/purple1.png");
LoadBitmap (HDC_SCREEN, &MyPic2[4],"./pic/red1.png");
LoadBitmap (HDC_SCREEN, &MyPic2[5],"./pic/yellow1.png");
LoadBitmap (HDC_SCREEN, &SPic[0],"./pic/s0.png");
LoadBitmap (HDC_SCREEN, &SPic[1],"./pic/s1.png");
LoadBitmap (HDC_SCREEN, &SPic[2],"./pic/s2.png");
LoadBitmap (HDC_SCREEN, &SPic[3],"./pic/s3.png");
LoadBitmap (HDC_SCREEN, &SPic[4],"./pic/s4.png");
LoadBitmap (HDC_SCREEN, &SPic[5],"./pic/s5.png");
LoadBitmap (HDC_SCREEN, &SPic[6],"./pic/s6.png");
LoadBitmap (HDC_SCREEN, &SPic[7],"./pic/s7.png");
LoadBitmap (HDC_SCREEN, &SPic[8],"./pic/s8.png");
LoadBitmap (HDC_SCREEN, &SPic[9],"./pic/s9.png");
srand( (unsigned)time( NULL ) );
}
static int Addball()//随即添3个求
{
int i,k,l;
for(i=0;i<3;)
{
k=rand()%9;
l=rand()%9;
if(Base[k][l].Kind==0)
{
Base[k][l].Kind=1+rand()%6;
i++;
}
}
return 0;
}
static int InitBase()//初始化9*9图片
{
int Init_i,Init_k;
for(Init_i=0;Init_i<9;Init_i++)
{
for(Init_k=0;Init_k<9;Init_k++)
{
Base[Init_i][Init_k].PostX=5+Init_k*35;
Base[Init_i][Init_k].PostY=5+Init_i*35;
Base[Init_i][Init_k].Kind=0;
}
}
return 0;
}
static void initRect()//初始化数组 邋邋RECT
{
int Init_t;
for(Init_t=0;Init_t<81;Init_t++)
{
SetRect( &rect[Init_t],Init_t%9*35+5,Init_t/9*35+5,Init_t%9*35+35+5,Init_t/9*35+35+5);
}
printf("init RECT OK!\n");
}
static int Killball()//消球
{
int flag1=0;
int h_num=0,p_num=0,rincline_num=0,lincline_num=0;
int k_i=0,k_j=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;
static int count0;
for( k_i=0 ;k_i<9 ;k_i++)//heng
{
for( k_j=0 ;k_j<9 ;k_j++)
{
if(Base[k_i][k_j].Kind!=0)
{
if(Base[k_i][k_j].Kind==Base[k_i][k_j+1].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+2].Kind && Base[k_i][k_j].Kind==Base[k_i][k_j+3].Kind &&Base[k_i][k_j].Kind==Base[k_i][k_j+4].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+5].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+6].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+7].Kind &&Base[k_i][k_j].Kind==Base[k_i][k_j+8].Kind)
{
h_num=9;
i=k_i;
j=k_j;
break;
break;
}
else if(Base[k_i][k_j].Kind==Base[k_i][k_j+1].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+2].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+3].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+4].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+5].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+6].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+7].Kind)
{
h_num=8;
i=k_i;
j=k_j;
break;
break;
}
else if( (Base[k_i][k_j].Kind==Base[k_i][k_j+1].Kind )&&(Base[k_i][k_j].Kind==Base[k_i][k_j+2].Kind )&&Base[k_i][k_j].Kind==Base[k_i][k_j+3].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+4].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+5].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+6].Kind)
{
h_num=7;
i=k_i;
j=k_j;
break;
break;
}
else if( (Base[k_i][k_j].Kind==Base[k_i][k_j+1].Kind )&&(Base[k_i][k_j].Kind==Base[k_i][k_j+2].Kind )&&Base[k_i][k_j].Kind==Base[k_i][k_j+3].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+4].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+5].Kind)
{
h_num=6;
i=k_i;
j=k_j;
break;
break;
}
else if( (Base[k_i][k_j].Kind==Base[k_i][k_j+1].Kind )&&(Base[k_i][k_j].Kind==Base[k_i][k_j+2].Kind )&&Base[k_i][k_j].Kind==Base[k_i][k_j+3].Kind&&Base[k_i][k_j].Kind==Base[k_i][k_j+4].Kind)
{
h_num=5;
i=k_i;
j=k_j;
break;
break;
}
}
}
}
///////////////////////////////////////////////////
for( k_j=0 ;k_j< 9;k_j++)//shu
{
for( k_i=0; k_i<9 ;k_i++)
{
if(Base[k_i][k_j].Kind!=0)
{
if(Base[k_i][k_j].Kind==Base[k_i+1][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+2][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+3][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+4][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+5][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+6][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+7][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+8][k_j].Kind)
{
p_num=9;
k=k_i;
l=k_j;
break;
break;
}
else if(Base[k_i][k_j].Kind==Base[k_i+1][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+2][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+3][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+4][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+5][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+6][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+7][k_j].Kind)
{
p_num=8;
k=k_i;
l=k_j;
break;
break;
}
else if (Base[k_i][k_j].Kind==Base[k_i+1][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+2][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+3][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+4][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+5][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+6][k_j].Kind)
{
p_num=7;
k=k_i;
l=k_j;
break;
break;
}
else if (Base[k_i][k_j].Kind==Base[k_i+1][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+2][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+3][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+4][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+5][k_j].Kind)
{
p_num=6;
k=k_i;
l=k_j;
break;
break;
}
else if (Base[k_i][k_j].Kind==Base[k_i+1][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+2][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+3][k_j].Kind&&Base[k_i][k_j].Kind==Base[k_i+4][k_j].Kind)
{
p_num=5;
k=k_i;
l=k_j;
break;
break;
}
}
}
}
////////////////////////////////////////////////////
for( k_i=0 ;k_i<9 ;k_i++)//rincline
{
for( k_j=0 ;k_j<9 ;k_j++)
{
if(Base[k_i][k_j].Kind!=0)
{
if(Base[k_i][k_j].Kind==Base[k_i+1][k_j+1].Kind&&Base[k_i][k_j].Kind==Base[k_i+2][k_j+2].Kind && Base[k_i][k_j].Kind==Base[k_i+3][k_j+3].Kind &&Base[k_i][k_j].Kind==Base[k_i+4][k_j+4].Kind &&Base[k_i][k_j].Kind==Base[k_i+5][k_j+5].Kind&&Base[k_i][k_j].Kind==Base[k_i+6][k_j+6].Kind&&Base[k_i][k_j].Kind==Base[k_i+7][k_j+7].Kind&&Base[k_i][k_j].Kind==Base[k_i+8][k_j+8].Kind)
{
rincline_num=9;
m=k_i;
n=k_j;
goto kiLL;//line 350
}
else if(Base[k_i][k_j].Kind==Base[k_i+1][k_j+1].Kind&&Base[k_i][k_j].Kind==Base[k_i+2][k_j+2].Kind&&Base[k_i][k_j].Kind==Base[k_i+3][k_j+3].Kind&&Base[k_i][k_j].Kind==Base[k_i+4][k_j+4].Kind&&Base[k_i][k_j].Kind==Base[k_i+5][k_j+5].Kind&&Base[k_i][k_j].Kind==Base[k_i+6][k_j+6].Kind&&Base[k_i][k_j].Kind==Base[k_i+7][k_j+7].Kind)
{
rincline_num=8;
m=k_i;
n=k_j;
goto kiLL;
}
else if( (Base[k_i][k_j].Kind==Base[k_i+1][k_j+1].Kind )&&(Base[k_i][k_j].Kind==Base[k_i+2][k_j+2].Kind )&&(Base[k_i][k_j].Kind==Base[k_i+3][k_j+3].Kind )&&Base[k_i][k_j].Kind==Base[k_i+4][k_j+4].Kind&&Base[k_i][k_j].Kind==Base[k_i+5][k_j+5].Kind&&Base[k_i][k_j].Kind==Base[k_i+6][k_j+6].Kind)
{
rincline_num=7;
m=k_i;
n=k_j;
goto kiLL;
}
else if(Base[k_i][k_j].Kind==Base[k_i+1][k_j+1].Kind&&Base[k_i][k_j].Kind==Base[k_i+2][k_j+2].Kind && Base[k_i][k_j].Kind==Base[k_i+3][k_j+3].Kind &&Base[k_i][k_j].Kind==Base[k_i+4][k_j+4].Kind &&Base[k_i][k_j].Kind==Base[k_i+5][k_j+5].Kind)
{
rincline_num=6;
m=k_i;
n=k_j;
goto kiLL;
}
else if(Base[k_i][k_j].Kind==Base[k_i+1][k_j+1].Kind&&Base[k_i][k_j].Kind==Base[k_i+2][k_j+2].Kind && Base[k_i][k_j].Kind==Base[k_i+3][k_j+3].Kind &&Base[k_i][k_j].Kind==Base[k_i+4][k_j+4].Kind )
{
rincline_num=5;
m=k_i;
n=k_j;
break;
break;
}
}
}
}
//////////////////////////////////////////////
for( k_i=0 ;k_i<9 ;k_i++)//lincline
{
for( k_j=8 ;k_j>=0 ;k_j--)
{
if(Base[k_i][k_j].Kind!=0)
{
if(Base[k_i][k_j].Kind==Base[k_i+1][k_j-1].Kind&&Base[k_i][k_j].Kind==Base[k_i+2][k_j-2].Kind && Base[k_i][k_j].Kind==Base[k_i+3][k_j-3].Kind &&Base[k_i][k_j].Kind==Base[k_i+4][k_j-4].Kind &&Base[k_i][k_j].Kind==Base[k_i+5][k_j-5].Kind&&Base[k_i][k_j].Kind==Base[k_i+6][k_j-6].Kind&&Base[k_i][k_j].Kind==Base[k_i+7][k_j-7].Kind&&Base[k_i][k_j].Kind==Base[k_i+8][k_j-8].Kind)
{
lincline_num=9;
o=k_i;
p=k_j;
goto kiLL;
}
else if(Base[k_i][k_j].Kind==Base[k_i+1][k_j-1].Kind&&Base[k_i][k_j].Kind==Base[k_i+2][k_j-2].Kind&&Base[k_i][k_j].Kind==Base[k_i+3][k_j-3].Kind&&Base[k_i][k_j].Kind==Base[k_i+4][k_j-4].Kind&&Base[k_i][k_j].Kind==Base[k_i+5][k_j-5].Kind&&Base[k_i][k_j].Kind==Base[k_i+6][k_j-6].Kind&&Base[k_i][k_j].Kind==Base[k_i+7][k_j-7].Kind)
{
lincline_num=8;
o=k_i;
p=k_j;
goto kiLL;
}
else if( (Base[k_i][k_j].Kind==Base[k_i+1][k_j-1].Kind )&&(Base[k_i][k_j].Kind==Base[k_i+2][k_j-2].Kind )&&Base[k_i][k_j].Kind==Base[k_i+3][k_j-3].Kind&&Base[k_i][k_j].Kind==Base[k_i+4][k_j-4].Kind&&Base[k_i][k_j].Kind==Base[k_i+5][k_j-5].Kind&&Base[k_i][k_j].Kind==Base[k_i+6][k_j-6].Kind)
{
lincline_num=7;
o=k_i;
p=k_j;
goto kiLL;
}
else if( (Base[k_i][k_j].Kind==Base[k_i+1][k_j-1].Kind )&&(Base[k_i][k_j].Kind==Base[k_i+2][k_j-2].Kind )&&(Base[k_i][k_j].Kind==Base[k_i+3][k_j-3].Kind)&&(Base[k_i][k_j].Kind==Base[k_i+4][k_j-4].Kind)&&(Base[k_i][k_j].Kind==Base[k_i+5][k_j-5].Kind))
{
lincline_num=6;
o=k_i;
p=k_j;
goto kiLL;
}
else if( (Base[k_i][k_j].Kind==Base[k_i+1][k_j-1].Kind )&&(Base[k_i][k_j].Kind==Base[k_i+2][k_j-2].Kind )&&Base[k_i][k_j].Kind==Base[k_i+3][k_j-3].Kind&&Base[k_i][k_j].Kind==Base[k_i+4][k_j-4].Kind)
{
lincline_num=5;
o=k_i;
p=k_j;
break;
break;
break;
}
}
}
}
/////////////////////////////////////////////
kiLL: for(count0=0;count0<h_num;count0++)
{
Base[i][j+count0].Kind=0;
}
for(count0=0;count0<p_num;count0++)
{
Base[k+count0][l].Kind=0;
}
for(count0=0;count0<rincline_num;count0++)
{
Base[m+count0][n+count0].Kind=0;
}
for(count0=0;count0<lincline_num;count0++)
{
Base[o+count0][p-count0].Kind=0;
}
return (p_num+h_num+lincline_num+rincline_num);
}
static int initflag()
{
int i,j;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
Base[i][j].flag=0;
}
}
printf("init flag;\n");
return 0;
}
static int FindWay(int x,int y,int x1,int y1)//寻找可移动路径若无法移动返回0,存在可移动路径返回1
{
path[count][0]=x;
path[count][1]=y;
count++;
if(y-y1>0&&x-x1>=0&&(abs(x-x1)<=abs(y-y1)))
{
printf("Move from %d,%d to %d,%d \n",x,y,x1,y1);
if(Base[x][y-1].Kind==0&&(y-1>=0)&&Base[x][y-1].flag!=1)//zuo
{
y=y-1;
printf("Move left to %d,%d;\n",x,y);
Base[x][y].flag=1;
while(x==x1&&y==y1)
{
printf("Move to DEST.\n");
return 1;
}
if(FindWay(x, y, x1, y1)==1)
return 1;
y=y+1;
}
if(Base[x-1][y].Kind==0&&(x-1>=0)&&Base[x-1][y].flag!=1)//shang
{
x=x-1;
printf("Move up to %d,%d;\n",x,y);
Base[x][y].flag=1;
while(x==x1&&y==y1)
{
printf("Move to DEST.\n");
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -