#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <time.h>
#include <easyx.h>//引用图形库头文件
#include<mmsystem.h>//系统多媒体头文件
#pragma comment(lib,"winmm.lib")//多媒体库
#define ROW 4
#define COL 4
int map[ROW][COL];//存储序号
IMAGE img [ROW][COL];//存储序号对应的图片
IMAGE* pimg = (IMAGE*)img;
IMAGE img_total;//图片总
void gameInit()
{
//把map里面的数据从小到大赋值(从0开始)
//0 1 2 3
//4 5 6 7
//8 9 10 11
//12 13 14 15
int cnt = 0;
for (int i=0;i<ROW;i++)
{
for (int j=0;j<COL;j++)
{
map[i][j] = cnt++;
}
}
//打乱序号
for (int i=0;i<100;i++)
{
int r1, c1;
int r2, c2;
r1 = rand() % ROW;
c1 = rand() % COL;
r2 = rand() % ROW;
c2 = rand() % COL;
int t = map[r1][c1];
map[r1][c1] = map[r2][c2];
map[r2][c2] = t;
}
//加载图片
loadimage(&img_total, _T("妮寇.jpg"), getwidth(), getheight());
//切割图片并保存
SetWorkingImage(&img_total);
for (int i=0;i<ROW;i++)
{
for (int j=0;j<COL;j++)
{
getimage(&img[i][j], j * 100, i * 100, 100, 100);
}
}
SetWorkingImage();
loadimage(&img[ROW - 1][COL - 1], _T("white.png"), 100, 100);
}
void gameDraw()
{
//将序号与图片建立联系
for (int i=0;i<ROW;i++)
{
for (int j=0;j<COL;j++)
{
putimage(j * 100, i * 100, &pimg[map[i][j]]);
}
}
//setlinecolor(RED);
//把线画出来
for (int i=0;i<=ROW;i++)
{
line(0, i * 100, getwidth(), i * 100);//横线
line(i*100,0,i*100,getheight());//竖线
}
}
void showmap()
{
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
printf("%2d ", map[i][j]);
}
printf("\n");
}
}
void MouseEvent()
{
//获取鼠标信息
ExMessage msg = getmessage();
//针对不同鼠标消息进行处理
if (msg.message == WM_LBUTTONDOWN)
{
int r=msg.y/100;
int c=msg.x/100;
//获取白块数组 序号15
int wr = 0;
int wc = 0;
for (int i=0;i<ROW;i++)
{
for (int j=0;j<COL;j++)
{
if (map[i][j] == 15)
{
wr = i;
wc = j;
}
}
}
if (r == wr + 1 && c == wc||
r== wr -1 && c==wc ||
r==wr && c==wc+1 ||
r==wr && c==wc-1
)
{
int t = map[r][c];
map[r][c] = map[wr][wc];
map[wr][wc] = t;
}
}
else if (msg.message == WM_RBUTTONDOWN)
{
//冒泡排序
int* p = (int*)map;//二维转一维
//确定趟数
for (int i=0;i<ROW*COL-1;i++)
{
//确定对数
for (int j=0;j<ROW*COL-1-i;j++)
{
if (p[j] > p[j + 1])
{
int t = p[j];
p[j] = p[j + 1];
p[j + 1] = t;
}
}
}
}
}
bool judge()
{
int* p = (int*)map;
for (int i=0;i<ROW*COL-1;i++)
{
if (p[i] > p[i + 1])
return false;
}
return true;
}
int main()
{
srand((unsigned int)time(NULL));
//初始化图形窗口
initgraph(400, 400,EX_SHOWCONSOLE);
//打开音乐
mciSendString("open aaa.mp3", NULL, 0, NULL);
//播放音乐
mciSendString("play aaa.mp3", NULL, 0, NULL);
gameInit();
showmap();
//双缓冲绘图
BeginBatchDraw();
while (true)
{
gameDraw();
FlushBatchDraw();
if (judge())
{
MessageBox(GetHWnd(), _T("恭喜你,过关鸟!!!"), _T("boom"), MB_OK);
exit(0);
}
MouseEvent();
}
EndBatchDraw();
getchar();//防止界面闪退
return 0;
}
拼图_游戏(C语言--vs2019编译器)
C语言拼图游戏实现
最新推荐文章于 2025-11-30 14:17:11 发布
5426





