📄 bump.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_START 103
#define IDM_RESTART 104
#define IDM_EXIT 105
#define IDM_GRADE1 106
#define IDM_GRADE2 107
#define IDM_GRADE3 108
typedef struct _BASE
{
int Kind;
int PostX;//左上
int PostY;
}BASE;
static BITMAP Back_GameOver;
static BITMAP Back_restart;
static BITMAP Back_refresh;
static BITMAP Back_ground;
static BITMAP Back_score;
static BITMAP Back_hscore;
static RECT rec1={0,400,400,460};
static BITMAP MyPic[7];
static BITMAP MyPic2[7];
static BITMAP SPic[10];
static BASE Base[8][8];
static int score=0;
static int highest=0;
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_hscore,"./pic/highscore.png");
LoadBitmap (HDC_SCREEN, &MyPic[0],"./pic/1.png");
LoadBitmap (HDC_SCREEN, &MyPic[1],"./pic/2.png");
LoadBitmap (HDC_SCREEN, &MyPic[2],"./pic/3.png");
LoadBitmap (HDC_SCREEN, &MyPic[3],"./pic/4.png");
LoadBitmap (HDC_SCREEN, &MyPic[4],"./pic/5.png");
LoadBitmap (HDC_SCREEN, &MyPic[5],"./pic/6.png");
LoadBitmap (HDC_SCREEN, &MyPic[6],"./pic/7.png");
LoadBitmap (HDC_SCREEN, &MyPic2[0],"./pic/k1.png");
LoadBitmap (HDC_SCREEN, &MyPic2[1],"./pic/k2.png");
LoadBitmap (HDC_SCREEN, &MyPic2[2],"./pic/k3.png");
LoadBitmap (HDC_SCREEN, &MyPic2[3],"./pic/k4.png");
LoadBitmap (HDC_SCREEN, &MyPic2[4],"./pic/k5.png");
LoadBitmap (HDC_SCREEN, &MyPic2[5],"./pic/k6.png");
LoadBitmap (HDC_SCREEN, &MyPic2[6],"./pic/k7.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 initbase()
{
int Init_i,Init_k;
for(Init_i=0;Init_i<8;Init_i++)
for(Init_k=0;Init_k<8;Init_k++)
{
Base[Init_i][Init_k].Kind=rand()%7;
Base[Init_i][Init_k].PostX=Init_k*48+7;
Base[Init_i][Init_k].PostY=Init_i*48+7;
}
}
static int KillPic()
{
int flag1=0;
int h_num=0,p_num=0;
int k_i=0,k_j=0,i=0,j=0,k=0,l=0;
static int count0,count;
for( k_i=0 ;k_i<8 ;k_i++)//heng
{
for( k_j=0 ;k_j<8 ;k_j++)
{
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;
}
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)
{
h_num=4;
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 ))
{
h_num=3;
i=k_i;
j=k_j;
break;
break;
}
}
}
//////////////////////////////////////////////
for( k_j=0 ;k_j< 8;k_j++)//shu
{
for( k_i=0; k_i<8 ;k_i++)
{
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;
}
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)
{
p_num=4;
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)
{
p_num=3;
k=k_i;
l=k_j;
break;
break;
}
}
}
//////////////////////////////////
if(p_num==0&&h_num!=0)
{
for(count0=0;count0<i;count0++)
{
for(count=0;count<h_num;count++)
{
Base[i-count0][j+count].Kind=Base[i-count0-1][j+count].Kind;
}
}
for(count=0;count<h_num;count++)
{
Base[0][j+count].Kind=rand()%7;
}
}
///////////////////////////////////////
else if(p_num!=0&&h_num==0)
{
for(count0=0;count0<k;count0++)
{
Base[k+p_num-1-count0][l].Kind=Base[k-count0-1][l].Kind;
}
for(count=0;count<p_num;count++)
{
Base[p_num-1-count][l].Kind=rand()%7;
}
}
////////////////////////////////////
else if(p_num!=0&&h_num!=0)//hengshujiaocha bujiacha
{
for(count0=0;count0<i;count0++)
{
for(count=0;count<h_num;count++)
{
Base[i-count0][j+count].Kind=Base[i-count0-1][j+count].Kind;
}
}
for(count=0;count<h_num;count++)
{
Base[0][j+count].Kind=rand()%7;
}
p_num=p_num-1;
for(count0=0;count0<k;count0++)
{
for(count=0;count<p_num;count++)
{
Base[k+p_num-count0][l].Kind=Base[k-count0][l].Kind;
}
}
for(count=0;count<p_num;count++)
{
Base[p_num-count][l].Kind=rand()%7;
}
}
///////////////////////////////////
if (h_num!=0&&p_num==0)
{
return h_num;
}
else if (p_num!=0&&h_num==0)
{
return p_num;
}
else if(p_num!=0&&h_num!=0)
{
return p_num+h_num;
}
else
{
return 0;
}
}
static int CheckBump()
{
int h_num=0,p_num=0;
static int k_i=0,k_j=0,i=0,j=0;
static int count0,count;
for( k_i=0 ;k_i<8 ;k_i++)//横
{
for( k_j=0 ;k_j<8 ;k_j++)
{
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 )
{
return 1;
}
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)
{
h_num=4;
return 1;
}
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 ))
{
return 1;
}
}
}
for( i=0 ;i< 8;i++)
{
for( j=0; j<8 ;j++)
{
if(Base[i][j].Kind==Base[i+1][j].Kind&&Base[i][j].Kind==Base[i+2][j].Kind&&Base[i][j].Kind==Base[i+3][j].Kind&&Base[i][j].Kind==Base[i+4][j].Kind)
{
return 1;
}
else if(Base[i][j].Kind==Base[i+1][j].Kind&&Base[i][j].Kind==Base[i+2][j].Kind&&Base[i][j].Kind==Base[i+3][j].Kind)
{
return 1;
}
else if (Base[i][j].Kind==Base[i+1][j].Kind&&Base[i][j].Kind==Base[i+2][j].Kind)
{
return 1;
}
}
}
return FALSE;
}
static int CountScore(int num)
{
switch(num){
case 3:
{
score+=5;
break;
}
case 4:
{
score+=8;
break;
}
case 5:
{
score+=13;
break;
}
case 6:{
score+=20;
break;
}
}
}
static int Readscore()
{
FILE *fp;
char p[4];
fp=fopen("score.txt","r");
if(fp==NULL)
{
printf("Open file failed! /n");
return -1;
}
fgets(p,4,fp);
highest=atoi(p);
fclose(fp);
return 0;
}
static int Writescore()
{
FILE *fp;
char p[4];
fp=fopen("score.txt","w+");
if(fp==NULL)
{
printf("Open file failed! /n");
return -1;
}
sprintf(p,"%d",highest);
fwrite(p,4,1,fp);
fclose(fp);
return 0;
}
static int BumpWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
HWND timeedit;
SIZE size;
int prex,prey;
static int i=0,j=0,k=0,l=0,m=0,n=0;
static int x=27,y=400;
static unsigned int flag=0,ScoreCount=0;
int flag_next=0;
static int refresh=0,restart=1,GameOver=0;
int judge;
int buff=100;
time_t t1,t2;
switch (message) {
case MSG_CREATE:
{
SetTimer(hWnd,101,100);
SetTimer(hWnd,100,200);
if( Readscore()==-1)
return -1;
break;
}
case MSG_PAINT:
{
hdc = BeginPaint(hWnd);
FillBoxWithBitmap(hdc,0,0,400,500,&Back_ground);
FillBoxWithBitmap(hdc,x,y,0,0,&MyPic[4]);
FillBoxWithBitmap(hdc,10,460,0,0,&Back_refresh);
FillBoxWithBitmap(hdc,60,460,0,0,&Back_restart);
FillBoxWithBitmap(hdc,160,460,0,0,&Back_score);
FillBoxWithBitmap(hdc,210,460,0,0,&SPic[score/100]);
FillBoxWithBitmap(hdc,220,460,0,0,&SPic[(score%100)/10]);
FillBoxWithBitmap(hdc,230,460,0,0,&SPic[score%10]);
FillBoxWithBitmap(hdc,255,460,0,0,&Back_hscore);
FillBoxWithBitmap(hdc,332,460,0,0,&SPic[((highest)%1000)/100]);
FillBoxWithBitmap(hdc,344,460,0,0,&SPic[(highest%100)/10]);
FillBoxWithBitmap(hdc,356,460,0,0,&SPic[highest%10]);
if(restart==1)
{
initbase();
while(CheckBump()==1)
{
KillPic();
}
restart=0;
for( i=0 ; i<8 ; i++)
{
for( j=0 ; j<8; j++)
{
FillBoxWithBitmap(hdc,Base[i][j].PostX,Base[i][j].PostY,48,48,&MyPic[Base[i][j].Kind]);
}
}
}
else if(GameOver==1)
{
if(score>highest)
{
highest=score;
Writescore();
}
FillBoxWithBitmap(hdc,160,200,0,0,&Back_GameOver);
GameOver=0;
}
else if(refresh>0)
{
initbase();
while(CheckBump()==1)
{
KillPic();
}
for( i=0 ; i<8 ; i++)
{
for( j=0 ; j<8; j++)
{
FillBoxWithBitmap(hdc,Base[i][j].PostX,Base[i][j].PostY,48,48,&MyPic[Base[i][j].Kind]);
}
}
refresh=0;
}
else
{
for( i=0 ; i<8; i++)
{
for( j=0 ; j<8; j++)
{
FillBoxWithBitmap(hdc,Base[i][j].PostX,Base[i][j].PostY,48,48,&MyPic[Base[i][j].Kind]);
}
}
FillBoxWithBitmap(hdc,Base[m][n].PostX,Base[m][n].PostY,48,48,&MyPic2[Base[m][n].Kind]);
}
EndPaint(hWnd,hdc);
break;
}
case MSG_TIMER:
{
if(wParam==100)
{
if(x<327)
x+=2;
else GameOver=1;
InvalidateRect (hWnd,&rec1,TRUE);
}
else if(wParam==101)
{
while(CheckBump()==1)
{
if((ScoreCount=KillPic())!=0)
CountScore(ScoreCount);
}
if(score>highest)
{
highest=score;
Writescore();
}
ResetTimer(hWnd,101,1000);
InvalidateRect (hWnd,NULL,TRUE);
}
break;
}
case MSG_LBUTTONDOWN:
{
prex = LOSWORD (lParam);
prey= HISWORD (lParam);
if(prex>7&&prex<393&&prey>7&&prey<393)
{
if(flag==0)
{
n=((prex-7)/48);
m=((prey-7)/48);
flag=1;
hdc = BeginPaint(hWnd);
FillBoxWithBitmap(hdc,Base[m][n].PostX,Base[m][n].PostY,48,48,&MyPic2[Base[m][n].Kind]);
EndPaint(hWnd,hdc);
}
else if (flag==1)
{
l=((prex-7)/48);
k=((prey-7)/48);
if((((m+1)==k)&&(n==l))||(((m-1)==k)&&(n==l))||(((n+1)==l)&&(k==m))||(((n-1)==l)&&(k==m)))
{
buff=Base[m][n].Kind;
Base[m][n].Kind=Base[k][l].Kind;
Base[k][l].Kind=buff;
if(CheckBump()==0)
{
buff=Base[m][n].Kind;
Base[m][n].Kind=Base[k][l].Kind;
Base[k][l].Kind=buff;
}//有树立的
ResetTimer(hWnd,101,100);
InvalidateRect (hWnd,NULL,TRUE);
}
flag=0;
}
}
else if(prex>10&&prex<60&&prey>460&&prey<490)
{
refresh=1;
if((score-30)>0)
score-=30;
else score=0;
if(score>highest)
highest=score;
InvalidateRect (hWnd,NULL,TRUE);
}
else if(prex>60&&prex<160&&prey>460&&prey<490)
{
restart=1;
score=0;
x=27;
InvalidateRect (hWnd,NULL,TRUE);
}
break;
}
case MSG_CLOSE:
DestroyMainWindow (hWnd);
PostQuitMessage (hWnd);
return 0;
}
return DefaultMainWinProc(hWnd, message, wParam, lParam);
}
int MiniGUIMain (int argc, const char* argv[])
{
MSG Msg;
HWND hMainWnd;
MAINWINCREATE CreateInfo;
LoadPicture();
initbase();
#ifdef _LITE_VERSION
SetDesktopRect(0, 0, 1024, 768);
#endif
CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER;
CreateInfo.dwExStyle = WS_EX_NONE;
CreateInfo.spCaption = " game ";
CreateInfo.hCursor = GetSystemCursor(0);
CreateInfo.hIcon = 0;
CreateInfo.MainWindowProc = BumpWinProc;
CreateInfo.lx = 0;
CreateInfo.ty = 0;
CreateInfo.rx = 400;
CreateInfo.by = 500;
CreateInfo.iBkColor = COLOR_lightwhite;
CreateInfo.dwAddData = 0;
CreateInfo.hHosting = HWND_DESKTOP;
hMainWnd = CreateMainWindow (&CreateInfo);
if (hMainWnd == HWND_INVALID)
return -1;
ShowWindow(hMainWnd, SW_SHOWNORMAL);
while (GetMessage(&Msg, hMainWnd)) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
MainWindowThreadCleanup (hMainWnd);
return 0;
}
#ifndef _LITE_VERSION
#include <minigui/dti.c>
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -