连连看C++程序设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

源程序代码

//main.cpp

#include

using namespace std;

#include

#include

#include"class.h"

void main()

{

GridInfor g;

initgraph(M,N);

mciSendString("play game_begin.mp3 repeat", NULL, 0, NULL);

g.InitFace();

while(1)

{

mouse = GetMouseMsg();

switch(mouse.uMsg)

{

case WM_MOUSEMOVE:

g.Mousemove(mouse.x,mouse.y); break;

case WM_LBUTTONDOWN:

if(Single_click_judge(mouse.x,mouse.y))

{

g.Leftbottondown(mouse);

} break;

default: break;

}

}

closegraph();

}

void GridInfor::RandGrid() //产生图片的标记{

for(int iCount = 0, x = 1; x <= ROW; ++x )

{

for( int y = 1; y <= COL; ++y )

{

::GridID[x][y] = iCount++ % GridNum + 1;

} } }

void GridInfor::Shuffle( ) //打乱棋盘

int ix, iy, jx, jy, grid;

for( int k = 0; k < 84; ++k )

{

ix = rand() % ROW + 1; // 产生1 - COL 的随机数

iy = rand() % COL + 1; // 产生1 - ROW 的随机数

jx = rand() % ROW + 1; // 产生1 - COL 的随机数

jy = rand() % COL + 1; // 产生1 - ROW 的随机数

if( ::GridID[ix][iy] != ::GridID[jx][jy] ) //如果不相等就交换数据

{

grid = ::GridID[ix][iy];

::GridID[ix][iy] = ::GridID[jx][jy];

::GridID[jx][jy] = grid;

} } }

////////////////////////////////初始化界面///////////////////////////////////////

void GridInfor::InitFace()

{

srand((unsigned)time(NULL));

a.Load_picture();

a.RandGrid();

IMAGE image3;

loadimage(&image3,"res\\bg.bmp");

putimage(0,0,&image3);

getimage(&image2,3 * 42,2 * 48,42, 48);

a.Shuffle();

a.ShowGrid();

}

void GridInfor::Load_picture() //加载图片{

IMAGE image1,background;

loadimage(&image1,"IMAGE","grids");

SetWorkingImage(&image1);

for(int i = 1 ;i < GridNum + 1 ;i ++)

for(int j = 0;j < 2;j++)

getimage(&image[i][j],j * 42,i * 48,42, 48);

loadimage(&background,"IMAGE","bg");

SetWorkingImage(&background);

getimage(&image2,3 * 42,2 * 48,42, 48);

SetWorkingImage();

putimage(0,0,&background);

}

void GridInfor::ShowGrid()

{

int idx,idy;

for(int i = 0 ;i < ROW; i ++)

for(int j = 0 ;j < COL ; j++)

{

idy = i * 48 + topedge ,idx = j * 42 + leftedge;

putimage(idx,idy,&image[::GridID[i + 1][j + 1]][0]);

} }

/////////////////////////////////鼠标操作////////////////////////////////////////

void GridInfor::Mousemove (int leftx,int lefty) //鼠标移动时的变化{

static int prex,prey,preidx,preidy, curidx,curidy;

if(Judg_val(leftx,lefty))

{

TranstoDracoor(leftx,lefty,&curidx,&curidy); //转化为图纸坐标

if(::GridID[curidy][curidx] != 0)

{

GridPhy_coor(leftx,lefty);

if(pre.idx == preidx && pre.idy == preidy)

putimage(prex,prey,&image[::GridID[preidy][preidx]][1]);

else

putimage(prex,prey,&image[::GridID[preidy][preidx]][0]);

prex = leftx, prey = lefty;

preidx = curidx, preidy = curidy;

Draw_frame(leftx,lefty); //绘制边框

} } }

void GridInfor::Leftbottondown (MOUSEMSG mouse) //左击时的变化{

static int click = 0, idx,idy;

click++;

SeleReact (mouse.x,mouse.y); //显示选中效果

if(click == 1) RecordInfor(mouse.x,mouse.y,pre);

if(click == 2)

{

TranstoDracoor (mouse.x,mouse.y,&idx,&idy);

if(idx != pre.idx || idy != pre.idy)

{

RecordInfor (mouse.x,mouse.y,cur);

if(pre.GridID == cur.GridID && DesGrid(pre,cur))

{

相关文档
最新文档