连连看C++程序设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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))
{