C语言视频,C语言速成,C语言拼图游戏
完整源码:
#include
#include
#include
#define WINDOW_WIDTH 600//窗口的宽
#define WINDOW_HEIGHT 500//窗口的高
#define PIC_SIZE 100//要把整张图片分成100*100的大小
#define ROW WINDOW_WIDTH/ PIC_SIZE
#define COL WINDOW_HEIGHT/PIC_SIZE
IMAGE img;//定义一个存放图片的变量
IMAGE picImg[ROW*COL];
int map[ROW][COL];
void RandArry()
{
int temp[ROW*COL];
for (int i = 0; i < ROW*COL; i++)
{
temp[i] = i;
}
int num = 0;//一维数组的下标
int maxSize = ROW*COL;//temp数组的大小
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
num = rand() % maxSize;
map[i][j] = temp[num];
//从选中的下标开始,把后面的元素移动一个单位
for (int tep = num; tep < maxSize - 1; tep++)
{
temp[tep] = temp[tep + 1];
}
maxSize--;
}
}
}
void GameInit()
{
RandArry();
loadimage(&img, L"t.jpg", WINDOW_WIDTH, WINDOW_HEIGHT);
//putimage(0, 0, &img);
//切割图片
SetWorkingImage(&img);
int n = 0;
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
getimage(&picImg[n], i*PIC_SIZE, j*PIC_SIZE, PIC_SIZE, PIC_SIZE);
n++;
}
}
SetWorkingImage(NULL);
//读取一张白色图片加载到最后一张
loadimage(&picImg[ROW*COL - 1], L"ti.jpg", PIC_SIZE, PIC_SIZE);
}
//绘制界面
void DrawMap()
{
//把二维数组的元素跟图片绑定在一起
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
putimage(i*PIC_SIZE, j*PIC_SIZE, &picImg[map[i][j]]);
}
}
}
//游戏规则
void PlayGame()
{
int row, col;//鼠标点击的图片对应的数组下标
int blankR, blankC;//空白图片的对应的数组下标
int blankX, blankY;
MOUSEMSG msg = { 0 };
//1.鼠标点下去时 确定鼠标点的是哪张图片 确定空白图片的位置
//2.点中的图片是不是和空白图片是相邻的
//3.交换二维数组的这两个元素
for (int i = 0; i < ROW; i++)
{
for (int j = 0; j < COL; j++)
{
if (map[i][j] == ROW*COL - 1)
{
blankR = i;
blankC = j;
}
}
}
blankX = blankR*PIC_SIZE;
blankY = blankC*PIC_SIZE;
//确定鼠标点击图片的下标
msg = GetMouseMsg();
switch (msg.uMsg)
{
case WM_LBUTTONDOWN:
row = msg.x / PIC_SIZE;
col = msg.y / PIC_SIZE;
if ((msg.x > blankX&&msg.xblankY - PIC_SIZE&&msg.y
(msg.x>blankX - PIC_SIZE&&msg.xblankY &&msg.y < blankY + PIC_SIZE)||
(msg.x>blankX + PIC_SIZE&&msg.xblankY &&msg.y < blankY + PIC_SIZE) ||
(msg.x>blankX &&msg.xblankY + PIC_SIZE &&msg.y < blankY + 2*PIC_SIZE))
{
map[blankR][blankC] = map[row][col];
map[row][col] = ROW*COL - 1;
}
break;
default:
break;
}
}
int main()
{
initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);//初始化一个界面
srand((unsigned)time(NULL));//种下随机因子
GameInit();
while (1)
{
DrawMap();
PlayGame();
}
getchar();
closegraph();
return 0;
}