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

📄 bump.c

📁 minigui编写对对碰! 请多指教!
💻 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 + -