文章目录
C语言中的拼图游戏,制作不易,后续将会加以改进其中内容的不足。
一、算法步骤
1.引入库
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <graphics.h>
#include <conio.h>
#include <time.h>
IMAGE mm;
IMAGE white;
int map[4][4] =
{
0, 1, 2, 3,
4, 5, 6, 7,
8, 9, 10, 11,
12, 13, 14, 15
};
//初始化二维数组,且不能重复
void makeMap()
{
int arr[15];
int length = 15;
for (int i = 0; i < 15; i++)
{
arr[i] = i;
}
for (int i = 0; i < 4; i++)
{
int j = 0;
for (j = 0; j < 4; j++)
{
if (j == 3 && i == 3)
{
map[i][j] = 15;
continue;
}
int pos = rand() % length; //随机产生下标;
map[i][j] = arr[pos];
for (int k = 0; k < length; k++)
{
arr[k] = arr[k + 1];
}
length--;
}
}
}
struct
{
int i;
int j;
}role = {0,0};
void loadResource()
{
loadimage(&mm, "mm.jpg", 800, 800);
loadimage(&white, "white.jpg");
}
//游戏地图
void drawMap()
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
int x = 200 * j;
int y = 200 * i;
if (map[i][j] == 15)
{
putimage(x, y, &white);
}
else
{
putimage(x, y, 200, 200, &mm, (map[i][j] % 4) * 200, (map[i][j] / 4) * 200);
}
}
}
}
//定位
void searchWhite()
{
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (map[i][j] == 15)
{
role.i = i;
role.j = j;
return;
}
}
}
}
int gameOver()
{
int count = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (map[i][j] != count++)
{
return 0;
}
}
}
return 1;
}
//游戏过程
void playGame()
{
int i = 0;
int j = 0;
MOUSEMSG m;
while (1)
{
drawMap();
if (gameOver())
{
break;
}
searchWhite();
m = GetMouseMsg();
switch (m.uMsg)
{
case WM_LBUTTONDOWN:
j = m.x / 200;
i = m.y / 200;
if (i == role.i - 1 && j == role.j)
{
map[role.i][role.j] = map[i][j];
map[i][j] = 15;
}
if (i == role.i + 1 && j == role.j)
{
map[role.i][role.j] = map[i][j];
map[i][j] = 15;
}
if (i == role.i&&j == role.j + 1)
{
map[role.i][role.j] = map[i][j];
map[i][j] = 15;
}
if (i == role.i&&j == role.j - 1)
{
map[role.i][role.j] = map[i][j];
map[i][j] = 15;
}
break;
}
}
}
int main()
{
srand((unsigned int)time(NULL));
initgraph(800, 800);
loadResource();
makeMap();
playGame();
settextstyle(35, 0, "楷体");
setbkmode(TRANSPARENT);
outtextxy(300, 300, "游戏结束");
_getch();
closegraph();
return 0;
}
2.读入数据,显示结果
二、总结
其中还有许多需要完善的地方,将会在后面加以改进,只作为一个参考,后续也将补录完成!