📄 llk.h
字号:
/*#if !defined(AFX_SUPERLLK_H__45C8C476_AD9C_462C_A8B5_AC0401A22446__INCLUDED_)
#define AFX_SUPERLLK_H__45C8C476_AD9C_462C_A8B5_AC0401A22446__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "resource.h"
#endif // !defined(AFX_SUPERLLK_H__45C8C476_AD9C_462C_A8B5_AC0401A22446__INCLUDED_)
*/
///////////////////////////////////////////////////////////////////////////
#define MAX_LOADSTRING 100
// Global Variables:///////////////////////////////////////////////////////
HINSTANCE hInst; // current instance
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text
HWND win_hWnd; //for hwnd
HDC win_hdc;
//////////////////////////////////////////////////////////////////////////////////////////////////////
#include <windowsx.h>
#include <windows.h>
#include <mmsystem.h> // very important and include WINMM.LIB too!
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <time.h>
using namespace std;
// Forward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
#define WIDTH 12+2
#define HEIGHT 7+2
#define CIRCLE 341
#define PicWidth 31
#define PicHeight 34
int Game_Main();
int Game_Restart();
int Game_Pause();
int OnPaint();
int MATRIX[WIDTH][HEIGHT]={0};
int random();
int RandMat();
int InitMat();
bool IfConnect(int X1,int Y1,int X2,int Y2);
OnPaint(int ElemX,int ElemY,int Pic);
bool INIT=false;
bool First=true;
int x1,x2,y1,y2;
const int INIT_X=100,INIT_Y=100;
int MouseToMat(int& x,int& y)
{
x=(x-INIT_X)/PicWidth+1;
y=(y-INIT_Y)/PicHeight+1;
return 0;
}
int OnPaint()
{
InvalidateRect(win_hWnd,NULL,false);
PAINTSTRUCT ps;
HDC hdc;
int cx=0, cy=0;
int x=0,y=0; //used to set coordinate of pics
LPARAM lParam;
int i,j; //used to paint the matrix in circle
HDC hCompatibleDC;
static HBITMAP map;
static BITMAP bitmap;
cx = LOWORD (lParam) ;
cy = HIWORD (lParam) ;
hdc = BeginPaint(win_hWnd, &ps);
hCompatibleDC=::CreateCompatibleDC(hdc);
for (i=1;i<HEIGHT-1;i++)
{
for(j=1;j<WIDTH-1;j++)
{
map=::LoadBitmap(hInst,MAKEINTRESOURCE(MATRIX[j][i]+132));
GetObject (map, sizeof (BITMAP), &bitmap) ;
::SelectObject(hCompatibleDC,map);
::BitBlt(hdc,INIT_X+x,INIT_Y+y,cx,cy,hCompatibleDC,0,0,SRCCOPY);
x=x+PicWidth;
}
x=0;
y=y+PicHeight;
}
::DeleteDC(hCompatibleDC);
EndPaint (win_hWnd, &ps) ;
return(0);
}
OnPaint(int x,int y,int pic)
{
InvalidateRect(win_hWnd,NULL,false);
PAINTSTRUCT ps;
HDC hdc;
int cx=0, cy=0;
LPARAM lParam;
HDC hCompatibleDC;
static HBITMAP map;
static BITMAP bitmap;
cx = LOWORD (lParam) ;
cy = HIWORD (lParam) ;
hdc = BeginPaint(win_hWnd, &ps);
hCompatibleDC=::CreateCompatibleDC(hdc);
map=::LoadBitmap(hInst,MAKEINTRESOURCE(pic));
GetObject (map, sizeof (BITMAP), &bitmap) ;
::SelectObject(hCompatibleDC,map);
::BitBlt(hdc,INIT_X+x*PicWidth,INIT_X+y*PicHeight,cx,cy,hCompatibleDC,0,0,SRCCOPY);
::DeleteDC(hCompatibleDC);
EndPaint (win_hWnd, &ps) ;
return(0);
}
//////////////////////////////////////////////////////////////////////////////
int InitMat()
{
int i,j,n=1;
for (j=1;j<HEIGHT-1;j++)
{
for (i=1;i<WIDTH-1;i++)
{
MATRIX[i][j]=n;
n=n+1;
if(n==22)
{
n=1;
}
}
}
RandMat();
return 0;
}
////////////////////////////////////////////////////////////////////////////////
int random(int number)
{
return (int)(number/(float)RAND_MAX * rand());
}
int RandMat()
{
int i;
int tmp;
int x1,x2,y1,y2;
for(i=1;i<CIRCLE;i++)
{
x1=random(WIDTH-2)+1;
x2=random(WIDTH-2)+1;
y1=random(HEIGHT-2)+1;
y2=random(HEIGHT-2)+1;
if(MATRIX[x1][y1]!=0 && MATRIX[x2][y2]!=0)
{
tmp=MATRIX[x1][y1];
MATRIX[x1][y1]=MATRIX[x2][y2];
MATRIX[x2][y2]=tmp;
}
}
return 0;
}
////////////////////////////////////////////////////////////////////////////////
bool IfConnect(int X1,int Y1,int X2,int Y2)
{
int XMark[WIDTH]={0},YMark[HEIGHT]={0};
int i,j;
if(MATRIX[X1][Y1]!=MATRIX[X2][Y2])
{
return false;
}
if(X1==X2 && Y1==Y2)
{
return false;
}
if(0==MATRIX[X1][Y1])
{
return false;
}
//-------------------------------------------------------------------------------------
XMark[X1]++;
XMark[X2]++;
for(i=0;i<WIDTH;i++)
{
if(0==MATRIX[i][Y1])
{
XMark[i]++;
}
if(0==MATRIX[i][Y2])
{
XMark[i]++;
}
}
YMark[Y1]++;
YMark[Y2]++;
for(j=0;j<HEIGHT;j++)
{
if(0==MATRIX[X1][j])
{
YMark[j]++;
}
if(0==MATRIX[X2][j])
{
YMark[j]++;
}
}
//------------------------------------------------------------------------------------
int judge;
int state;
int n;
if(X1==X2) judge=1;
else if(Y1==Y2) judge=2;
else judge=3;
switch(judge)
{
case 1:
n=0;
for(j=(Y1<Y2 ? Y1 : Y2)+1;j<(Y1>Y2 ? Y1 : Y2);j++)
{
if(MATRIX[X1][j]!=0) break;
n++;
}
if(n==(Y1>Y2 ? Y1 : Y2)-(Y1<Y2 ? Y1 : Y2)-1) {MATRIX[X1][Y1]=MATRIX[X2][Y2]=0;return true;}
else for(i=0;i<WIDTH;i++)
{
if(XMark[i]==2)
{
state=0;
n=0;
for(j=(X1<i ? X1 : i)+1;j<(X1>i ? X1 : i);j++)
{
if(MATRIX[j][Y1]!=0) break;
n++;
}
if(n==(X1>i ? X1 : i)-(X1<i ? X1 : i)-1)
state++;
n=0;
for(j=(X2<i ? X2 : i)+1;j<(X2>i ? X2 :i);j++)
{
if(MATRIX[j][Y2]!=0) break;
n++;
}
if(n==(X2>i ? X2 :i)-(X2<i ? X2 : i)-1)
state++;
n=0;
for(j=(Y1<Y2 ? Y1 : Y2)+1;j<(Y1>Y2 ? Y1 : Y2);j++)
{
if(MATRIX[i][j]!=0) break;
n++;
}
if(n==(Y1>Y2 ? Y1 : Y2)-(Y1<Y2 ? Y1 : Y2)-1)
state++;
}
if(state==3) {MATRIX[X1][Y1]=MATRIX[X2][Y2]=0;return true;}
}
break;
case 2:
n=0;
for(i=(X1<X2 ? X1 : X2)+1;i<(X1>X2 ? X1 : X2);i++)
{
if(MATRIX[i][Y1]!=0) break;
n++;
}
if(n==(X1>X2 ? X1 : X2)-(X1<X2 ? X1 : X2)-1) {MATRIX[X1][Y1]=MATRIX[X2][Y2]=0;return true;}
else for(j=0;j<HEIGHT;j++)
{
if(YMark[j]==2)
{
state=0;
n=0;
for(i=(Y1<j ? Y1 : j)+1;i<(Y1>j ? Y1 :j);i++)
{
if(MATRIX[X1][i]!=0) break;
n++;
}
if(n==(Y1>j ? Y1 :j)-(Y1<j ? Y1 : j)-1)
state++;
n=0;
for(i=(Y2<j ? Y2 : j)+1;i<(Y2>j ? Y2 :j);i++)
{
if(MATRIX[X2][i]!=0) break;
n++;
}
if(n==(Y2>j ? Y2 :j)-(Y2<j ? Y2 : j)-1)
state++;
n=0;
for(i=(X1<X2 ? X1 : X2)+1;i<(X1>X2 ? X1 : X2);i++)
{
if(MATRIX[i][j]!=0) break;
n++;
}
if(n==(X1>X2 ? X1 : X2)-(X1<X2 ? X1 : X2)-1)
state++;
}
if(state==3) {MATRIX[X1][Y1]=MATRIX[X2][Y2]=0;return true;}
}
break;
case 3:
for(i=0;i<WIDTH;i++)
{
if(XMark[i]==2)
{
state=0;
n=0;
for(j=(X1<i ? X1 : i)+1;j<(X1>i ? X1 : i);j++)
{
if(MATRIX[j][Y1]!=0) break;
n++;
}
if(n==(X1>i ? X1 : i)-(X1<i ? X1 : i)-1)
state++;
n=0;
for(j=(X2<i ? X2 : i)+1;j<(X2>i ? X2 :i);j++)
{
if(MATRIX[j][Y2]!=0) break;
n++;
}
if(n==(X2>i ? X2 :i)-(X2<i ? X2 : i)-1)
state++;
n=0;
for(j=0;j<WIDTH;j++)
{
if(YMark[j]==2)
{
if((MATRIX[i][Y1]==MATRIX[X2][j] || MATRIX[i][Y2]==MATRIX[X1][j])
&& state==2)
MATRIX[X1][Y1]=MATRIX[X2][Y2]=0;
}
}
for(j=(Y1<Y2 ? Y1 : Y2)+1;j<(Y1>Y2 ? Y1 : Y2);j++)
{
if(MATRIX[i][j]!=0) break;
n++;
}
if(n==(Y1>Y2 ? Y1 : Y2)-(Y1<Y2 ? Y1 : Y2)-1)
state++;
}
if(state==3) MATRIX[X1][Y1]=MATRIX[X2][Y2]=0;return true;
}
for(j=0;j<HEIGHT;j++)
{
if(YMark[j]==2)
{
state=0;
n=0;
for(i=(Y1<j ? Y1 : j)+1;i<(Y1>j ? Y1 :j);i++)
{
if(MATRIX[X1][i]!=0) break;
n++;
}
if(n==(Y1>j ? Y1 :j)-(Y1<j ? Y1 : j)-1) state++;
n=0;
for(i=(Y2<j ? Y2 : j)+1;i<(Y2>j ? Y2 :j);i++)
{
if(MATRIX[X2][i]!=0) break;
n++;
}
if(n==(Y2>j ? Y2 :j)-(Y2<j ? Y2 : j)-1) state++;
for(i=0;i<HEIGHT;i++)
{
if(XMark[i]==2)
{
if((MATRIX[i][Y1]==MATRIX[X2][j] || MATRIX[i][Y2]==MATRIX[X1][j])
&& state==2)
MATRIX[X1][Y1]=MATRIX[X2][Y2]=0;
return true;
}
}
n=0;
for(i=(X1<X2 ? X1 : X2)+1;i<(X1>X2 ? X1 : X2);i++)
{
if(MATRIX[i][j]!=0) break;
n++;
}
if(n==(X1>X2 ? X1 : X2)-(X1<X2 ? X1 : X2)-1)
state++;
}
if(state==3) {MATRIX[X1][Y1]=MATRIX[X2][Y2]=0;return true;}
}
break;
default: break;
}
return false;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -