C语言实现拼图小游戏

最近闲着无聊,写了一个拼图游戏,正好学习一下图片的处理。

效果图如下:

程序中用到了图形库操作,把一张图片分割,用一个二维数组代表各个碎片,初始打乱数组就可以得到打乱的图片。

void get_arr()

{

int book[10] = { 0 };

srand((unsigned int)time(NULL)); //设置时间种子

for(int i=0; i<3; i++) //随机arr数组,打乱图片顺序

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

{

if (i == 2 && j == 2)

break;

while (1)

{

int s = rand() % 8;

if (book[s] == 0)

{

book[s] = 1;

arr[i][j] = s;

break;

}

}

}

arr[2][2] = 9;

}

因为这里数字并不大,所以我就暴力写了一下。

总共有5张图片,为了简化难度,我加了一张纯数字的。

部分截图:

拼图成功后,会出现拼图成功的提示,因为素材限制,只能弄成下面的样。

部分游戏截图:

全部的代码和素材:C语言拼图游戏

下面是代码:

#include <stdio.h>

#include <stdlib.h>

#include <graphics.h>

#include <windows.h>

#include <conio.h>

#include<time.h>

#include <iostream>

#include <algorithm>

#define N 600 //图片长和宽,为便于计算取600

#define M N/3 //分为9块,每块有

using namespace std;

IMAGE t, over;

int arr[5][5];

void get_arr()

{

int book[10] = { 0 };

srand((unsigned int)time(NULL)); //设置时间种子

for(int i=0; i<3; i++) //随机arr数组,打乱图片顺序

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

{

if (i == 2 && j == 2)

break;

while (1)

{

int s = rand() % 8;

if (book[s] == 0)

{

book[s] = 1;

arr[i][j] = s;

break;

}

}

}

arr[2][2] = 9;

}

void choosephoto()

{

int choose;

srand((unsigned int)time(NULL)); //设置时间种子

choose = rand() % 5; //选择图片

if(choose==0)

loadimage(&t, "少司命.jpeg", N, N); //加载图片

if (choose == 1)

loadimage(&t, "柯南.jpg", N, N);

if (choose == 2)

loadimage(&t, "马里奥.jpeg", N, N);

if (choose == 3)

loadimage(&t, "火影.jpeg", N, N);

if (choose == 4)

loadimage(&t, "数字.png", N, N);

}

void Game() //显示拼图

{

initgraph(N, N);

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

{

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

{

putimage(j * M, i * M, M, M, &t, arr[i][j]%3*M, arr[i][j]/3*M); //切割图片

}

}

}

int GameOver()

{

int temp = 1;

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

{

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

{

if (arr[i][j] != 3 * i + j)

{

temp = 0;

break;

}

}

if (temp == 0)

break;

}

if (temp == 1)

{

loadimage(&over, "游戏结束.png", 400, 400);

putimage(100, 100, &over);

return 1;

}

}

void Gamestart()

{

char ch;

int tx, ty;

while (1)

{

if (_kbhit()) { //检测键盘输入

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

{

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

if (arr[i][j] == 9)

{

tx = i;

ty = j;

break;

}

}

ch = _getch();

if (ch == 72 || ch=='w') //按键为w或者上

{

if (tx >= 1)

{

//swap(arr[tx][ty], arr[tx - 1][ty]);

int x = arr[tx][ty];

arr[tx][ty] = arr[tx - 1][ty];

arr[tx - 1][ty] = x;

}

}

else if (ch == 75 || ch=='a') //按键为a或者左

{

if (ty >= 1)

{

int x = arr[tx][ty];

arr[tx][ty] = arr[tx][ty - 1];

arr[tx][ty - 1] = x;

}

}

else if (ch == 80 || ch=='s') //按键为s或者下

{

if (tx < 2)

{

int x = arr[tx][ty];

arr[tx][ty] = arr[tx + 1][ty];

arr[tx + 1][ty] = x;

}

}

else if (ch == 77 || ch=='d') //按键为d或者右

{

if (ty < 2)

{

int x = arr[tx][ty];

arr[tx][ty] = arr[tx][ty + 1];

arr[tx][ty + 1] = x;

}

}

Game(); //输出拼图界面

if (GameOver())

break;

}

}

while (ch=getchar())

if (ch == '\n')

break;

}

int main()

{

get_arr(); //获取初始数组

choosephoto(); //选择图片

Game(); //输出起始拼图

Gamestart(); //游戏开始

system("pause");

closegraph(); //关闭画布

return 0;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是 C语言实现拼图小游戏 的全部内容, 来源链接: utcz.com/p/245060.html

回到顶部